diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 9614d0ea21..166f0b20b1 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -9,6 +9,7 @@ - **NodeBB version:** - **NodeBB git hash:** +- **NodeJS version:** - **Installed NodeBB Plugins:** diff --git a/CHANGELOG.md b/CHANGELOG.md index b080e7f51d..0d640b817f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,74 @@ +#### v1.15.1 (2020-11-11) + +##### Chores + +* incrementing version number - v1.15.1-beta.0 (e033da8a) +* fallback l10n for admin-settings-api (8368c25b) +* **deps:** + * update dependency eslint to v7.13.0 (bcbc0854) + * update dependency eslint-config-airbnb-base to v14.2.1 (d227fe9f) + * update commitlint monorepo to v11 (90bcfa6d) + +##### New Features + +* #8864, add action:events.log (9c5c32d4) +* show db info side by side (62c0454c) +* add language keys for admin-settings-api (d32e4e02) +* #8824, cache refactor (#8851) (f1f9b225) +* move mkdirp to beforeBuild so it doesnt get called twice (6255874e) +* group exists API call in write api (d2631922) +* user exist route in write api (1446cec7) +* new shorthand route /api/v3/users/bySlug/:userslug (60e1e99b) +* allow passwords with length > 73 characters (#8818) (512f6de6) +* #8821, allow guest topic views (9e3eb5d4) + +##### Bug Fixes + +* #8869, dont escape category title,description twice (567c5f20) +* refresh flags list on bulk action success (769aba0a) +* test breakage from f300c933a50263039a57811f8cc716df39a138b0 (ee4d90f6) +* remove some unnecessary jquery wrappers (9f7902ef) +* send back jquery object to keep backwards compat (978f1ee0) +* use header/footer cache in prod (a0164b1c) +* add missing maxAge to cache (05a92885) +* clear header-cache after each suite (3f5f38dd) +* show msg on fail (255cf43e) +* spec (fe63c6ae) +* guest header/footer cache (2e446392) +* #8846, possible fix (74951f59) +* winston error message (16d03975) +* permanent redirect on user api redirect shorthand (6b196a20) +* user exist route needs no authentication (f2bb42c0) +* #8840, don't crash if /compose route is called with no query params (c61dee4b) +* XSS in event:banned messaging modal (f68bce86) +* #8838, fix chat dropdown timestamps (78ee8332) +* #8836, truncate fullname (76cd5b0f) +* #8827, do not require admin:users privilege to ban users (891a1ea2) +* **deps:** + * update dependency nodebb-plugin-mentions to v2.13.4 (1460a7a8) + * update dependency diff to v5 (72d1b3cd) + * update dependency nodebb-theme-persona to v10.2.67 (#8847) (e250c3f1) + * update dependency json2csv to v5.0.4 (#8865) (ba7b23ac) + * update dependency postcss to v8.1.7 (#8866) (2946bb16) + * update dependency nodebb-theme-slick to v1.2.40 (#8863) (20f4fe08) + * update dependency nodebb-plugin-mentions to v2.13.3 (#8862) (c18f4491) + * update dependency benchpressjs to v2.1.0 (14ba6383) + * update dependency benchpressjs to v2.0.9 (381a32ab) + * update dependency mongodb to v3.6.3 (#8841) (7e273e77) + * update dependency nodebb-theme-persona to v10.2.66 (#8839) (00f90cd9) + * update dependency nodebb-plugin-mentions to v2.13.2 (#8835) (064c99cd) + * update dependency postcss to v8.1.6 (e0cf9740) + * update dependency @nodebb/socket.io-adapter-mongo to v3.1.1 (#8831) (40eb658b) + * update dependency @nodebb/mubsub to v1.7.1 (#8830) (7b8a5567) + * update dependency postcss to v8.1.5 (9f5ef9d0) +* **#8828:** web install templates now compiled (#8832) (de5a21f1) +* **acp:** max-height for plugin menu list (eec630f1) + +##### Refactors + +* move session revocation route to write api (f300c933) +* change Benchpress.parse to .render (#8856) (e128264b) + #### v1.15.0 (2020-11-04) ##### Breaking Changes diff --git a/install/data/defaults.json b/install/data/defaults.json index 9cb646a2f8..05b16670cc 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -86,6 +86,7 @@ "notificationType_post-edit": "notification", "notificationType_follow": "notification", "notificationType_new-chat": "notification", + "notificationType_new-group-chat": "notification", "notificationType_group-invite": "notification", "notificationType_group-request-membership": "notification", "notificationType_mention": "notification", @@ -115,12 +116,14 @@ "hideEmail": 0, "allowGuestHandles": 0, "guestsIncrementTopicViews": 1, + "allowGuestReplyNotifications": 1, "incrementTopicViewsInterval": 60, "recentMaxTopics": 200, "disableRecentCategoryFilter": 0, "maximumRelatedTopics": 0, "disableEmailSubscriptions": 0, "emailConfirmInterval": 10, + "removeEmailNotificationImages": 0, "inviteExpiration": 7, "digestHour": 17, "passwordExpiryDays": 0, @@ -136,6 +139,9 @@ "necroThreshold": 7, "categoryWatchState": "watching", "submitPluginUsage": 1, + "showAverageApprovalTime": true, + "autoApproveTime": 0, "maxUserSessions": 10, - "useCompression": 0 + "useCompression": 0, + "updateUrlWithPostIndex": 1 } \ No newline at end of file diff --git a/install/package.json b/install/package.json index 9c372ee3fa..ac8d0fa29b 100644 --- a/install/package.json +++ b/install/package.json @@ -2,7 +2,7 @@ "name": "nodebb", "license": "GPL-3.0", "description": "NodeBB Forum", - "version": "1.15.1", + "version": "1.15.2-beta.1", "homepage": "http://www.nodebb.org", "repository": { "type": "git", @@ -41,7 +41,7 @@ "async": "^3.2.0", "autoprefixer": "^10.0.0", "bcryptjs": "2.4.3", - "benchpressjs": "2.1.0", + "benchpressjs": "2.2.2", "body-parser": "^1.19.0", "bootbox": "4.4.0", "bootstrap": "^3.4.1", @@ -77,7 +77,7 @@ "jquery-serializeobject": "1.0.0", "jquery-ui": "1.12.1", "jsesc": "3.0.2", - "json2csv": "5.0.4", + "json2csv": "5.0.5", "jsonwebtoken": "^8.5.1", "less": "^3.11.1", "lodash": "^4.17.15", @@ -93,19 +93,19 @@ "@nodebb/mubsub": "1.7.1", "@nodebb/socket.io-adapter-mongo": "3.1.1", "nconf": "^0.10.0", - "nodebb-plugin-composer-default": "6.4.6", + "nodebb-plugin-composer-default": "6.4.7", "nodebb-plugin-dbsearch": "4.1.2", "nodebb-plugin-emoji": "^3.3.0", "nodebb-plugin-emoji-android": "2.0.0", "nodebb-plugin-markdown": "8.12.1", - "nodebb-plugin-mentions": "2.13.4", + "nodebb-plugin-mentions": "2.13.5", "nodebb-plugin-soundpack-default": "1.0.0", - "nodebb-plugin-spam-be-gone": "0.7.3", + "nodebb-plugin-spam-be-gone": "0.7.6", "nodebb-rewards-essentials": "0.1.4", "nodebb-theme-lavender": "5.0.14", - "nodebb-theme-persona": "10.2.67", - "nodebb-theme-slick": "1.2.40", - "nodebb-theme-vanilla": "11.3.0", + "nodebb-theme-persona": "10.2.74", + "nodebb-theme-slick": "1.3.2", + "nodebb-theme-vanilla": "11.3.3", "nodebb-widget-essentials": "4.1.2", "nodemailer": "^6.4.6", "nprogress": "0.2.0", @@ -127,7 +127,7 @@ "sanitize-html": "^2.0.0", "semver": "^7.2.1", "serve-favicon": "^2.5.0", - "sharp": "0.26.2", + "sharp": "0.26.3", "sitemap": "^6.1.0", "slideout": "1.0.1", "socket.io": "2.3.0", @@ -168,7 +168,7 @@ "mocha": "8.2.1", "mocha-lcov-reporter": "1.3.0", "nyc": "15.1.0", - "smtp-server": "3.7.0" + "smtp-server": "3.8.0" }, "bugs": { "url": "https://github.com/NodeBB/NodeBB/issues" diff --git a/install/web.js b/install/web.js index 715b90a766..6589d8bc5a 100644 --- a/install/web.js +++ b/install/web.js @@ -240,7 +240,7 @@ async function compileTemplate() { const source = await fs.promises.readFile(sourceFile, 'utf8'); const [compiled] = await Promise.all([ - Benchpress.precompile(source), + Benchpress.precompile(source, { filename: 'install/index.tpl' }), mkdirp(path.dirname(destJs)), ]); diff --git a/public/language/ar/admin/manage/privileges.json b/public/language/ar/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/ar/admin/manage/privileges.json +++ b/public/language/ar/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/ar/admin/menu.json b/public/language/ar/admin/menu.json index a4935201fe..caccf3ca9e 100644 --- a/public/language/ar/admin/menu.json +++ b/public/language/ar/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "ترقيم الصفحات", "settings/tags": "الكلمات المفتاحية", "settings/notifications": "التنبيهات", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/ar/admin/settings/email.json b/public/language/ar/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/ar/admin/settings/email.json +++ b/public/language/ar/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/ar/admin/settings/guest.json b/public/language/ar/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/ar/admin/settings/guest.json +++ b/public/language/ar/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/ar/admin/settings/user.json b/public/language/ar/admin/settings/user.json index b433a32fd2..74e0f2cbe5 100644 --- a/public/language/ar/admin/settings/user.json +++ b/public/language/ar/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "لا يوجد تسجيل", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "الحد الأقصى للدعوات لكل عضو", "max-invites": "الحد الأقصى للدعوات لكل عضو", "max-invites-help": "0 لعدم تحديد قيود، الإدارة تحصل على دعوات لامحدودة
هذا الخيار يعمل فقط عند تحديد خيار \"بالدعوات فقط\"", @@ -62,6 +65,7 @@ "restrict-chat": "السماح فقط برسائل الدردشة من المستخدمين الذين أتبعهم", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/ar/flags.json b/public/language/ar/flags.json index 574e792e3b..1e5dff7c54 100644 --- a/public/language/ar/flags.json +++ b/public/language/ar/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/ar/groups.json b/public/language/ar/groups.json index 196a286de6..56af464733 100644 --- a/public/language/ar/groups.json +++ b/public/language/ar/groups.json @@ -35,6 +35,8 @@ "details.member_count": "عدد اﻷعضاء", "details.creation_date": "تاريخ الإنشاء", "details.description": "الوصف", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "معاينة الوسام", "details.change_icon": "تغيير الأيقونة", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/ar/notifications.json b/public/language/ar/notifications.json index 71ae442723..9f349b3895 100644 --- a/public/language/ar/notifications.json +++ b/public/language/ar/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/ar/register.json b/public/language/ar/register.json index 7ff3762781..a28ddf9668 100644 --- a/public/language/ar/register.json +++ b/public/language/ar/register.json @@ -18,6 +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.", "interstitial.intro": "نحتاج إلى بعض المعلومات الإضافية قبل أن نتمكن من إنشاء حسابك.", "interstitial.errors-found": "تعذر علينا إتمام عملية التسجيل:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/ar/topic.json b/public/language/ar/topic.json index 63fc6a10ff..0871e78c11 100644 --- a/public/language/ar/topic.json +++ b/public/language/ar/topic.json @@ -30,6 +30,7 @@ "locked": "مقفل", "pinned": "مثبت", "moved": "منقول", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/ar/user.json b/public/language/ar/user.json index 282be242b3..9970485935 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة", "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع", "topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها", "follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها", diff --git a/public/language/ar/users.json b/public/language/ar/users.json index 45cc5821a1..23e893d228 100644 --- a/public/language/ar/users.json +++ b/public/language/ar/users.json @@ -11,6 +11,7 @@ "online-only": "المتصلون فقط", "invite": "دعوة", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1", "user_list": "قائمة اﻷعضاء", "recent_topics": "أحدث المواضيع", diff --git a/public/language/bg/admin/manage/privileges.json b/public/language/bg/admin/manage/privileges.json index 7293f61dc0..10f407dcdd 100644 --- a/public/language/bg/admin/manage/privileges.json +++ b/public/language/bg/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Качване на файлове", "signature": "Подпис", "ban": "Блокиране", + "invite": "Пращане на покана", "search-content": "Търсене на съдържание", "search-users": "Търсене на потребители", "search-tags": "Търсене на етикети", diff --git a/public/language/bg/admin/menu.json b/public/language/bg/admin/menu.json index e56f50657f..76362c2c21 100644 --- a/public/language/bg/admin/menu.json +++ b/public/language/bg/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Странициране", "settings/tags": "Етикети", "settings/notifications": "Известия", + "settings/api": "Достъп чрез ППИ", "settings/sounds": "Звуци", "settings/social": "Обществени", "settings/cookies": "Бисквитки", diff --git a/public/language/bg/admin/settings/email.json b/public/language/bg/admin/settings/email.json index 3605e93a50..2722d28c0d 100644 --- a/public/language/bg/admin/settings/email.json +++ b/public/language/bg/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Следният адрес на е-поща е този, който получателят ще види в полетата „От“ и “Отговор до“.", "from": "Име за полето „От“", "from-help": "Името на изпращача, което да бъде показано в е-писмото.", - + "smtp-transport": "Транспорт чрез SMTP", "smtp-transport.enabled": "Използване на външен сървър за е-поща за изпращане на е-писма", "smtp-transport-help": "Можете да изберете от списък от познати услуги, или да въведете такава ръчно.", @@ -35,5 +35,7 @@ "subscriptions": "Резюмета по е-поща", "subscriptions.disable": "Изключване на резюметата по е-пощата", "subscriptions.hour": "Време за разпращане", - "subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. 0 за полунощ, 17 за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.
Приблизителното време на сървъра е:
Изпращането на следващия ежедневен бюлетин е планирано за " + "subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. 0 за полунощ, 17 за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.
Приблизителното време на сървъра е:
Изпращането на следващия ежедневен бюлетин е планирано за ", + "notifications.settings": "Настройки за известията по е-поща", + "notifications.remove-images": "Премахване на изображенията от известията по е-поща" } \ No newline at end of file diff --git a/public/language/bg/admin/settings/guest.json b/public/language/bg/admin/settings/guest.json index 4e1faed5a9..d87b6ec60d 100644 --- a/public/language/bg/admin/settings/guest.json +++ b/public/language/bg/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Имена за гостите", + "settings": "Настройки", "handles.enabled": "Позволяване на имената за гостите", "handles.enabled-help": "Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“.", - "topic-views": "Преглеждания на темите", - "topic-views.enabled": "Гостите да допринасят за броя на преглеждания на темите" + "topic-views.enabled": "Гостите да допринасят за броя на преглеждания на темите", + "reply-notifications.enabled": "Гостите да могат да предизвикват изпращането на известия за отговорите си" } \ No newline at end of file diff --git a/public/language/bg/admin/settings/user.json b/public/language/bg/admin/settings/user.json index a07cfcdee4..7feafb3897 100644 --- a/public/language/bg/admin/settings/user.json +++ b/public/language/bg/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Без регистриране", "registration-type.help": "Обикновена — Потребителите могат да се регистрират от страницата /register.
\nСамо с покана — Потребителите могат да поканят други от страницата с потребителите.
\nСамо с покана от администратор — Само администратори могат да канят други от страницата с потребителите и от страниците за управление на потребителите.
\nБез регистриране — Потребителите не се регистрират.
", "registration-approval-type.help": "Обикновена — Потребителите се регистрират на момента.
\nОдобрена от администратор — Потребителските регистрации се поставят в опашка за одобрение, която администраторите преглеждат.
\nОдобрена от администратор по IP адрес — Новите потребители се регистрират по обикновения начин, а онези, от чиито IP адрес вече са се регистрирали други акаунти, се нуждаят от одобрението на администратор.
", + "registration-queue-auto-approve-time": "Време за автоматично одобрение", + "registration-queue-auto-approve-time-help": "Брой часове преди потребител да бъде одобрен автоматично. 0 = изключено.", + "registration-queue-show-average-time": "Средното време за одобрение на нов потребител да се показва на потребителите", "registration.max-invites": "Максимален брой покани на потребител", "max-invites": "Максимален брой покани на потребител", "max-invites-help": "0 = няма ограничение. Администраторите могат да разпращат неограничен брой покани.
Тази стойност се използва, само ако е избран режимът „Само с покана“.", @@ -62,6 +65,7 @@ "restrict-chat": "Разрешаване на съобщенията само от потребители, които следвам", "outgoing-new-tab": "Отваряне на външните връзки в нов подпрозорец", "topic-search": "Включване на търсенето в темите", + "update-url-with-post-index": "Обновяване на адресната лента с номера на публикацията по време на разглеждане на темите", "digest-freq": "Абониране за резюмета", "digest-freq.off": "Изключено", "digest-freq.daily": "Ежедневно", diff --git a/public/language/bg/flags.json b/public/language/bg/flags.json index 66e013266b..d8d404f2a2 100644 --- a/public/language/bg/flags.json +++ b/public/language/bg/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Най-много положителни гласове", "sort-replies": "Най-много отговори", - "modal-title": "Докладване на неуместно съдържание", + "modal-title": "Докладване на съдържанието", "modal-body": "Моля, посочете причината за докладването на %1 %2 за преглед. Или използвайте някой от бутоните за бързо докладване, ако са приложими.", "modal-reason-spam": "Спам", "modal-reason-offensive": "Обидно", diff --git a/public/language/bg/groups.json b/public/language/bg/groups.json index 9396cf52d6..3aa1e669cf 100644 --- a/public/language/bg/groups.json +++ b/public/language/bg/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Брой на членовете", "details.creation_date": "Дата на създаване", "details.description": "Описание", + "details.member-post-cids": "Категории, от които да се показват публикации", + "details.member-post-cids-help": "Забележка: Ако не изберете нито една категория, ще се смята, че са включени всички категории. Използвайте CTRL и SHIFT, за да изберете няколко възможности.", "details.badge_preview": "Преглед на емблемата", "details.change_icon": "Промяна на иконката", "details.change_label_colour": "Промяна на цвета на етикета", diff --git a/public/language/bg/notifications.json b/public/language/bg/notifications.json index d5818a10a5..f975415a91 100644 --- a/public/language/bg/notifications.json +++ b/public/language/bg/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Когато бъде редактирана публикация в тема, която следите", "notificationType_follow": "Когато някой започне да Ви следва", "notificationType_new-chat": "Когато получите съобщение в разговор", + "notificationType_new-group-chat": "Когато получите съобщение в групов разговор", "notificationType_group-invite": "Когато получите покана за група", "notificationType_group-request-membership": "Когато някой поиска да се включи в група, на която Вие сте собственик", "notificationType_new-register": "Когато някой бъде добавен в опашката за регистрация", diff --git a/public/language/bg/register.json b/public/language/bg/register.json index f18e04cb9a..a07179e345 100644 --- a/public/language/bg/register.json +++ b/public/language/bg/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Съгласен съм с условията за ползване", "terms_of_use_error": "Трябва да се съгласите с условията за ползване", "registration-added-to-queue": "Вашата регистрация беше добавена в опашката за одобрение. Ще получите е-писмо, когато тя бъде одобрена от администратор.", + "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/bg/topic.json b/public/language/bg/topic.json index b173eb2bfa..2c31e0f5d9 100644 --- a/public/language/bg/topic.json +++ b/public/language/bg/topic.json @@ -30,6 +30,7 @@ "locked": "Заключена", "pinned": "Закачена", "moved": "Преместена", + "moved-from": "Преместена от %1", "copy-ip": "Копиране на IP адреса", "ban-ip": "Блокиране на IP адреса", "view-history": "История на редакциите", diff --git a/public/language/bg/user.json b/public/language/bg/user.json index 14ee3c0bb8..e2440e37ca 100644 --- a/public/language/bg/user.json +++ b/public/language/bg/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Отваряне на външните връзки в нов подпрозорец", "enable_topic_searching": "Включване на търсенето в темите", "topic_search_help": "Ако е включено, търсенето в темата ще замени стандартното поведение на браузъра при търсене в страницата и ще Ви позволи да претърсвате цялата тема, а не само това, което се вижда на екрана", + "update_url_with_post_index": "Обновяване на адресната лента с номера на публикацията по време на разглеждане на темите", "scroll_to_my_post": "След публикуване на отговор, да се показва новата публикация", "follow_topics_you_reply_to": "Следене на темите, в които отговаряте", "follow_topics_you_create": "Следене на темите, които създавате", diff --git a/public/language/bg/users.json b/public/language/bg/users.json index 2a6fb90c4b..1d747cd9cb 100644 --- a/public/language/bg/users.json +++ b/public/language/bg/users.json @@ -11,6 +11,7 @@ "online-only": "Само тези на линия", "invite": "Канене", "prompt-email": "Е-пощи:", + "groups-to-join": "Групи, в които да се присъедини след приемане на поканата:", "invitation-email-sent": "Беше изпратено е-писмо за потвърждение до %1", "user_list": "Списък от потребители", "recent_topics": "Скорошни теми", diff --git a/public/language/bn/admin/manage/privileges.json b/public/language/bn/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/bn/admin/manage/privileges.json +++ b/public/language/bn/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/bn/admin/menu.json b/public/language/bn/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/bn/admin/menu.json +++ b/public/language/bn/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/bn/admin/settings/email.json b/public/language/bn/admin/settings/email.json index 205865077f..18d4209380 100644 --- a/public/language/bn/admin/settings/email.json +++ b/public/language/bn/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "ইমেইল ডাইজেস্ট", "subscriptions.disable": "ইমেইল ডাইজেস্ট নিষ্ক্রিয়", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/bn/admin/settings/guest.json b/public/language/bn/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/bn/admin/settings/guest.json +++ b/public/language/bn/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/bn/admin/settings/user.json b/public/language/bn/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/bn/admin/settings/user.json +++ b/public/language/bn/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/bn/flags.json b/public/language/bn/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/bn/flags.json +++ b/public/language/bn/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/bn/groups.json b/public/language/bn/groups.json index 8adb5de82d..b8879ed8e5 100644 --- a/public/language/bn/groups.json +++ b/public/language/bn/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Member Count", "details.creation_date": "Creation Date", "details.description": "Description", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/bn/notifications.json b/public/language/bn/notifications.json index f17cd098c2..6c99b29edd 100644 --- a/public/language/bn/notifications.json +++ b/public/language/bn/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/bn/register.json b/public/language/bn/register.json index 75e8cd31b7..c116f1a313 100644 --- a/public/language/bn/register.json +++ b/public/language/bn/register.json @@ -18,6 +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.", "interstitial.intro": "আপনার একাউন্ট তৈরীর পূর্বে আমাদের আরো কিছু বাড়তি তথ্য জানা প্রয়োজন।", "interstitial.errors-found": "আপনার নিবন্ধনটি সম্পূর্ণ করা সম্ভব হয় নি।", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/bn/topic.json b/public/language/bn/topic.json index 702e6d052f..078de5e741 100644 --- a/public/language/bn/topic.json +++ b/public/language/bn/topic.json @@ -30,6 +30,7 @@ "locked": "বন্ধ", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/bn/user.json b/public/language/bn/user.json index d74ed3e2e0..54ca3a3e03 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "আউটগোয়িং লিংকগুলো নতুন ট্যাবে খুলুন", "enable_topic_searching": "In-Topic সার্চ সক্রীয় করো", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/bn/users.json b/public/language/bn/users.json index e7ba22f9f6..17b65aab16 100644 --- a/public/language/bn/users.json +++ b/public/language/bn/users.json @@ -11,6 +11,7 @@ "online-only": "শুধুমাত্র অনলাইন", "invite": "ইনভাইট", "prompt-email": "ইমেইল", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "%1 কে একটি ইনভাইটেশন ইমেইল পাঠানো হয়েছে", "user_list": "সদস্য তালিকা", "recent_topics": "সাম্প্রতিক টপিক", diff --git a/public/language/cs/admin/manage/privileges.json b/public/language/cs/admin/manage/privileges.json index 721db0ee44..16f257ae6c 100644 --- a/public/language/cs/admin/manage/privileges.json +++ b/public/language/cs/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Náhrát soubory", "signature": "Podpis", "ban": "Blokovat", + "invite": "Invite", "search-content": "Hledat obsah", "search-users": "Hledat uživatele", "search-tags": "Hledat označení", diff --git a/public/language/cs/admin/menu.json b/public/language/cs/admin/menu.json index 77803af507..9be66690ab 100644 --- a/public/language/cs/admin/menu.json +++ b/public/language/cs/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Stránkování", "settings/tags": "Značky", "settings/notifications": "Oznámení", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/cs/admin/settings/email.json b/public/language/cs/admin/settings/email.json index 1938eb5702..c545b1a4bf 100644 --- a/public/language/cs/admin/settings/email.json +++ b/public/language/cs/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Následující e-mailové adresy budou zobrazeny příjemci v políčkách „Od” a „Odpovědět”.", "from": "Jméno – od", "from-help": "Zobrazené jméno v e-mailu v – Od", - + "smtp-transport": "Přenos SMTP", "smtp-transport.enabled": "Pro odesílání e-mailů použít externí e-mailový server ", "smtp-transport-help": "Ze seznamu můžete vybrat známé služby nebo zadat vlastní.", @@ -35,5 +35,7 @@ "subscriptions": "E-mailové odběry", "subscriptions.disable": "Zakázat e-mailové odběry", "subscriptions.hour": "Hodina přehledu", - "subscriptions.hour-help": "Zadejte číslo odpovídající hodině, kdy mají být odeslány přehledové e-maily (tj. 0 pro půlnoc, 17 pro 5:00pm). Mějte na paměti, že tato hodina závisí na hodinách samotného serveru a nemusí tak souhlasit se systémovými hodinami.
Přibližný čas serveru je: .
Další odeslání přehledů je plánováno na ." + "subscriptions.hour-help": "Zadejte číslo odpovídající hodině, kdy mají být odeslány přehledové e-maily (tj. 0 pro půlnoc, 17 pro 5:00pm). Mějte na paměti, že tato hodina závisí na hodinách samotného serveru a nemusí tak souhlasit se systémovými hodinami.
Přibližný čas serveru je: .
Další odeslání přehledů je plánováno na .", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/cs/admin/settings/guest.json b/public/language/cs/admin/settings/guest.json index ff3c9b0065..9435fdc4df 100644 --- a/public/language/cs/admin/settings/guest.json +++ b/public/language/cs/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Zacházení s hosty", + "settings": "Settings", "handles.enabled": "Povolit upravení zacházení s hosty", "handles.enabled-help": "Tato možnost odkryje nové pole, které umožňuje hostům vybrat jméno, které se připojí ke každému příspěvku, který vytvoří. Bude-li zakázáno, budou jednoduše nazýváni „Host”", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/cs/admin/settings/user.json b/public/language/cs/admin/settings/user.json index 198c69b296..1649bb77b4 100644 --- a/public/language/cs/admin/settings/user.json +++ b/public/language/cs/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Bez registrace", "registration-type.help": "Normální - uživatel se může registrovat ze stránky Registrace
\nJen pro pozvané - uživatel může pozvat jiné ze stránkyUživatelé.
♥\nJen pro pozvané správcem - jen správci mohou pozvat jiné ze stránky Uživateléa ze stránky admin/manage/users.
\nBez registrace - žádná registrace uživatelů.
•", "registration-approval-type.help": "Normální - uživatel se může hned registrovat.
\nSchválení správcem - uživatelská registrace je zařazena do fronty pro schválení správcem.
\nSchválení správcem dle IP - pro nové uživatele stav Normální, Schválení správcem pro adresy IP, které již mají účet.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximální počet pozvání na uživatele", "max-invites": "Maximální počet pozvání na uživatele", "max-invites-help": "0 pro neomezené. Správci mají neomezeně pozvánek
Použitelné jen pro „Jen pozvané\"", @@ -62,6 +65,7 @@ "restrict-chat": "Povolit chatové zprávy jen od uživatelů, které sleduji", "outgoing-new-tab": "Otevřít odchozí odkazy v nové záložce", "topic-search": "Povolit hledání v tématu", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Přihlásit k přehledu", "digest-freq.off": "Vypnuto", "digest-freq.daily": "Denně", diff --git a/public/language/cs/flags.json b/public/language/cs/flags.json index cedf3990dd..4228803ec0 100644 --- a/public/language/cs/flags.json +++ b/public/language/cs/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Nahlásit nevhodný obsah", + "modal-title": "Report Content", "modal-body": "Zadejte váš důvod k označení %1 %2 pro kontrolu. Nebo použijte tlačítko je-li dostupné.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Urážlivé", diff --git a/public/language/cs/groups.json b/public/language/cs/groups.json index 3727178a46..96d6738c06 100644 --- a/public/language/cs/groups.json +++ b/public/language/cs/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Počet členů", "details.creation_date": "Datum vytvoření", "details.description": "Popis", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Náhled symbolu", "details.change_icon": "Změnit ikonu", "details.change_label_colour": "Změnit barvu popisu", diff --git a/public/language/cs/notifications.json b/public/language/cs/notifications.json index 662cf1541d..6fe457883d 100644 --- a/public/language/cs/notifications.json +++ b/public/language/cs/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Začne-li vás někdo sledovat", "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-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", diff --git a/public/language/cs/register.json b/public/language/cs/register.json index 2175d64a13..e979d71181 100644 --- a/public/language/cs/register.json +++ b/public/language/cs/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Souhlasím s Podmínkami", "terms_of_use_error": "Musíte souhlasit s podmínkami.", "registration-added-to-queue": "Vaše registrace byla přidána do fronty. Obdržíte e-mail až ji správce schválí.", + "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.", "interstitial.intro": "Před vytvořením účtu vyžadujeme některé dodatečné informace.", "interstitial.errors-found": "Nebylo možné dokončit vaší registraci:", "gdpr_agree_data": "Dávám souhlas se sběrem a zpracováním mých osobních údajů na této webové stránce.", diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json index 68f6a57c4d..14cff97bdf 100644 --- a/public/language/cs/topic.json +++ b/public/language/cs/topic.json @@ -30,6 +30,7 @@ "locked": "Uzamknuto", "pinned": "Připnuto", "moved": "Přesunuto", + "moved-from": "Moved from %1", "copy-ip": "Kopírovat IP", "ban-ip": "Zakázat IP", "view-history": "Upravit historii", diff --git a/public/language/cs/user.json b/public/language/cs/user.json index 4fcf3f1198..5550e69817 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Otevřít odchozí odkaz v nové záložce", "enable_topic_searching": "Povolit vyhledávání v tématu", "topic_search_help": "Je-li povoleno, hledání v tématu přepíše výchozí chování vyhledávání v prohlížeči a umožní vám prohledávat celé téma, namísto pouze toho, co je zobrazeno na obrazovce", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Po odeslání odpovědi, zobrazit nový příspěvek", "follow_topics_you_reply_to": "Sledovat témata, do kterých přispějete", "follow_topics_you_create": "Sledovat témata, která vytvoříte", diff --git a/public/language/cs/users.json b/public/language/cs/users.json index 8ad78761dc..b70ffdff7b 100644 --- a/public/language/cs/users.json +++ b/public/language/cs/users.json @@ -11,6 +11,7 @@ "online-only": "Pouze připojené", "invite": "Pozvat", "prompt-email": "E-maily:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "E-mailová pozvánka byla odeslána na adresu %1", "user_list": "Seznam uživatelů", "recent_topics": "Poslední témata", diff --git a/public/language/da/admin/manage/privileges.json b/public/language/da/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/da/admin/manage/privileges.json +++ b/public/language/da/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/da/admin/menu.json b/public/language/da/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/da/admin/menu.json +++ b/public/language/da/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/da/admin/settings/email.json b/public/language/da/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/da/admin/settings/email.json +++ b/public/language/da/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/da/admin/settings/guest.json b/public/language/da/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/da/admin/settings/guest.json +++ b/public/language/da/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/da/admin/settings/user.json b/public/language/da/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/da/admin/settings/user.json +++ b/public/language/da/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/da/flags.json b/public/language/da/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/da/flags.json +++ b/public/language/da/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/da/groups.json b/public/language/da/groups.json index 9076effaff..e525e7824d 100644 --- a/public/language/da/groups.json +++ b/public/language/da/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Medlemsantal", "details.creation_date": "Oprettelsesdato", "details.description": "Beskrivelse", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Mærke forhåndsvisning", "details.change_icon": "Skift ikon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/da/notifications.json b/public/language/da/notifications.json index e18b411132..daa04bcf68 100644 --- a/public/language/da/notifications.json +++ b/public/language/da/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/da/register.json b/public/language/da/register.json index 720d580301..efa248d279 100644 --- a/public/language/da/register.json +++ b/public/language/da/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Jeg acceptere betingelserne for brug", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Din registrering er blevet tilføjet til godkendelses køen. Du vil mostage en email når du er blevet accepteret af en administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/da/topic.json b/public/language/da/topic.json index 158dbf0587..7ae6aa1e22 100644 --- a/public/language/da/topic.json +++ b/public/language/da/topic.json @@ -30,6 +30,7 @@ "locked": "Låst", "pinned": "Pinned", "moved": "Flyttet", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/da/user.json b/public/language/da/user.json index 950027ff42..2386b1ada9 100644 --- a/public/language/da/user.json +++ b/public/language/da/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Åben udgående link i en ny tab", "enable_topic_searching": "Slå In-Topic søgning til", "topic_search_help": "Hvis slået til, så vil in-topic søgning overskrive browserens almindelige søge function og tillade dig at søge hele emnet, istedet for kun det der er vist på skærmen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Vis emner du har oprettet", diff --git a/public/language/da/users.json b/public/language/da/users.json index 81130f7b08..d9db1f8fcc 100644 --- a/public/language/da/users.json +++ b/public/language/da/users.json @@ -11,6 +11,7 @@ "online-only": "Kun online", "invite": "Invitér", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "En invitations email er blevet sendt til %1", "user_list": "Bruger Liste", "recent_topics": "Seneste Tråde", diff --git a/public/language/de/admin/manage/privileges.json b/public/language/de/admin/manage/privileges.json index a07501dd3d..010833b7c2 100644 --- a/public/language/de/admin/manage/privileges.json +++ b/public/language/de/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Dateien hochladen", "signature": "Signatur", "ban": "Bannen", + "invite": "Invite", "search-content": "Inhalt durchsuchen", "search-users": "Benutzersuche", "search-tags": "Tags suchen", diff --git a/public/language/de/admin/menu.json b/public/language/de/admin/menu.json index 9997a0db6f..24b4a61dea 100644 --- a/public/language/de/admin/menu.json +++ b/public/language/de/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Seitennummerierung", "settings/tags": "Tags", "settings/notifications": "Benachrichtigungen", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/de/admin/settings/email.json b/public/language/de/admin/settings/email.json index 8c4a3508cd..89a5bbba80 100644 --- a/public/language/de/admin/settings/email.json +++ b/public/language/de/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Die folgende E-Mail Adresse ist die E-Mail Adresse, welche dem Empfänger im \"Von\" und \"Antworten\" Bereich sehen wird.", "from": "Name des Absenders", "from-help": "Der Name des Absenders, welcher in der E-Mail angezeigt werden soll.", - + "smtp-transport": "SMTP Konfiguration", "smtp-transport.enabled": "Benutze einen externen Email-Server", "smtp-transport-help": "Du kannst aus einer Liste bekannter Email-Provider auswählen, oder einen benutzerdefinierten eingeben.", @@ -35,5 +35,7 @@ "subscriptions": "Email Zusammenfassungen", "subscriptions.disable": "Deaktivierung der Email Zusammenfassungen", "subscriptions.hour": "Sende Zeit", - "subscriptions.hour-help": "Bitte geben Sie eine Nummer ein, welche die Stunde repräsentiert zu welcher geplante Emails versandt werden sollen (z.B. 0 für Mitternacht, 17 für 5 Uhr Nachmittags). Beachten Sie, dass die Zeit auf der Serverzeit basiert und daher nicht umbedingt mit ihrer Systemzeit übereinstimmen muss.
Die ungefähre Serverzeit ist:
Die nächste tägliche Sendung ist um geplant" + "subscriptions.hour-help": "Bitte geben Sie eine Nummer ein, welche die Stunde repräsentiert zu welcher geplante Emails versandt werden sollen (z.B. 0 für Mitternacht, 17 für 5 Uhr Nachmittags). Beachten Sie, dass die Zeit auf der Serverzeit basiert und daher nicht umbedingt mit ihrer Systemzeit übereinstimmen muss.
Die ungefähre Serverzeit ist:
Die nächste tägliche Sendung ist um geplant", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/de/admin/settings/guest.json b/public/language/de/admin/settings/guest.json index 63f5712808..6c0f22ef55 100644 --- a/public/language/de/admin/settings/guest.json +++ b/public/language/de/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Gastzugang", + "settings": "Settings", "handles.enabled": "Gastzugänge erlauben", "handles.enabled-help": "Diese Option offenbart ein neues Feld, welches Gästen erlaubt einen Nutzernamen zu wählen, welcher sie mit jedem Beitrag assoziiert den sie erstellen. Wenn diese Option deaktiviert ist, werden sie einfach \"Gast\" genannt", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/de/admin/settings/user.json b/public/language/de/admin/settings/user.json index a359e28796..66dd8d835f 100644 --- a/public/language/de/admin/settings/user.json +++ b/public/language/de/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Keine Registrierung", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximale Einladungen pro Benutzer", "max-invites": "Maximale Einladungen pro Benutzer", "max-invites-help": "0 für keine Beschränkung. Admins haben keine beschränkung.
Nur praktikabel für \"Nur Einladungen\".", @@ -62,6 +65,7 @@ "restrict-chat": "Erlaube nur Chatnachrichten von Benutzern denen ich folge", "outgoing-new-tab": "Öffne externe Links in einem neuen Tab", "topic-search": "Suchen innerhalb von Themen aktivieren", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Zusammenfassung abonnieren", "digest-freq.off": "Aus", "digest-freq.daily": "Täglich", diff --git a/public/language/de/flags.json b/public/language/de/flags.json index c13378a447..914b2dcecc 100644 --- a/public/language/de/flags.json +++ b/public/language/de/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Anstößige Inhalte Melden", + "modal-title": "Report Content", "modal-body": "Bitte geben Sie den Grund an, weshalb Sie %1 %2 melden wollen. Alternativ können Sie einen der Schnell-Meldungs-Knöpfe verwenden, wenn anwendbar.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Beleidigend", diff --git a/public/language/de/groups.json b/public/language/de/groups.json index bf30c7f8ef..27a933979f 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Mitgliederanzahl", "details.creation_date": "Erstelldatum", "details.description": "Beschreibung", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Abzeichenvorschau", "details.change_icon": "Symbol ändern", "details.change_label_colour": "Label-Farbe ändern", diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json index 736cf94e69..53407294d2 100644 --- a/public/language/de/notifications.json +++ b/public/language/de/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Wenn ein Post bearbeitet wurde, in einem Thema welches du beobachtest", "notificationType_follow": "Wenn dir jemand neues folgt", "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-request-membership": "Wenn jemand einer Gruppe beitreten möchte, die dir gehört", "notificationType_new-register": "Wenn jemand der Registrierungswarteschlange hinzugefügt wird", diff --git a/public/language/de/register.json b/public/language/de/register.json index 6e11f0b7a4..bb70e93c89 100644 --- a/public/language/de/register.json +++ b/public/language/de/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Ich stimme den Nutzungsbedingungen zu", "terms_of_use_error": "Du musst den Nutzungsbedingungen zustimmen", "registration-added-to-queue": "Deine Registration wurde abgeschickt. Du wirst eine E-Mail erhalten, sobald sie von einem Administrator akzeptiert wird.", + "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.", "interstitial.intro": "Wir benötigen ein wenig mehr Informationen bevor wir dein Konto erstellen können.", "interstitial.errors-found": "Wir konnten deinen Registrierungsvorgang nicht abschließen:", "gdpr_agree_data": "Ich stimme der Sammlung und Verarbeitung meiner Persönlichen Daten auf dieser Website zu.", diff --git a/public/language/de/topic.json b/public/language/de/topic.json index 387375fa94..a28cb572dc 100644 --- a/public/language/de/topic.json +++ b/public/language/de/topic.json @@ -30,6 +30,7 @@ "locked": "Gesperrt", "pinned": "Angeheftet", "moved": "Verschoben", + "moved-from": "Moved from %1", "copy-ip": "IP-Adresse Kopieren", "ban-ip": "IP-Adresse bannen", "view-history": "Verlauf bearbeiten", diff --git a/public/language/de/user.json b/public/language/de/user.json index d953d61d58..5b219f1078 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Ausgehende Links in neuem Tab öffnen", "enable_topic_searching": "Suchen innerhalb von Themen aktivieren", "topic_search_help": "Wenn aktiviert, ersetzt die im-Thema-Suche die Standardsuche des Browsers. Dadurch kannst du im ganzen Thema suchen, nicht nur im sichtbaren Abschnitt.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Zeige eigene Antwort nach dem Erstellen im Thema an", "follow_topics_you_reply_to": "Themen folgen, in denen du geantwortet hast", "follow_topics_you_create": "Themen folgen, die du erstellst", diff --git a/public/language/de/users.json b/public/language/de/users.json index 76805692aa..ce02224f2a 100644 --- a/public/language/de/users.json +++ b/public/language/de/users.json @@ -11,6 +11,7 @@ "online-only": "Nur Online", "invite": "Einladen", "prompt-email": "E-Mails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Eine Einladungsemail wurde an %1 verschickt", "user_list": "Nutzerliste", "recent_topics": "Neueste Themen", diff --git a/public/language/el/admin/manage/privileges.json b/public/language/el/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/el/admin/manage/privileges.json +++ b/public/language/el/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/el/admin/menu.json b/public/language/el/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/el/admin/menu.json +++ b/public/language/el/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/el/admin/settings/email.json b/public/language/el/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/el/admin/settings/email.json +++ b/public/language/el/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/el/admin/settings/guest.json b/public/language/el/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/el/admin/settings/guest.json +++ b/public/language/el/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/el/admin/settings/user.json b/public/language/el/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/el/admin/settings/user.json +++ b/public/language/el/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/el/flags.json b/public/language/el/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/el/flags.json +++ b/public/language/el/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/el/groups.json b/public/language/el/groups.json index eaa90a3803..0953e444c4 100644 --- a/public/language/el/groups.json +++ b/public/language/el/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Member Count", "details.creation_date": "Ημερομηνία Δημιουργίας", "details.description": "Περιγραφή", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/el/notifications.json b/public/language/el/notifications.json index 85efcdc2ed..248c0a6034 100644 --- a/public/language/el/notifications.json +++ b/public/language/el/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/el/register.json b/public/language/el/register.json index e855390b71..9d0d16364b 100644 --- a/public/language/el/register.json +++ b/public/language/el/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Συμφωνώ με τους Όρους Χρήσης", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/el/topic.json b/public/language/el/topic.json index b726e77cd3..8128c0a405 100644 --- a/public/language/el/topic.json +++ b/public/language/el/topic.json @@ -30,6 +30,7 @@ "locked": "Κλειδωμένο", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/el/user.json b/public/language/el/user.json index b7583be3c3..9d546c54b8 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/el/users.json b/public/language/el/users.json index 37ef55e248..a9fd6501e5 100644 --- a/public/language/el/users.json +++ b/public/language/el/users.json @@ -11,6 +11,7 @@ "online-only": "Μόνο Συνδεδεμένοι", "invite": "Πρόσκληση", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "An invitation email has been sent to %1", "user_list": "Λίστα Χρηστών", "recent_topics": "Πρόσφατα Θέματα", diff --git a/public/language/en-GB/admin/manage/privileges.json b/public/language/en-GB/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/en-GB/admin/manage/privileges.json +++ b/public/language/en-GB/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/en-GB/admin/settings/email.json b/public/language/en-GB/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/en-GB/admin/settings/email.json +++ b/public/language/en-GB/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/en-GB/admin/settings/guest.json b/public/language/en-GB/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/en-GB/admin/settings/guest.json +++ b/public/language/en-GB/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/en-GB/admin/settings/user.json b/public/language/en-GB/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/en-GB/admin/settings/user.json +++ b/public/language/en-GB/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/en-GB/flags.json b/public/language/en-GB/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/en-GB/flags.json +++ b/public/language/en-GB/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/en-GB/groups.json b/public/language/en-GB/groups.json index d165c4a71b..0256067933 100644 --- a/public/language/en-GB/groups.json +++ b/public/language/en-GB/groups.json @@ -40,6 +40,8 @@ "details.member_count": "Member Count", "details.creation_date": "Creation Date", "details.description": "Description", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/en-GB/notifications.json b/public/language/en-GB/notifications.json index 3b9e656c0c..17d7a23bdf 100644 --- a/public/language/en-GB/notifications.json +++ b/public/language/en-GB/notifications.json @@ -66,6 +66,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/en-GB/register.json b/public/language/en-GB/register.json index 461295ef5f..c6136b9d0a 100644 --- a/public/language/en-GB/register.json +++ b/public/language/en-GB/register.json @@ -1,27 +1,28 @@ { - "register": "Register", - "cancel_registration": "Cancel Registration", - "help.email": "By default, your email will be hidden from the public.", - "help.username_restrictions": "A unique username between %1 and %2 characters. Others can mention you with @username.", - "help.minimum_password_length": "Your password's length must be at least %1 characters.", - "email_address": "Email Address", - "email_address_placeholder": "Enter Email Address", - "username": "Username", - "username_placeholder": "Enter Username", - "password": "Password", - "password_placeholder": "Enter Password", - "confirm_password": "Confirm Password", - "confirm_password_placeholder": "Confirm Password", - "register_now_button": "Register Now", - "alternative_registration": "Alternative Registration", - "terms_of_use": "Terms of Use", - "agree_to_terms_of_use": "I agree to the Terms of Use", - "terms_of_use_error": "You must agree to the Terms of Use", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", - "interstitial.intro": "We require some additional information before we can create your account.", - "interstitial.errors-found": "We could not complete your registration:", - - "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", - "gdpr_agree_email": "I consent to receive digest and notification emails from this website.", - "gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails." -} \ No newline at end of file + "register": "Register", + "cancel_registration": "Cancel Registration", + "help.email": "By default, your email will be hidden from the public.", + "help.username_restrictions": "A unique username between %1 and %2 characters. Others can mention you with @username.", + "help.minimum_password_length": "Your password's length must be at least %1 characters.", + "email_address": "Email Address", + "email_address_placeholder": "Enter Email Address", + "username": "Username", + "username_placeholder": "Enter Username", + "password": "Password", + "password_placeholder": "Enter Password", + "confirm_password": "Confirm Password", + "confirm_password_placeholder": "Confirm Password", + "register_now_button": "Register Now", + "alternative_registration": "Alternative Registration", + "terms_of_use": "Terms of Use", + "agree_to_terms_of_use": "I agree to the Terms of Use", + "terms_of_use_error": "You must agree to the Terms of Use", + "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", + "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.", + "interstitial.intro": "We require some additional information before we can create your account.", + "interstitial.errors-found": "We could not complete your registration:", + "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", + "gdpr_agree_email": "I consent to receive digest and notification emails from this website.", + "gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails." +} diff --git a/public/language/en-GB/topic.json b/public/language/en-GB/topic.json index e56cefe728..ef7d946bcf 100644 --- a/public/language/en-GB/topic.json +++ b/public/language/en-GB/topic.json @@ -33,6 +33,7 @@ "locked": "Locked", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/en-GB/user.json b/public/language/en-GB/user.json index bbf2f2ba5f..cddce941c6 100644 --- a/public/language/en-GB/user.json +++ b/public/language/en-GB/user.json @@ -133,7 +133,7 @@ "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", diff --git a/public/language/en-GB/users.json b/public/language/en-GB/users.json index 18cf03fde3..87c7d1b4fc 100644 --- a/public/language/en-GB/users.json +++ b/public/language/en-GB/users.json @@ -11,6 +11,7 @@ "online-only": "Online only", "invite": "Invite", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "An invitation email has been sent to %1", "user_list": "User List", "recent_topics": "Recent Topics", diff --git a/public/language/en-US/admin/manage/privileges.json b/public/language/en-US/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/en-US/admin/manage/privileges.json +++ b/public/language/en-US/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/en-US/admin/menu.json b/public/language/en-US/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/en-US/admin/menu.json +++ b/public/language/en-US/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/en-US/admin/settings/email.json b/public/language/en-US/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/en-US/admin/settings/email.json +++ b/public/language/en-US/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/en-US/admin/settings/guest.json b/public/language/en-US/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/en-US/admin/settings/guest.json +++ b/public/language/en-US/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/en-US/admin/settings/user.json b/public/language/en-US/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/en-US/admin/settings/user.json +++ b/public/language/en-US/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/en-US/flags.json b/public/language/en-US/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/en-US/flags.json +++ b/public/language/en-US/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/en-US/groups.json b/public/language/en-US/groups.json index 132200d213..ff52b35c08 100644 --- a/public/language/en-US/groups.json +++ b/public/language/en-US/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Member Count", "details.creation_date": "Creation Date", "details.description": "Description", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/en-US/notifications.json b/public/language/en-US/notifications.json index 91600bf79a..c5d367fae2 100644 --- a/public/language/en-US/notifications.json +++ b/public/language/en-US/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/en-US/register.json b/public/language/en-US/register.json index 3919985750..0de0ff19c9 100644 --- a/public/language/en-US/register.json +++ b/public/language/en-US/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "I agree to the Terms of Use", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/en-US/topic.json b/public/language/en-US/topic.json index 933960757e..16dc2d4b75 100644 --- a/public/language/en-US/topic.json +++ b/public/language/en-US/topic.json @@ -30,6 +30,7 @@ "locked": "Locked", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/en-US/user.json b/public/language/en-US/user.json index 044920c015..48573a2b19 100644 --- a/public/language/en-US/user.json +++ b/public/language/en-US/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behavior and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/en-US/users.json b/public/language/en-US/users.json index 68ee098e47..f5bfcc38ea 100644 --- a/public/language/en-US/users.json +++ b/public/language/en-US/users.json @@ -11,6 +11,7 @@ "online-only": "Online only", "invite": "Invite", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "An invitation email has been sent to %1", "user_list": "User List", "recent_topics": "Recent Topics", diff --git a/public/language/en-x-pirate/admin/manage/privileges.json b/public/language/en-x-pirate/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/en-x-pirate/admin/manage/privileges.json +++ b/public/language/en-x-pirate/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/en-x-pirate/admin/menu.json b/public/language/en-x-pirate/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/en-x-pirate/admin/menu.json +++ b/public/language/en-x-pirate/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/en-x-pirate/admin/settings/email.json b/public/language/en-x-pirate/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/en-x-pirate/admin/settings/email.json +++ b/public/language/en-x-pirate/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/en-x-pirate/admin/settings/guest.json b/public/language/en-x-pirate/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/en-x-pirate/admin/settings/guest.json +++ b/public/language/en-x-pirate/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/en-x-pirate/admin/settings/user.json b/public/language/en-x-pirate/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/en-x-pirate/admin/settings/user.json +++ b/public/language/en-x-pirate/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/en-x-pirate/flags.json b/public/language/en-x-pirate/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/en-x-pirate/flags.json +++ b/public/language/en-x-pirate/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/en-x-pirate/groups.json b/public/language/en-x-pirate/groups.json index 132200d213..ff52b35c08 100644 --- a/public/language/en-x-pirate/groups.json +++ b/public/language/en-x-pirate/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Member Count", "details.creation_date": "Creation Date", "details.description": "Description", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/en-x-pirate/notifications.json b/public/language/en-x-pirate/notifications.json index 705fed3063..26adae26f2 100644 --- a/public/language/en-x-pirate/notifications.json +++ b/public/language/en-x-pirate/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/en-x-pirate/register.json b/public/language/en-x-pirate/register.json index 474b308078..4758b0bb2f 100644 --- a/public/language/en-x-pirate/register.json +++ b/public/language/en-x-pirate/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "I agree to the Terms of Use", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/en-x-pirate/topic.json b/public/language/en-x-pirate/topic.json index 933960757e..16dc2d4b75 100644 --- a/public/language/en-x-pirate/topic.json +++ b/public/language/en-x-pirate/topic.json @@ -30,6 +30,7 @@ "locked": "Locked", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/en-x-pirate/user.json b/public/language/en-x-pirate/user.json index 59ecaba3a3..995ec23a49 100644 --- a/public/language/en-x-pirate/user.json +++ b/public/language/en-x-pirate/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/en-x-pirate/users.json b/public/language/en-x-pirate/users.json index d8b38f8f99..d5b60eaf9a 100644 --- a/public/language/en-x-pirate/users.json +++ b/public/language/en-x-pirate/users.json @@ -11,6 +11,7 @@ "online-only": "Online only", "invite": "Invite", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "An invitation email has been sent to %1", "user_list": "User List", "recent_topics": "Recent Topics", diff --git a/public/language/es/admin/manage/privileges.json b/public/language/es/admin/manage/privileges.json index e589101079..b40262ebb9 100644 --- a/public/language/es/admin/manage/privileges.json +++ b/public/language/es/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Subir Archivos", "signature": "Firma", "ban": "Banear", + "invite": "Invite", "search-content": "Buscar Contenido", "search-users": "Buscar Usuarios", "search-tags": "Buscar Tags", diff --git a/public/language/es/admin/menu.json b/public/language/es/admin/menu.json index 353e99d25e..4cd3ae3061 100644 --- a/public/language/es/admin/menu.json +++ b/public/language/es/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Paginación", "settings/tags": "Etiquetas", "settings/notifications": "Notificaciones", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/es/admin/settings/email.json b/public/language/es/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/es/admin/settings/email.json +++ b/public/language/es/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/es/admin/settings/guest.json b/public/language/es/admin/settings/guest.json index 235c604455..0fbe97ac7b 100644 --- a/public/language/es/admin/settings/guest.json +++ b/public/language/es/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Manejar visitantes", + "settings": "Settings", "handles.enabled": "Permitir manejo de visitantes", "handles.enabled-help": "Esta opción expone un nuevo campo que permite a los invitados escoger un nombre para asociarse con cada entrada/respuesta que hagan. Si está desactivado, se les llamará simplemente \"Invitado\".", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/es/admin/settings/user.json b/public/language/es/admin/settings/user.json index d6f491fc78..1c589f4899 100644 --- a/public/language/es/admin/settings/user.json +++ b/public/language/es/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Sin Registro", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Máximo de Invitaciones por Usuario", "max-invites": "Máximo de Invitaciones por Usuario", "max-invites-help": "0 para no tener restricciones. Los administradores tienen derecho invitaciones infinitas
Solo aplicable a \"Solo con Invitación\"", @@ -62,6 +65,7 @@ "restrict-chat": "Solo permitir mensajes de chat de usuarios a los que sigo", "outgoing-new-tab": "Abrir enlaces externos en una pestaña nueva", "topic-search": "Habilitar Búsqueda Dentro de Tema", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Suscribirse a Informes", "digest-freq.off": "Apagado", "digest-freq.daily": "Diario", diff --git a/public/language/es/flags.json b/public/language/es/flags.json index a33c6919a6..8ac3583388 100644 --- a/public/language/es/flags.json +++ b/public/language/es/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Reportar contenido inapropiado", + "modal-title": "Report Content", "modal-body": "Por favor especifica tu razón para marcar %1 %2 para revisar. Alternativamente, usa una de los botones de reporte rápido si corresponde.", "modal-reason-spam": "Correo no deseado", "modal-reason-offensive": "Ofensivo", diff --git a/public/language/es/groups.json b/public/language/es/groups.json index 1ae4aa37b4..6d5038583d 100644 --- a/public/language/es/groups.json +++ b/public/language/es/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Numero de Miembros", "details.creation_date": "Fecha de Creacion", "details.description": "Descripción", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Previsualización de Insignia", "details.change_icon": "Cambiar Icono", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json index 6dc1c86b19..cd0b726262 100644 --- a/public/language/es/notifications.json +++ b/public/language/es/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Cuando alguien comienza a seguirte", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "Cuando alguien es añadido a una cola de registro", diff --git a/public/language/es/register.json b/public/language/es/register.json index 00cf39d22a..cf48df7fb5 100644 --- a/public/language/es/register.json +++ b/public/language/es/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Acepto los Términos y Condiciones de uso", "terms_of_use_error": "Debes aceptar los términos de uso", "registration-added-to-queue": "Tu registro se ha añadido a la cola de aprobación,. Recibirás un correo cuando este sea aceptado por un administrador. ", + "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.", "interstitial.intro": "Se requiere de información adicional antes de crear tu cuenta.", "interstitial.errors-found": "No pudimos completar tu registro:", "gdpr_agree_data": "Consiento la recolección y el procesamiento de mi información personal en este sitio web", diff --git a/public/language/es/topic.json b/public/language/es/topic.json index dda4294346..d0073d0a43 100644 --- a/public/language/es/topic.json +++ b/public/language/es/topic.json @@ -30,6 +30,7 @@ "locked": "Cerrado", "pinned": "Fijo", "moved": "Movido", + "moved-from": "Moved from %1", "copy-ip": "Copiar IP", "ban-ip": "Banear IP", "view-history": "Editar Historial", diff --git a/public/language/es/user.json b/public/language/es/user.json index 321fab2804..0e05de01f5 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Abrir los enlaces externos en una nueva pestaña", "enable_topic_searching": "Activar la búsqueda \"dentro del tema\"", "topic_search_help": "Si está activada, la búsqueda 'dentro del tema' al usar el buscador de la barra de navegación automáticamente buscaras solo en el tema actual.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Luego de enviar una respuesta, mostrar el nuevo mensaje", "follow_topics_you_reply_to": "Seguir temas a los que respondes", "follow_topics_you_create": "Seguir temas creados por ti", diff --git a/public/language/es/users.json b/public/language/es/users.json index 9fc683b9c1..e190880bb2 100644 --- a/public/language/es/users.json +++ b/public/language/es/users.json @@ -11,6 +11,7 @@ "online-only": "Sólo en línea", "invite": "Invitar", "prompt-email": "Correos electrónico:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Un correo de invitación ha sido enviado a %1", "user_list": "Lista de Usuarios", "recent_topics": "Temas Recientes", diff --git a/public/language/et/admin/manage/privileges.json b/public/language/et/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/et/admin/manage/privileges.json +++ b/public/language/et/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/et/admin/menu.json b/public/language/et/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/et/admin/menu.json +++ b/public/language/et/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/et/admin/settings/email.json b/public/language/et/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/et/admin/settings/email.json +++ b/public/language/et/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/et/admin/settings/guest.json b/public/language/et/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/et/admin/settings/guest.json +++ b/public/language/et/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/et/admin/settings/user.json b/public/language/et/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/et/admin/settings/user.json +++ b/public/language/et/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/et/flags.json b/public/language/et/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/et/flags.json +++ b/public/language/et/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/et/groups.json b/public/language/et/groups.json index 89a2efccf7..fe945ebd3b 100644 --- a/public/language/et/groups.json +++ b/public/language/et/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Liikmete arv", "details.creation_date": "Algatamise kuupäev", "details.description": "Kirjeldus", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Embleemi eelvaade", "details.change_icon": "Vaheta ikooni", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json index 43a8469320..0db60d7e5c 100644 --- a/public/language/et/notifications.json +++ b/public/language/et/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/et/register.json b/public/language/et/register.json index 0b7f075e3d..fd7251067a 100644 --- a/public/language/et/register.json +++ b/public/language/et/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Nõustun foorumi reeglitega", "terms_of_use_error": "Sa pead nõustuma Tingimustega", "registration-added-to-queue": "Teie registreerimine vaadatakse üle. Te saate e-kirja kui administraator on aktsepteerinud registreermimise.", + "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.", "interstitial.intro": "Enne kasutaja loomist on meil vaja lisainfot.", "interstitial.errors-found": "Meil ei õnnestunud registreerimist lõpule viia:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/et/topic.json b/public/language/et/topic.json index cbeff78e93..415dac6e17 100644 --- a/public/language/et/topic.json +++ b/public/language/et/topic.json @@ -30,6 +30,7 @@ "locked": "Lukustatud", "pinned": "Märgistatud", "moved": "Liigutatud", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/et/user.json b/public/language/et/user.json index 2ea578a001..41f1e32fd8 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Ava väljaminevad lingid uues aknas", "enable_topic_searching": "Võimalda teemasisene otsing", "topic_search_help": "Kui see on sisse lükatud, siis teemasisene otsing võtab üle brauseri tavapärase otsingu ning võimaldab otsida ainult ekraanile mahtuva teema asemel terve teema ulatuses.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Pärast vastuse postitamist, näita uut postitust", "follow_topics_you_reply_to": "Jälgi teemasid, millele vastad", "follow_topics_you_create": "Jälgi teemasid, mille lood", diff --git a/public/language/et/users.json b/public/language/et/users.json index 791d850173..8b602fda9a 100644 --- a/public/language/et/users.json +++ b/public/language/et/users.json @@ -11,6 +11,7 @@ "online-only": "Ainult seesolevad", "invite": "Kutsuge", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Kutse on saadetud e-mailile %1", "user_list": "Kasutajate list", "recent_topics": "Viimased teemad", diff --git a/public/language/fa-IR/admin/manage/privileges.json b/public/language/fa-IR/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/fa-IR/admin/manage/privileges.json +++ b/public/language/fa-IR/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/fa-IR/admin/menu.json b/public/language/fa-IR/admin/menu.json index fb1703f728..31a0e96151 100644 --- a/public/language/fa-IR/admin/menu.json +++ b/public/language/fa-IR/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "برچسب ها", "settings/notifications": "آگاه‌سازی‌ها", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "کوکی ها", diff --git a/public/language/fa-IR/admin/settings/email.json b/public/language/fa-IR/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/fa-IR/admin/settings/email.json +++ b/public/language/fa-IR/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/fa-IR/admin/settings/guest.json b/public/language/fa-IR/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/fa-IR/admin/settings/guest.json +++ b/public/language/fa-IR/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/fa-IR/admin/settings/user.json b/public/language/fa-IR/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/fa-IR/admin/settings/user.json +++ b/public/language/fa-IR/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index 42e0884fca..b2a7b9cf65 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -133,7 +133,7 @@ "reputation-system-disabled": "سیستم اعتبار غیر فعال شده است", "downvoting-disabled": "رأی منفی غیر فعال شده است", "not-enough-reputation-to-downvote": "شما اعتبار کافی برای دادن رأی منفی به این پست را ندارید.", - "not-enough-reputation-to-flag": "شما اعتبار کافی برای نشاندار کردن این پست ندارید", + "not-enough-reputation-to-flag": "شما اعتبار کافی را برای گزارش کردن این پست ندارید", "not-enough-reputation-min-rep-website": "شما اعتبار لازم برای درج آدرس وبسایت را ندارید", "not-enough-reputation-min-rep-aboutme": "شما اعتبار لازم برای ویرایش بخش درباره من را ندارید", "not-enough-reputation-min-rep-signature": "شما اعتبار لازم برای ایجاد امضاء را ندارید", diff --git a/public/language/fa-IR/flags.json b/public/language/fa-IR/flags.json index 18cb602477..b9b0e9ece7 100644 --- a/public/language/fa-IR/flags.json +++ b/public/language/fa-IR/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "گزارش محتوای نامناسب", + "modal-title": "Report Content", "modal-body": "لطفا علت گزارش %2 %1 را برای بررسی مشخص کنید. همچنین می توانید از یکی از دکمه های ارسال سریع استفاده کنید.", "modal-reason-spam": "هرزنامه", "modal-reason-offensive": "توهین آمیز", diff --git a/public/language/fa-IR/groups.json b/public/language/fa-IR/groups.json index 9a16084135..6e50aeec20 100644 --- a/public/language/fa-IR/groups.json +++ b/public/language/fa-IR/groups.json @@ -35,6 +35,8 @@ "details.member_count": "تعداد اعضا", "details.creation_date": "زمان ساخته شدن", "details.description": "توضیحات", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "پیش نمایشِ نشان", "details.change_icon": "تغییر آیکن", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/fa-IR/modules.json b/public/language/fa-IR/modules.json index 5df903c5b2..8f7d873aa9 100644 --- a/public/language/fa-IR/modules.json +++ b/public/language/fa-IR/modules.json @@ -59,7 +59,7 @@ "composer.upload-file": "بارگذاری فایل", "composer.zen_mode": "حالت ذن", "composer.select_category": "یک دسته‌بندی انتخاب کنید", - "composer.textarea.placeholder": "Enter your post content here, drag and drop images", + "composer.textarea.placeholder": "محتوای پست خود را اینجا وارد کنید یا تصاویر را به اینجا بکشید و رها کنید", "bootbox.ok": "باشه", "bootbox.cancel": "انصراف", "bootbox.confirm": "تایید", diff --git a/public/language/fa-IR/notifications.json b/public/language/fa-IR/notifications.json index aff9a5edb1..86508854c4 100644 --- a/public/language/fa-IR/notifications.json +++ b/public/language/fa-IR/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "هنگامی که کسی شما را دنبال می کند", "notificationType_new-chat": "هنگامی که شما پیام چتی دریافت می کنید", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "هنگامی که شما دعوتنامه گروه دریافت می کنید", "notificationType_group-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "وقتی کسی به صف ثبت نام اضافه می شود", diff --git a/public/language/fa-IR/register.json b/public/language/fa-IR/register.json index 5c5eb963d2..7d73efbb3c 100644 --- a/public/language/fa-IR/register.json +++ b/public/language/fa-IR/register.json @@ -18,6 +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.", "interstitial.intro": "ما نیاز به برخی اطلاعات اضافی شما قبل از ایجاد شناسه کاربری داریم.", "interstitial.errors-found": "شما نمی‌توانید ثبت نام خود را تکمیل کنید:", "gdpr_agree_data": "من با جمع آوری و پرداز اطلاعات شخصی در این وبسایت موافقم.", diff --git a/public/language/fa-IR/topic.json b/public/language/fa-IR/topic.json index eebcf522a8..5dd9b7fd32 100644 --- a/public/language/fa-IR/topic.json +++ b/public/language/fa-IR/topic.json @@ -22,7 +22,7 @@ "purge": "پاک کردن", "restore": "برگرداندن", "move": "جابه‌جا کردن", - "change-owner": "Change Owner", + "change-owner": "تغییر مالک پست", "fork": "شاخه ساختن", "link": "پیوند", "share": "اشتراک‌گذاری", @@ -30,12 +30,13 @@ "locked": "قفل شده است", "pinned": "سنجاق شده", "moved": "منتقل شده", + "moved-from": "Moved from %1", "copy-ip": "کپی IP", "ban-ip": "مسدود کردن IP", "view-history": "تاریخچه ویرایش", "bookmark_instructions": "برای بازگشت به آخرین پست در این موضوع اینجا را کلیک کنید.", - "flag-post": "Flag this post", - "flag-user": "Flag this user", + "flag-post": "گزارش این پست", + "flag-user": "گزارش این کاربر", "already-flagged": "Already Flagged", "view-flag-report": "View Flag Report", "merged_message": "This topic has been merged into %2", @@ -67,7 +68,7 @@ "thread_tools.move": "جابجا کردن موضوع", "thread_tools.move-posts": "انتقال پست ها", "thread_tools.move_all": "جابجایی همه", - "thread_tools.change_owner": "Change Owner", + "thread_tools.change_owner": "تغییر مالک پست", "thread_tools.select_category": "انتخاب دسته", "thread_tools.fork": "شاخه ساختن از موضوع", "thread_tools.delete": "پاک کردن موضوع", @@ -80,7 +81,7 @@ "thread_tools.merge_topics": "ادغام موضوع ها", "thread_tools.merge": "ادغام", "topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.", - "topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.", + "topic_move_multiple_success": "تاپیک به %1 منتقل خواهد شد. برای جلوگیری از منتقل شدن کلیک کنید.", "topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.", "topic_move_undone": "Topic move undone", "topic_move_posts_success": "Posts will be moved shortly. Click here to undo.", @@ -102,18 +103,18 @@ "fork_topic": "شاخه ساختن از موضوع", "fork_topic_instruction": "پست‌هایی را که می‌خواهید به موضوع تازه ببرید، انتخاب کنید", "fork_no_pids": "هیچ پستی انتخاب نشده!", - "no-posts-selected": "No posts selected!", - "x-posts-selected": "%1 post(s) selected", + "no-posts-selected": "هیچ پستی انتخاب نشده!", + "x-posts-selected": "%1 پست انتخاب شده", "x-posts-will-be-moved-to-y": "%1 post(s) will be moved to \"%2\"", - "fork_pid_count": "%1 پست (ها) انتخاب شده اند", + "fork_pid_count": "%1 پست انتخاب شده", "fork_success": "موضوع با موفقیت منشعب شد! برای رفتن به موضوع انشعابی اینجا را کلیک کنید.", "delete_posts_instruction": "با کلیک بر روی پست شما می خواهید به حذف/پاکسازی", - "merge_topics_instruction": "Click the topics you want to merge or search for them", - "merge-topic-list-title": "List of topics to be merged", - "merge-options": "Merge options", + "merge_topics_instruction": "تاپیک های مورد نظر برای ادغام را انتخاب کنید یا آن ها را جستجو کنید", + "merge-topic-list-title": "لیست تاپیک هایی که با هم ادغام می شوند", + "merge-options": "تنظیمات ادغام", "merge-select-main-topic": "Select the main topic", "merge-new-title-for-topic": "New title for topic", - "move_posts_instruction": "Click the posts you want to move then go to target topic and click move.", + "move_posts_instruction": "پست های مورد نظر را انتخاب کنید سپس به تاپیک مقصد بروید و گزینه جابه‌جا کردن را بزنید.", "change_owner_instruction": "Click the posts you want to assign to another user", "composer.title_placeholder": "عنوان موضوعتان را اینجا بنویسید...", "composer.handle_placeholder": "Enter your name/handle here", diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index c3735df2d2..54304ef99a 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "پیوندهای به بیرون را در برگ جدید باز کن", "enable_topic_searching": "فعال کردن جستجوی داخل-موضوع", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "پس از ارسال پست، اولین پست جدید نشان بده", "follow_topics_you_reply_to": "موضوع‌های که جواب دادید را پیگیری نمائید", "follow_topics_you_create": "موضوع‌های که ایجاد کردید را پیگیری نمائید", diff --git a/public/language/fa-IR/users.json b/public/language/fa-IR/users.json index f433d739da..099afc2ebb 100644 --- a/public/language/fa-IR/users.json +++ b/public/language/fa-IR/users.json @@ -11,6 +11,7 @@ "online-only": "فقط آنلاین", "invite": "دعوت", "prompt-email": "ایمیل‌ها:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "رایانامه دعوت‌نامه برای %1 ارسال شد", "user_list": "فهرست کاربران", "recent_topics": "موضوع‌های اخیر", diff --git a/public/language/fi/admin/manage/privileges.json b/public/language/fi/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/fi/admin/manage/privileges.json +++ b/public/language/fi/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/fi/admin/menu.json b/public/language/fi/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/fi/admin/menu.json +++ b/public/language/fi/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/fi/admin/settings/email.json b/public/language/fi/admin/settings/email.json index 60b7b52e29..ac0b01163a 100644 --- a/public/language/fi/admin/settings/email.json +++ b/public/language/fi/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Sähköposti koosteet", "subscriptions.disable": "Poista sähköpostin koosteet käytöstä", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/fi/admin/settings/guest.json b/public/language/fi/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/fi/admin/settings/guest.json +++ b/public/language/fi/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/fi/admin/settings/user.json b/public/language/fi/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/fi/admin/settings/user.json +++ b/public/language/fi/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/fi/flags.json b/public/language/fi/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/fi/flags.json +++ b/public/language/fi/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index 8c2ce2daa2..434c7d726d 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Jäsenmäärä", "details.creation_date": "Luontipäivämäärä", "details.description": "Kuvaus", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Merkin esikatselu", "details.change_icon": "Vaihda kuvake", "details.change_label_colour": "Vaihda merkin väriä", diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json index be327e7527..733c1a70a2 100644 --- a/public/language/fi/notifications.json +++ b/public/language/fi/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Kun joku alkaa seurata sinua", "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-request-membership": "Kun joku pyytää lupaa liittyä ryhmään, jonka omistaja olet", "notificationType_new-register": "Kun joku lisätään rekisteröintijonoon", diff --git a/public/language/fi/register.json b/public/language/fi/register.json index 4b68b0ad6f..5df5aa7a5d 100644 --- a/public/language/fi/register.json +++ b/public/language/fi/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Hyväksyn käyttöehdot", "terms_of_use_error": "Sinun täytyy hyväksyä sopimusehdot", "registration-added-to-queue": "Rekisteröintisi on lisätty listalle odottamaan hyväksyntää. Saat ilmoituksen sähköpostiisi, kun ylläpitäjä on hyväksynyt rekisteröitymisesin.", + "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.", "interstitial.intro": "Sivusto vaatii lisätietoja ennenkuin voi luoda tunnuksen.", "interstitial.errors-found": "Rekisteröitymisesi keskeytyi", "gdpr_agree_data": "Annan hyväksyntäni henkilökohtaisten tietojen keräämiseen ja prosessointiin tälle verkkosivulle.", diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json index 664632b470..e27966e041 100644 --- a/public/language/fi/topic.json +++ b/public/language/fi/topic.json @@ -30,6 +30,7 @@ "locked": "Lukittu", "pinned": "Kiinnitetty", "moved": "Siirretty", + "moved-from": "Moved from %1", "copy-ip": "Kopioi IP", "ban-ip": "Ban IP", "view-history": "Muokkaa historiaa", diff --git a/public/language/fi/user.json b/public/language/fi/user.json index c1a43ab5ea..8904f76fde 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Avaa palvelunulkopuoliset linkit uuteen ikkunaan", "enable_topic_searching": "Salli aiheen sisäiset haut", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/fi/users.json b/public/language/fi/users.json index 219e91403c..882c93c184 100644 --- a/public/language/fi/users.json +++ b/public/language/fi/users.json @@ -11,6 +11,7 @@ "online-only": "Vain verkossa olevat", "invite": "Kutsu", "prompt-email": "Sähköpostit:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Kutsusähköposti on lähetetty %1", "user_list": "Käyttäjälista", "recent_topics": "Viimeisimmät aiheet", diff --git a/public/language/fr/admin/manage/privileges.json b/public/language/fr/admin/manage/privileges.json index 296107bc39..b9f4fcb5ef 100644 --- a/public/language/fr/admin/manage/privileges.json +++ b/public/language/fr/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Fichiers envoyés", "signature": "Signature", "ban": "Bannir", + "invite": "Inviter", "search-content": "Rechercher un contenu", "search-users": "Rechercher des utilisateurs", "search-tags": "Rechercher les tags", diff --git a/public/language/fr/admin/menu.json b/public/language/fr/admin/menu.json index 731e459916..46b6823901 100644 --- a/public/language/fr/admin/menu.json +++ b/public/language/fr/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Mots-clés", "settings/notifications": "Notifications", + "settings/api": "Gestion API", "settings/sounds": "Sons", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/fr/admin/settings/email.json b/public/language/fr/admin/settings/email.json index 09de353ad2..c36b86ea7b 100644 --- a/public/language/fr/admin/settings/email.json +++ b/public/language/fr/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "L'adresse e-mail suivante fait référence à l'adresse que le destinataire verra dans les champs \"De :\" et \"Répondre à :\". ", "from": "Nom de l’expéditeur", "from-help": "Le nom de l’expéditeur à afficher dans l'e-mail", - + "smtp-transport": "Protocole SMTP", "smtp-transport.enabled": "Utiliser un server extérieur pour envoyer les emails", "smtp-transport-help": "Vous pouvez sélectionner depuis une liste de services ou entrer un service personnalisé.", @@ -35,5 +35,7 @@ "subscriptions": "Actualités du forum ", "subscriptions.disable": "Désactiver les actualités du forum ", "subscriptions.hour": "Heure d'envoi", - "subscriptions.hour-help": "Veuillez entrer un nombre représentant l'heure à laquelle envoyer les emails de résumé (c'est à dire 0 pour minuit, 17 pour 5:00 pm). Gardez à l'esprit qu'il s'agit de l'heure du serveur, et peut ne pas correspondre à votre heure locale.
L'heure du serveur est :
Le prochain mail de resumé sera envoyé à " + "subscriptions.hour-help": "Veuillez entrer un nombre représentant l'heure à laquelle envoyer les emails de résumé (c'est à dire 0 pour minuit, 17 pour 5:00 pm). Gardez à l'esprit qu'il s'agit de l'heure du serveur, et peut ne pas correspondre à votre heure locale.
L'heure du serveur est :
Le prochain mail de resumé sera envoyé à ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/guest.json b/public/language/fr/admin/settings/guest.json index 422348f22b..0cde9b5f3a 100644 --- a/public/language/fr/admin/settings/guest.json +++ b/public/language/fr/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Gestion des invités", + "settings": "Settings", "handles.enabled": "Autoriser les invités à poster", "handles.enabled-help": "Cette option affiche un nouveau champ qui permet aux invités de choisir un nom qui sera associé à chaque message qu'ils rédigent. Si désactivé, il seront simplement nommés \"Invité\".", - "topic-views": "Consultations du sujet", - "topic-views.enabled": "Autoriser les invités à augmenter le nombre de consultations de sujets" + "topic-views.enabled": "Autoriser les invités à augmenter le nombre de consultations de sujets", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/user.json b/public/language/fr/admin/settings/user.json index a14b5e2093..2f8e608045 100644 --- a/public/language/fr/admin/settings/user.json +++ b/public/language/fr/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Pas d'inscription", "registration-type.help": "Normal - Les utilisateurs peuvent s'inscrire à partir de la page d'inscription.
\nInvitation uniquement - Les utilisateurs peuvent inviter d'autres personnes à partir de la page des utilisateurs.
\nInvitation administrateur uniquement - Seuls les administrateurs peuvent inviter d'autres personnes à partir des pages des utilisateurs et des pages d'administration.
\nAucune inscription - Aucune inscription d'utilisateur.
", "registration-approval-type.help": "Normal - Les utilisateurs sont enregistrés immédiatement.
\nApprobation de l'administrateur - Les inscriptions des utilisateurs sont placées dans une file d'attente d'approbation pour les administrateurs.
\nApprobation par adresses IP pour les nouveaux utilisateurs, Approbation de l'administrateur pour les adresses IP ayant déjà un compte.
", + "registration-queue-auto-approve-time": "Durée d'approbation automatique", + "registration-queue-auto-approve-time-help": "Heures avant l'approbation automatique de l'utilisateur. 0 pour désactiver.", + "registration-queue-show-average-time": "Afficher aux utilisateurs le temps moyen nécessaire d'approbation", "registration.max-invites": "Nombre maximum d'invitations par utilisateur", "max-invites": "Nombre maximum d'invitations par utilisateur", "max-invites-help": "0 pour supprimer cette restriction. Les admins n'ont aucune restriction
Valable uniquement pour \"Uniquement sur invitation\"", @@ -62,6 +65,7 @@ "restrict-chat": "Autoriser uniquement les discussions aux utilisateurs que je suis", "outgoing-new-tab": "Ouvrir les liens sortants dans un nouvel onglet", "topic-search": "Activer la recherche au sein des sujets", + "update-url-with-post-index": "Mettre à jour l'URL avec l'index des articles", "digest-freq": "S'inscrire aux compte rendus", "digest-freq.off": "Désactivé", "digest-freq.daily": "Quotidien", diff --git a/public/language/fr/flags.json b/public/language/fr/flags.json index 2492cee1c3..238191de50 100644 --- a/public/language/fr/flags.json +++ b/public/language/fr/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Demandes positives", "sort-replies": "Réponses", - "modal-title": "Signaler un contenu inapproprié", + "modal-title": "Report Content", "modal-body": "Veuillez saisir le motif de votre signalement pour %1 %2 et sélectionner le bouton ci-dessous le plus approprié.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Choquant", diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index eb60438f41..fa62429380 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Nombre de membres", "details.creation_date": "Date de création", "details.description": "Description", + "details.member-post-cids": "Catégories ou seront affichés les articles", + "details.member-post-cids-help": "Note: si aucune catégorie n'est sélectionnée, toutes les catégories sont incluses. Utilisez ctrl et shift pour sélectionner plusieurs options.", "details.badge_preview": "Aperçu du badge", "details.change_icon": "Modifier l'icône", "details.change_label_colour": "Changer la couleur de l'étiquette", diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json index 913efafb54..ef664344c6 100644 --- a/public/language/fr/notifications.json +++ b/public/language/fr/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Lorsqu'un article est modifié dans un sujet que vous regardez", "notificationType_follow": "Lorsque quelqu'un commence à vous suivre", "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-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", diff --git a/public/language/fr/register.json b/public/language/fr/register.json index ed3b0a05e9..efd862dbd2 100644 --- a/public/language/fr/register.json +++ b/public/language/fr/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "J'accepte les conditions générales d'utilisation", "terms_of_use_error": "Vous devez accepter les conditions générales d'utilisation", "registration-added-to-queue": "Votre inscription a été ajoutée à la liste d'approbation. Vous recevrez un email quand celle-ci sera acceptée par un administrateur.", + "registration-queue-average-time": "Temps moyen d'approbation des adhésions est de %1 heures %2 minutes.", + "registration-queue-auto-approve-time": "Votre adhésion à ce forum sera entièrement activée dans un maximum de %1 heures.", "interstitial.intro": "Nous avons besoin de quelques informations supplémentaires avant de pouvoir créer votre compte.", "interstitial.errors-found": "Nous n'avons pas pu compléter votre inscription :", "gdpr_agree_data": "J'accepte la collecte et le traitement de mes données personnelles sur ce site.", diff --git a/public/language/fr/topic.json b/public/language/fr/topic.json index 92f0d48071..4366bc070d 100644 --- a/public/language/fr/topic.json +++ b/public/language/fr/topic.json @@ -30,6 +30,7 @@ "locked": "Verrouillé", "pinned": "Épinglé", "moved": "Déplacé", + "moved-from": "Déplacé de %1", "copy-ip": "Copier l'IP", "ban-ip": "Bannir l'IP", "view-history": "Éditer l'historique", diff --git a/public/language/fr/user.json b/public/language/fr/user.json index 07e835cfec..593e9f001d 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Ouvrir les liens externes dans un nouvel onglet", "enable_topic_searching": "Activer la recherche dans les sujets", "topic_search_help": "Une fois activé, la recherche dans les sujets va remplacer la recherche de page du navigateur et vous permettra de rechercher dans l'intégralité d'un sujet au lieu des seuls posts affichés à l'écran.", + "update_url_with_post_index": "Mettre à jour l'URL avec l'index des articles", "scroll_to_my_post": "Après avoir répondu, montrer le nouveau message", "follow_topics_you_reply_to": "S'abonner aux sujets auxquels vous répondez", "follow_topics_you_create": "S'abonner aux sujets que vous créez", diff --git a/public/language/fr/users.json b/public/language/fr/users.json index bc41a561fa..51413e9c93 100644 --- a/public/language/fr/users.json +++ b/public/language/fr/users.json @@ -11,6 +11,7 @@ "online-only": "En ligne uniquement", "invite": "Invitation", "prompt-email": "Emails:", + "groups-to-join": "Groupes à rejoindre lorsque l'invitation est acceptée:", "invitation-email-sent": "Un email d'invitation a été envoyé à %1", "user_list": "Liste d'Utilisateurs", "recent_topics": "Sujets Récents", diff --git a/public/language/gl/admin/manage/privileges.json b/public/language/gl/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/gl/admin/manage/privileges.json +++ b/public/language/gl/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/gl/admin/menu.json b/public/language/gl/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/gl/admin/menu.json +++ b/public/language/gl/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/gl/admin/settings/email.json b/public/language/gl/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/gl/admin/settings/email.json +++ b/public/language/gl/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/gl/admin/settings/guest.json b/public/language/gl/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/gl/admin/settings/guest.json +++ b/public/language/gl/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/gl/admin/settings/user.json b/public/language/gl/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/gl/admin/settings/user.json +++ b/public/language/gl/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/gl/flags.json b/public/language/gl/flags.json index 14bda1b94a..29189beab3 100644 --- a/public/language/gl/flags.json +++ b/public/language/gl/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Reportar Contido Inapropiado", + "modal-title": "Report Content", "modal-body": "Por favor, especifique o seu motivo para marcar %1 %2 para revisión. Alternativamente, empregue un dos botóns de reporte rápido se fose pertinente.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", diff --git a/public/language/gl/groups.json b/public/language/gl/groups.json index aa6636c3dc..5b1d941872 100644 --- a/public/language/gl/groups.json +++ b/public/language/gl/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Conta de Membros", "details.creation_date": "Data de Creación", "details.description": "Descripción", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Vista Previa da Insignia", "details.change_icon": "Cambiar Icona", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/gl/notifications.json b/public/language/gl/notifications.json index 6470a1fd96..059c57d3fb 100644 --- a/public/language/gl/notifications.json +++ b/public/language/gl/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/gl/register.json b/public/language/gl/register.json index 058dceced1..427c2f1e16 100644 --- a/public/language/gl/register.json +++ b/public/language/gl/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Acepto os Termos e Condicións de Uso", "terms_of_use_error": "Debes acepta-los termos de uso", "registration-added-to-queue": "O teu rexistro foi engadido á cola de aprobación. Recibirás un correo electrónico cando sexa aceptado por un administrador.", + "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.", "interstitial.intro": "Requírese información adicional antes de crea-la túa conta", "interstitial.errors-found": "Non puidemos completa-lo teu rexistro:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/gl/topic.json b/public/language/gl/topic.json index e7637f3561..ef9e356214 100644 --- a/public/language/gl/topic.json +++ b/public/language/gl/topic.json @@ -30,6 +30,7 @@ "locked": "Pechado", "pinned": "Fixo", "moved": "Movido", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/gl/user.json b/public/language/gl/user.json index a41e000d89..b3265cee18 100644 --- a/public/language/gl/user.json +++ b/public/language/gl/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Abrir ligazóns externos nunca nova pestaña", "enable_topic_searching": "Permitir buscar dentro dun tema", "topic_search_help": "Se se activa, o buscador do NodeBB superporase ao propio do navegador dentro de cada tema, permitindo buscar en todo o tema e non só naquilo que se presenta na pantalla.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Logo de enviar unha resposta, mostrar a nova mensaxe", "follow_topics_you_reply_to": "Segui-los temas aos que respondes", "follow_topics_you_create": "Segui-los temas que creaches ti", diff --git a/public/language/gl/users.json b/public/language/gl/users.json index a9f985c23b..5e22c3aa36 100644 --- a/public/language/gl/users.json +++ b/public/language/gl/users.json @@ -11,6 +11,7 @@ "online-only": "Só conectados", "invite": "Convidar", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "A invitación foi enviada a %1", "user_list": "Lista de Usuarios", "recent_topics": "Temas recentes", diff --git a/public/language/he/admin/advanced/database.json b/public/language/he/admin/advanced/database.json index 50389867f6..356a4cd919 100644 --- a/public/language/he/admin/advanced/database.json +++ b/public/language/he/admin/advanced/database.json @@ -22,7 +22,7 @@ "mongo.bytes-out": "ביטים יוצאים", "mongo.num-requests": "מספר בקשות", "mongo.raw-info": "מידע לא מעובד מMongoDB", - "mongo.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the "clusterMonitor" role for the "admin" database.", + "mongo.unauthorized": "NodeBB לא הצליחה לקבל את המידע הדרוש מMongoDB. אנא בדוק שלמשתמש יש הרשאת clusterMonitor לadmin database.", "redis": "Redis", "redis.version": "גרסת Redis", diff --git a/public/language/he/admin/manage/digest.json b/public/language/he/admin/manage/digest.json index 8f3661698a..b31b01077a 100644 --- a/public/language/he/admin/manage/digest.json +++ b/public/language/he/admin/manage/digest.json @@ -3,7 +3,7 @@ "disclaimer": "Please be advised that email delivery is not guaranteed, due to the nature of email technology. Many variables factor into whether an email sent to the recipient server is ultimately delivered into the user's inbox, including server reputation, blacklisted IP addresses, and whether DKIM/SPF/DMARC is configured.", "disclaimer-continued": "A successful delivery means the message was sent successfully by NodeBB and acknowledged by the recipient server. It does not mean the email landed in the inbox. For best results, we recommend using a third-party email delivery service such as SendGrid.", - "user": "User", + "user": "משתמש", "subscription": "Subscription Type", "last-delivery": "Last successful delivery", "default": "System default", diff --git a/public/language/he/admin/manage/privileges.json b/public/language/he/admin/manage/privileges.json index 789f166d3d..7f32cfafb7 100644 --- a/public/language/he/admin/manage/privileges.json +++ b/public/language/he/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "העלאת קבצים", "signature": "חתימה", "ban": "הרחקה", + "invite": "Invite", "search-content": "חיפוש תוכן", "search-users": "חיפוש משתמשים", "search-tags": "חיפוש תגיות", diff --git a/public/language/he/admin/menu.json b/public/language/he/admin/menu.json index e4dc2a4bee..cb952484e6 100644 --- a/public/language/he/admin/menu.json +++ b/public/language/he/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "תגיות", "settings/notifications": "התראות", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "עוגיות", @@ -42,7 +43,7 @@ "section-appearance": "Appearance", "appearance/themes": "Themes", - "appearance/skins": "Skins", + "appearance/skins": "עיצובים", "appearance/customise": "Custom Content (HTML/JS/CSS)", "section-extend": "Extend", diff --git a/public/language/he/admin/settings/email.json b/public/language/he/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/he/admin/settings/email.json +++ b/public/language/he/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/he/admin/settings/guest.json b/public/language/he/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/he/admin/settings/guest.json +++ b/public/language/he/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/he/admin/settings/user.json b/public/language/he/admin/settings/user.json index 0bda70ec12..4cb3549d87 100644 --- a/public/language/he/admin/settings/user.json +++ b/public/language/he/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "בטל הרשמה", "registration-type.help": "רגיל - משתמשים יכולים להירשם על ידי שימוש בדף /register.
\nהזמנה בלבד - משתמשים אחרים יכולים להזמין משתמשים מדף המשתמש.
\nהזמנת מנהל בלבד - רק מנהלים יכולים להזמין משתמשים אחרים מדף
המשתמש ודף ההנהלת משתמשים.
\nבטל הרשמה - לא ניתן להירשם.
ד", "registration-approval-type.help": "רגיל - משתמשים נרשמים באופן מיידי.
\nאישור מנהל - משתמשים אשר נרשמו מוכנים לתוך רשימת אישור למנהלים.
\nאישור מנהל לכתובות IP - רגיל למשתמשים חדשים, אישור מנהל לכתובות IP אשר כבר מקושר אליהם חשבון.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "מרב ההזמנות למשתמש", "max-invites": "מרב ההזמנות למשתמש", "max-invites-help": "0 בשביל לבטל הגבלה. מנהלים מקבלים אינסוף הזמנות
תקף רק ל-\"הזמנה בלבד\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/he/category.json b/public/language/he/category.json index e81f13ec8a..2c5322e81d 100644 --- a/public/language/he/category.json +++ b/public/language/he/category.json @@ -12,11 +12,11 @@ "watching": "עוקב", "not-watching": "לא עוקב", "ignoring": "מתעלם", - "watching.description": "Show topics in unread and recent", - "not-watching.description": "Do not show topics in unread, show in recent", - "ignoring.description": "Do not show topics in unread and recent", - "watching.message": "You are now watching updates from this category and all subcategories", - "notwatching.message": "You are not watching updates from this category and all subcategories", - "ignoring.message": "You are now ignoring updates from this category and all subcategories", + "watching.description": "הצג נושאים בנושאים שלא נקראו ובנושאים אחרונים", + "not-watching.description": "הסתר בנושאים שלא נקראו, הצג בנושאים אחרונים", + "ignoring.description": "הסתר נושאים בנושאים שלא נקראו ובנושאים אחרונים", + "watching.message": "אתה כעת עוקב אחר עדכונים בקטגוריה זו וכל תת-הקטגוריות", + "notwatching.message": "אתה כעת לא עוקב מעדכונים בקטגוריה זו וכל תת-הקטגוריות", + "ignoring.message": "אתה כעת מתעלם מעדכונים בקטגוריה זו וכל תת-הקטגוריות", "watched-categories": "קטגוריות נעקבות" } \ No newline at end of file diff --git a/public/language/he/email.json b/public/language/he/email.json index aaa3743083..9e1e4c93a0 100644 --- a/public/language/he/email.json +++ b/public/language/he/email.json @@ -1,5 +1,5 @@ { - "test-email.subject": "Test Email", + "test-email.subject": "מייל בדיקה", "password-reset-requested": "נדרש איפוס סיסמה!", "welcome-to": "ברוכים הבאים ל%1", "invite": "הזמנה מ%1", @@ -13,7 +13,7 @@ "welcome.cta": "לחץ כאן על מנת לאשר את כתובת המייל שלך.", "invitation.text1": "%1 הזמין אותך להצתרף ל%2", "invitation.text2": "ההזמנה של תפוג ב %1 ימים", - "invitation.cta": "Click here to create your account.", + "invitation.cta": "לחץ כאן ליצירת החשבון שלך.", "reset.text1": "קיבלנו בקשה לאפס את הסיסמה לחשבון שלך, כנראה מפני ששכחת אותה. אם לא ביקשת לאפס את הסיסמה, אנא התעלם ממייל זה.", "reset.text2": "על מנת להמשיך עם תהליך איפוס הסיסמה, אנא לחץ על הלינק הבא:", "reset.cta": "לחץ כאן לאפס את הסיסמה שלך.", diff --git a/public/language/he/error.json b/public/language/he/error.json index c203e844bf..1e8bd386d3 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -11,9 +11,9 @@ "invalid-uid": "זהוי משתמש שגוי", "invalid-username": "שם משתמש שגוי", "invalid-email": "אימייל שגוי", - "invalid-fullname": "Invalid Fullname", - "invalid-location": "Invalid Location", - "invalid-birthday": "Invalid Birthday", + "invalid-fullname": "שם מלא לא תקין", + "invalid-location": "מקום לא תקין", + "invalid-birthday": "יום הולדת לא תקין", "invalid-title": "שגיאה בכותרת", "invalid-user-data": "מידע משתמש שגוי", "invalid-password": "סיסמא שגויה", @@ -26,7 +26,7 @@ "invalid-pagination-value": "ערך דף לא חוקי, חייב להיות לפחות %1 ולא מעל %2", "username-taken": "שם משתמש תפוס", "email-taken": "כתובת אימייל תפוסה", - "email-invited": "Email was already invited", + "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.", diff --git a/public/language/he/flags.json b/public/language/he/flags.json index 7246e9b52a..f0d0dc9727 100644 --- a/public/language/he/flags.json +++ b/public/language/he/flags.json @@ -1,14 +1,14 @@ { "state": "מצב", - "reports": "Reports", - "first-reported": "First Reported", + "reports": "דוחות", + "first-reported": "דווח ראשון", "no-flags": "מופלטה! לא נמצאו סימונים.", "assignee": "מוקצה", "update": "עדכון", "updated": "עודכן", "target-purged": "התוכן שסומן נוקה ולא קיים יותר.", - "graph-label": "Daily Flags", + "graph-label": "דיווחים יומיים", "quick-filters": "סינון מהיר", "filter-active": "קיים סנן אחד או יותר ברשימת הסימונים הזו", "filter-reset": "הסר סינון", @@ -25,17 +25,17 @@ "filter-quick-mine": "הוקצה עבורי", "filter-cid-all": "כל הקטגוריות", "apply-filters": "הפעל סינון", - "more-filters": "More Filters", + "more-filters": "מסננים נוספים", "quick-actions": "פעולות מהירות", "flagged-user": "משתמש מסומן", "view-profile": "צפה בפרופיל", "start-new-chat": "התחל שיחה חדשה", "go-to-target": "צפה במטרת הסימון", - "assign-to-me": "Assign To Me", - "delete-post": "Delete Post", - "purge-post": "Purge Post", - "restore-post": "Restore Post", + "assign-to-me": "הקצה עבורי", + "delete-post": "מחק פוסט", + "purge-post": "מחק לצמיתות", + "restore-post": "שחזור פוסט", "user-view": "צפה בפרופיל", "user-edit": "ערוך פרופיל", @@ -43,11 +43,11 @@ "notes": "הערות הסימון", "add-note": "הוסף הערה", "no-notes": "אין הערות", - "delete-note-confirm": "Are you sure you want to delete this flag note?", + "delete-note-confirm": "האם אתה בטוח שאתה רוצה למחוק את ההערה הזו?", "note-added": "נוספה הערה", - "note-deleted": "Note Deleted", + "note-deleted": "ההערה נמחקה", - "history": "Account & Flag History", + "history": "היסטוריית הסימונים למשתמש", "no-history": "אין הסיטוריית סימונים", "state-all": "כל המצבים", @@ -57,17 +57,17 @@ "state-rejected": "נדחה", "no-assignee": "לא הוקצה", - "sort": "Sort by", - "sort-newest": "Newest first", - "sort-oldest": "Oldest first", - "sort-reports": "Most reports", - "sort-all": "All flag types...", - "sort-posts-only": "Posts only...", - "sort-downvotes": "Most downvotes", - "sort-upvotes": "Most upvotes", - "sort-replies": "Most replies", + "sort": "סדר על-פי", + "sort-newest": "החדש ראשון", + "sort-oldest": "הישן ראשון", + "sort-reports": "הכי הרבה דיווחים", + "sort-all": "כל סוגי הדיווחים", + "sort-posts-only": "פוסטים בלבד", + "sort-downvotes": "הכי הרבה הצבעות נגד", + "sort-upvotes": "הכי הרבה הצבעות", + "sort-replies": "הכי הרבה תגובות", - "modal-title": "דווח על תוכן לא ראוי", + "modal-title": "Report Content", "modal-body": "אנא ציין את הסיבה לסימון %1 %2 לצורך בקרה. לחלופין, השתמש באחד מכפתורי הדיווח המהיר אם אפשר.", "modal-reason-spam": "זבל", "modal-reason-offensive": "פוגעני", @@ -80,6 +80,6 @@ "modal-submit-confirm-text-help": "שליחת דיווח מהיר תבטל כל סיבה קודמת שהוגדרה.", "bulk-actions": "Bulk Actions", - "bulk-resolve": "Resolve Flag(s)", - "bulk-success": "%1 flags updated" + "bulk-resolve": "השלם דיווחים", + "bulk-success": "%1 דיווחים עודכנו" } \ No newline at end of file diff --git a/public/language/he/global.json b/public/language/he/global.json index 15ec27764b..420512a741 100644 --- a/public/language/he/global.json +++ b/public/language/he/global.json @@ -30,7 +30,7 @@ "header.unread": "לא נקרא", "header.tags": "תגיות", "header.popular": "פופולרי", - "header.top": "Top", + "header.top": "הכי הרבה הצבעות", "header.users": "משתמשים", "header.groups": "קבוצות", "header.chats": "צ'אטים", @@ -52,20 +52,20 @@ "users": "משתמשים", "topics": "נושאים", "posts": "פוסטים", - "x-posts": "%1 posts", + "x-posts": "%1 פוסטים", "best": "הגבוה ביותר", "votes": "הצבעות", - "x-votes": "%1 votes", - "voters": "Voters", + "x-votes": "%1 הצבעות", + "voters": "מצביעים", "upvoters": "מצביעי בעד", "upvoted": "הוצבע בעד", "downvoters": "מצביעי נגד", "downvoted": "הוצבע נגד", "views": "צפיות", - "posters": "Posters", + "posters": "יוצרי הפוסטים", "reputation": "מוניטין", - "lastpost": "Last post", - "firstpost": "First post", + "lastpost": "פוסט אחרון", + "firstpost": "פוסט ראשון", "read_more": "קרא עוד", "more": "עוד", "posted_ago_by_guest": "הפוסט הועלה ב %1 על ידי אורח", @@ -92,7 +92,7 @@ "language": "שפה", "guest": "אורח", "guests": "אורחים", - "former_user": "A Former User", + "former_user": "משתמש שנמחק", "updated.title": "הפורום עודכן", "updated.message": "הפורום עודכן לגרסא האחרונה. נא ללחוץ כאן לעדכון הדף.", "privacy": "פרטיות", diff --git a/public/language/he/groups.json b/public/language/he/groups.json index d5918ae1e5..bece06c44a 100644 --- a/public/language/he/groups.json +++ b/public/language/he/groups.json @@ -25,16 +25,18 @@ "details.latest_posts": "פוסטים אחרונים", "details.private": "פרטי", "details.disableJoinRequests": "בטל בקשות הצטרפות", - "details.disableLeave": "Disallow users from leaving the group", + "details.disableLeave": "אל תאפשר למשתמשים לעזוב את הקבוצה", "details.grant": "הענק/בטל בעלות", "details.kick": "גרש", "details.kick_confirm": "האם אתה בטוח שאתה רוצה להסיר משתמש זה מהקבוצה?", - "details.add-member": "Add Member", + "details.add-member": "הוסף משתמש", "details.owner_options": "ניהול הקבוצה", "details.group_name": "שם הקבוצה", "details.member_count": "כמות משתמשים", "details.creation_date": "תאריך יצירה", "details.description": "תיאור", + "details.member-post-cids": "קטגוריות שמהם יוצגו פוסטים", + "details.member-post-cids-help": "הערה: אי בחירת קטגוריה תכלול את כל הקטגוריות. השתמש ב-ctrl ו-shift כדי לבחור אפשרויות מרובות.", "details.badge_preview": "תצוגה מקדימה של הסמל", "details.change_icon": "שנה אייקון", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/he/ip-blacklist.json b/public/language/he/ip-blacklist.json index 588fbd62b6..5f1b6a2ffe 100644 --- a/public/language/he/ip-blacklist.json +++ b/public/language/he/ip-blacklist.json @@ -1,19 +1,19 @@ { - "lead": "Configure your IP blacklist here.", + "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.", - "active-rules": "Active Rules", - "validate": "Validate Blacklist", - "apply": "Apply Blacklist", - "hints": "Syntax Hints", - "hint-1": "Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g. 192.168.100.0/22).", - "hint-2": "You can add in comments by starting lines with the # symbol.", + "active-rules": "כללים פעילים", + "validate": "בדיקת רשימה", + "apply": "החל רשימה", + "hints": "עזרה בתחביר", + "hint-1": "כתוב כתובת IP אחת בשורה. ניתן להוסיף טווחי IP בפורמט CIDR (לדוגמא 192.168.100.0/22).", + "hint-2": "ניתן להוסיף הערות באמצעות התחלת השורה ב#.", - "validate.x-valid": "%1 out of %2 rule(s) valid.", - "validate.x-invalid": "The following %1 rules are invalid:", + "validate.x-valid": "%1 מתוך %2 כלל(ים) תקינים.", + "validate.x-invalid": "%1 הכללים הבאים לא תקינים: ", - "alerts.applied-success": "Blacklist Applied", + "alerts.applied-success": "הרשימה השחורה נשמרה", - "analytics.blacklist-hourly": "Figure 1 – Blacklist hits per hour", + "analytics.blacklist-hourly": "Figure 1 – כתובות נחסמו ביחס לשעה.", "analytics.blacklist-daily": "Figure 2 – Blacklist hits per day", - "ip-banned": "IP banned" + "ip-banned": "כתובת הIP הורחקה." } \ No newline at end of file diff --git a/public/language/he/modules.json b/public/language/he/modules.json index fe73d18039..8b6b19cb55 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -1,7 +1,7 @@ { "chat.chatting_with": "לשוחח עם", "chat.placeholder": "הקלד את הודעת הצ'אט כאן, לחץ אנטר לשליחה", - "chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.", + "chat.scroll-up-alert": "אתה מסתכל על הודעות ישנות. לחץ כאן למעבר להודעה האחרונה.", "chat.send": "שלח", "chat.no_active": "אין לך צ'אטים פעילים", "chat.user_typing": "%1 מקליד ...", @@ -13,7 +13,7 @@ "chat.recent-chats": "צ'אטים אחרונים", "chat.contacts": "אנשי קשר", "chat.message-history": "היסטוריית הודעות", - "chat.message-deleted": "Message Deleted", + "chat.message-deleted": "ההודעה נמחקה", "chat.options": "אפשרויות לשיחה", "chat.pop-out": "הוצא את חלון הצ'אט", "chat.minimize": "צמצם", @@ -24,21 +24,21 @@ "chat.delete_message_confirm": "האם אתה בטוח שברצונך למחוק הודעה זו?", "chat.retrieving-users": "שולף משתמשים", "chat.manage-room": "נהל חדר צ'אט", - "chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation. Only room owners () may remove users from chat rooms.", + "chat.add-user-help": "חפש משתמשים כאן. כאשר משתמש נבחר, הוא יצורף לצ'אט. המשתמש החדש לא יוכל לראות הודעות שנכתבו לפני הצטרפותו. רק מנהלי החדר () יכולים להסיר משתמשים מהצ'אט.", "chat.confirm-chat-with-dnd-user": "משתמש זה שינה את הסטטוס שלו ל 'לא להפריע'. אתה עדיין מעוניין לשוחח איתו?", - "chat.rename-room": "Rename Room", + "chat.rename-room": "שנה שם של חדר", "chat.rename-placeholder": "הזן את שם החדר שלך כאן", "chat.rename-help": "שם החדר המוגדר כאן יהיה זמין לכל המשתתפים בחדר.", "chat.leave": "עזוב שיחה", "chat.leave-prompt": "האם אתה בטוח שאתה רוצה לעזוב את השיחה הזו?", "chat.leave-help": "עזיבת צ'אט זה תסיר אותך מהתכתבות עתידית בצ'אט זה. אם תתווסף מחדש בעתיד, לא תראה כל היסטוריית צ'אט שלפני הצטרפותך מחדש.", "chat.in-room": "בתוך החדר הזה", - "chat.kick": "Kick", - "chat.show-ip": "Show IP", - "chat.owner": "Room Owner", - "chat.system.user-join": "%1 has joined the room", - "chat.system.user-leave": "%1 has left the room", - "chat.system.room-rename": "%2 has renamed this room: %1", + "chat.kick": "גרש", + "chat.show-ip": "הצג IP", + "chat.owner": "מנהל החדר", + "chat.system.user-join": "%1 נרשם לחדר", + "chat.system.user-leave": "%1 יצא מהחדר", + "chat.system.room-rename": "%2 שינה את שם החדר: %1", "composer.compose": "צור", "composer.show_preview": "הצג תצוגה מקדימה", "composer.hide_preview": "הסתר תצוגה מקדימה", @@ -52,14 +52,14 @@ "composer.formatting.italic": "נטוי", "composer.formatting.list": "רשימה", "composer.formatting.strikethrough": "קו פוסל", - "composer.formatting.code": "Code", + "composer.formatting.code": "קוד", "composer.formatting.link": "לינק", "composer.formatting.picture": "תמונה", "composer.upload-picture": "העלה תמונה", "composer.upload-file": "העלה קובץ", "composer.zen_mode": "מצב זן", "composer.select_category": "בחר קטגוריה", - "composer.textarea.placeholder": "Enter your post content here, drag and drop images", + "composer.textarea.placeholder": "כתוב את תוכן הפוסט כאן. ניתן לגרור לכאן תמונות.", "bootbox.ok": "אוקיי", "bootbox.cancel": "בטל", "bootbox.confirm": "אשר", diff --git a/public/language/he/notifications.json b/public/language/he/notifications.json index 58596f5a8a..8d02ec113b 100644 --- a/public/language/he/notifications.json +++ b/public/language/he/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "כשמישהו מתחיל לעקוב אחריך", "notificationType_new-chat": "כשאתה מקבל הודעת צאט", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "כשאתה מקבל הזמנה מקבוצה", "notificationType_group-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "כאשר מישהו מתווסף לתור הרישום", diff --git a/public/language/he/pages.json b/public/language/he/pages.json index c4692d99fd..3bd6a50b59 100644 --- a/public/language/he/pages.json +++ b/public/language/he/pages.json @@ -6,10 +6,10 @@ "popular-month": "נושאים חמים החודש", "popular-alltime": "הנושאים החמים בכל הזמנים", "recent": "נושאים אחרונים", - "top-day": "Top voted topics today", - "top-week": "Top voted topics this week", - "top-month": "Top voted topics this month", - "top-alltime": "Top Voted Topics", + "top-day": "הנושאים הנבחרים ביותר היום", + "top-week": "הנושאים הנבחרים ביותר השבוע", + "top-month": "הנושאים הנבחרים ביותר החודש", + "top-alltime": "הנושאים הנבחרים ביותר", "moderator-tools": "כלי מודרטור", "flagged-content": "תוכן מדווח", "ip-blacklist": "רשימת IP שחורה", @@ -43,10 +43,10 @@ "account/following": "אנשים ש%1 עוקב אחריהם", "account/followers": "אנשים שעוקבים אחרי %1", "account/posts": "הודעות שפורסמו על ידי %1", - "account/latest-posts": "Latest posts made by %1", + "account/latest-posts": "פוסטים אחרונים שנוצרו על ידי %1", "account/topics": "נושאים שנוצרו על ידי %1", "account/groups": "הקבוצות של %1", - "account/watched_categories": "%1's Watched Categories", + "account/watched_categories": "הקטגוריות ש-%1 עוקב אחריהם", "account/bookmarks": "הפוסטים השמורים של %1", "account/settings": "הגדרות משתמש", "account/watched": "נושאים שנצפו על ידי %1", @@ -54,9 +54,9 @@ "account/upvoted": "פוסטים שהוצבעו לטובה על ידי %1", "account/downvoted": "פוסטים שהוצבעו לרעה על ידי %1", "account/best": "הפוסטים הטובים ביותר שנוצרו על ידי %1", - "account/blocks": "Blocked users for %1", - "account/uploads": "Uploads by %1", - "account/sessions": "Login Sessions", + "account/blocks": "המשתמשים ש-%1 חסם", + "account/uploads": "העלאות של %1", + "account/sessions": "סשני התחברות", "confirm": "כתובת המייל אושרה", "maintenance.text": "%1 כרגע תחת עבודות תחזוקה. אנא חזור בזמן מאוחר יותר.", "maintenance.messageIntro": "בנוסף, המנהל השאיר את ההודעה הזו:", diff --git a/public/language/he/post-queue.json b/public/language/he/post-queue.json index 2742e3a7af..1aef0f967d 100644 --- a/public/language/he/post-queue.json +++ b/public/language/he/post-queue.json @@ -1,11 +1,11 @@ { - "post-queue": "Post Queue", - "description": "There are no posts in the post queue.
To enable this feature, go to Settings → Post → Post Queue and enable Post Queue.", - "user": "User", - "category": "Category", - "title": "Title", - "content": "Content", - "posted": "Posted", - "reply-to": "Reply to \"%1\"", - "content-editable": "You can click on individual content to edit before posting." + "post-queue": "פוסטים ממתינים", + "description": "אין פוסטים בתור.
כדי לאפשר את תור ההרשמה, גשו להגדרות → פוסט → תור פוסטים ואפשרו את תור פוסט.", + "user": "משתמש", + "category": "קטגוריה", + "title": "כותרת", + "content": "תוכן", + "posted": "נשלח", + "reply-to": "תגובה ל %1", + "content-editable": "אתה יכול ללחוץ על התוכן כדי לערוך אותו." } \ No newline at end of file diff --git a/public/language/he/register.json b/public/language/he/register.json index d6c9331a51..5e66599e67 100644 --- a/public/language/he/register.json +++ b/public/language/he/register.json @@ -18,6 +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.", "interstitial.intro": "אנו דורשים מידע נוסף לפני שנוכל ליצור עבורך את החשבון.", "interstitial.errors-found": "לא הצלחנו להשלים את הרישום שלך:", "gdpr_agree_data": "אני מסכים שפורום זה יאגור ויעבד את נתוני האישיים", diff --git a/public/language/he/topic.json b/public/language/he/topic.json index 267e9dfed6..8909b61143 100644 --- a/public/language/he/topic.json +++ b/public/language/he/topic.json @@ -30,6 +30,7 @@ "locked": "נעול", "pinned": "נעוץ", "moved": "הועבר", + "moved-from": "Moved from %1", "copy-ip": "העתק כתובת IP", "ban-ip": "הרחק כתובת IP", "view-history": "ערוך היסטוריה", @@ -79,7 +80,7 @@ "thread_tools.purge_confirm": "אתה בטוח שאתה רוצה למחוק את הנושא הזה?", "thread_tools.merge_topics": "מזג נושאים", "thread_tools.merge": "מזג", - "topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.", + "topic_move_success": "נושא זה יועבר ל\"%1\" בקרוב. לחץ כאן לבטל.", "topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.", "topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.", "topic_move_undone": "Topic move undone", diff --git a/public/language/he/user.json b/public/language/he/user.json index 4152424ca1..a9e026b9a8 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -14,14 +14,14 @@ "unban_account": "בטל את הרחקת החשבון", "delete_account": "מחק חשבון", "delete_account_as_admin": "מחק חשבון", - "delete_content": "Delete Account Content", - "delete_all": "Delete Account and Content", + "delete_content": "מחק תוכן חשבון", + "delete_all": "מחק חשבון ותוכן", "delete_account_confirm": "Are you sure you want to anonymize your posts and delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your password to confirm that you wish to destroy this account.", "delete_this_account_confirm": "Are you sure you want to delete this account while leaving its contents behind?
This action is irreversible, posts will be anonymized, and you will not be able to restore post associations with the deleted account

", "delete_account_content_confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)?
This action is irreversible and you will not be able to recover any data

", "delete_all_confirm": "Are you sure you want to delete this account and all of its content (posts/topics/uploads)?
This action is irreversible and you will not be able to recover any data

", "account-deleted": "החשבון נמחק", - "account-content-deleted": "Account content deleted", + "account-content-deleted": "תוכן החשבון נמחק", "fullname": "שם מלא", "website": "אתר", "location": "מיקום", @@ -40,7 +40,7 @@ "followers": "עוקבים", "following": "עוקב אחרי", "blocks": "חסימות", - "block_toggle": "Toggle Block", + "block_toggle": " חסום/בטל חסימה", "block_user": "חסום משתמש", "unblock_user": "בטל חסימת משתמש", "aboutme": "אודותי", @@ -57,7 +57,7 @@ "change_picture": "שנה תמונה", "change_username": "שנה שם משתמש", "change_email": "שנה מייל", - "email_same_as_password": "Please enter your current password to continue – you've entered your new email again", + "email_same_as_password": "אנא כתוב את הסיסמא הנוכחית שלך כדי להמשיך – כתבת את כתובת המייל החדשה במקום.", "edit": "ערוך", "edit-profile": "ערוך פרופיל", "default_picture": "אייקון ברירת מחדל", @@ -111,10 +111,10 @@ "posts_per_page": "כמות פוסטים בעמוד", "max_items_per_page": "מקסימום %1", "acp_language": "שפת עמוד המנהל", - "notifications": "Notifications", + "notifications": "התראות", "upvote-notif-freq": "תדירות התראת הצבעה חיובית", "upvote-notif-freq.all": "כל ההצבעות החיוביות", - "upvote-notif-freq.first": "First Per Post", + "upvote-notif-freq.first": "הראשון לפוסט", "upvote-notif-freq.everyTen": "כל 10 הצבעות חיוביות", "upvote-notif-freq.threshold": "ב-1, 5, 10, 25, 50, 100, 150, 200...", "upvote-notif-freq.logarithmic": "ב10, 100, 1000...", @@ -123,6 +123,7 @@ "open_links_in_new_tab": "פתח קישורים חיצוניים בכרטיסייה חדשה", "enable_topic_searching": "הפעל חיפוש בתוך נושא", "topic_search_help": "אם מאופשר, החיפוש בתוך הנושא יעקוף את שיטת החיפוש של הדפדפן, ויאפשר לך לחפש בכל הנושא - ולא רק במה שמוצג על המסך", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "הצג את הפוסט לאחר פרסום התגובה", "follow_topics_you_reply_to": "עקוב אחר נושאים שהגבת עליהם", "follow_topics_you_create": "עקוב אחר נושאים שפרסמת", @@ -146,7 +147,7 @@ "info.ban-history": "היסטוריית הרחקות", "info.no-ban-history": "משתמש זה מעולם לא הורחק", "info.banned-until": "הורחק עד %1", - "info.banned-expiry": "Expiry", + "info.banned-expiry": "פג תוקף", "info.banned-permanently": "הורחק לצמיתות", "info.banned-reason-label": "סיבה", "info.banned-no-reason": "לא ניתנה סיבה.", @@ -173,10 +174,10 @@ "consent.right_to_erasure_description": "בכל עת תוכל לבטל את הסכמתך לאיסוף נתונים ו / או עיבודם על ידי מחיקת חשבונך. מחיקת הפרופיל שלך לא תגרום למחיקת התוכנים שפרסמת. על מנת למחוק את חשבונך ואת התוכן המקושר לו צור קשר עם צוות הניהול של האתר.", "consent.right_to_data_portability": "זכותך לניוד הנתונים", "consent.right_to_data_portability_description": "באפרותך לבקש ייצוא של כל הנתונים שנאספו מחשבונך אודותיך. תוכל לעשות זאת על ידי לחיצה על הלחצן המתאים מטה.", - "consent.export_profile": "Export Profile (.json)", - "consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.", + "consent.export_profile": "יצוא פרופיל (.json)", + "consent.export-profile-success": "ייצוא הפרופיל מתבצע כעת. תקבל התראה כאשר הייצוא יסתיים.", "consent.export_uploads": "יצוא תוכן שהועלה (ZIP.)", - "consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.", + "consent.export-uploads-success": "ייצוא ההעלאות מתבצע כעת. תקבל התראה כאשר הייצוא יסתיים.", "consent.export_posts": "יצוא פוסטים (CVS.)", - "consent.export-posts-success": "Exporting posts, you will get a notification when it is complete." + "consent.export-posts-success": "ייצוא הפוסטים מתבצע כעת. תקבל התראה כאשר הייצוא יסתיים." } \ No newline at end of file diff --git a/public/language/he/users.json b/public/language/he/users.json index 25b61a87db..86d603aaf6 100644 --- a/public/language/he/users.json +++ b/public/language/he/users.json @@ -11,6 +11,7 @@ "online-only": "אונליין בלבד", "invite": "הזמן", "prompt-email": "מיילים:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "מייל הזמנה נשלח ל%1", "user_list": "רשימת משתמשים", "recent_topics": "נושאים אחרונים", diff --git a/public/language/hr/admin/manage/privileges.json b/public/language/hr/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/hr/admin/manage/privileges.json +++ b/public/language/hr/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/hr/admin/menu.json b/public/language/hr/admin/menu.json index 700d5b37bf..f29b1c5226 100644 --- a/public/language/hr/admin/menu.json +++ b/public/language/hr/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Numeriranje", "settings/tags": "Oznake", "settings/notifications": "Obavijesti", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Kolačići", diff --git a/public/language/hr/admin/settings/email.json b/public/language/hr/admin/settings/email.json index 589332d162..b76e4551ba 100644 --- a/public/language/hr/admin/settings/email.json +++ b/public/language/hr/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Sljedeća email adresa je adresa koju će primatelj vidjeti u \"Od\" i \"Odgovori na\" poljima.", "from": "Od imena", "from-help": "Ime prikazano u dolaznom emailu.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Pregled Sati.", - "subscriptions.hour-help": "Unesite broj koji pretstavlja vrijeme kada će se poslati pregled mailom (npr. 0 za ponoć, 17za 5 popodne).Imajte na umu da to vrijeme predstavlja vrijeme servera te ne mora predstavljati vrijeme na Vašem sistemu. Vrijeme servera je:
Sljedeći pregled će biti poslan ." + "subscriptions.hour-help": "Unesite broj koji pretstavlja vrijeme kada će se poslati pregled mailom (npr. 0 za ponoć, 17za 5 popodne).Imajte na umu da to vrijeme predstavlja vrijeme servera te ne mora predstavljati vrijeme na Vašem sistemu. Vrijeme servera je:
Sljedeći pregled će biti poslan .", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/hr/admin/settings/guest.json b/public/language/hr/admin/settings/guest.json index 3b86812ee4..78c75a43e2 100644 --- a/public/language/hr/admin/settings/guest.json +++ b/public/language/hr/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Upravljanje gostima", + "settings": "Settings", "handles.enabled": "Dozvoli upravljanje gostima", "handles.enabled-help": "Ova opcija omogućava gostima da izaberi ime za svaku objavu koju naprave.Ako je onemogućena gosti će se zvati \"gost\".", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/hr/admin/settings/user.json b/public/language/hr/admin/settings/user.json index def91bd53a..c224db4469 100644 --- a/public/language/hr/admin/settings/user.json +++ b/public/language/hr/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Bez registracije", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maksimalan broj pozivnica po korisniku", "max-invites": "Maksimalan broj pozivnica po korisniku", "max-invites-help": "0 bez restrikcija. Administrator ima neograničeno pozivnica
Primjenjivo samo za \"poziv na forum\"", @@ -62,6 +65,7 @@ "restrict-chat": "Dozvoli poruke samo od ljudi koje praim", "outgoing-new-tab": "Otvori odlazne poveznive u novom prozoru ", "topic-search": "Dopusti pretragu po temama", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Pretplatite se na pregled", "digest-freq.off": "Isključi", "digest-freq.daily": "Dnevno", diff --git a/public/language/hr/flags.json b/public/language/hr/flags.json index f9e8dff1e9..6c1761dfe4 100644 --- a/public/language/hr/flags.json +++ b/public/language/hr/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Prijavi neprimjereni sadržaj", + "modal-title": "Report Content", "modal-body": "Navedite razlog označavanja zastavom %1 %2 .U suprotnom koristite jedan od dugmića za brzo prijavljivanje.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Uvredljivo", diff --git a/public/language/hr/groups.json b/public/language/hr/groups.json index a89cc05db7..6f1a2fde96 100644 --- a/public/language/hr/groups.json +++ b/public/language/hr/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Broj članova", "details.creation_date": "Kreirano", "details.description": "Opis", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Prikaz značke", "details.change_icon": "Promjeni ikonu", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/hr/notifications.json b/public/language/hr/notifications.json index 85f031bab3..4e43f28e4d 100644 --- a/public/language/hr/notifications.json +++ b/public/language/hr/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/hr/register.json b/public/language/hr/register.json index f9cb4d9790..95119842f8 100644 --- a/public/language/hr/register.json +++ b/public/language/hr/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Prihvaćam uvjete korištenja", "terms_of_use_error": "Morate prihvatiti uvjete korištenja", "registration-added-to-queue": "Vaša registracija je dodana u listu zahtjeva za registraciju. Biti ćete obaviješteni kad Vas administrator prihvati.", + "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.", "interstitial.intro": "Treba nam još par dodatnih informacija prije nego kreirate novi račun.", "interstitial.errors-found": "Nismo uspijeli dovršiti registraciju:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/hr/topic.json b/public/language/hr/topic.json index 5a18c836fc..ba109d49a7 100644 --- a/public/language/hr/topic.json +++ b/public/language/hr/topic.json @@ -30,6 +30,7 @@ "locked": "Zaključano", "pinned": "Zakačeno", "moved": "Premješteno", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/hr/user.json b/public/language/hr/user.json index faa39b6f92..3d02d57c99 100644 --- a/public/language/hr/user.json +++ b/public/language/hr/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Otvori odlazne poveznice u novom tabu", "enable_topic_searching": "Omogući pretragu unutar tema", "topic_search_help": "Ako uključeno,pretraga unutar tema će zamijeniti pretragu ključnih riječi vašeg pretraživača kojemu je omogućeno pretraživanje samo onoga što je na ekranu,za razliku od ove opcije koja omogućava pretragu na cijeloj temi", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Nakon objavljivanja,prikaži objavu", "follow_topics_you_reply_to": "Prati teme na koje objavljuješ", "follow_topics_you_create": "Prati teme koje si napravio", diff --git a/public/language/hr/users.json b/public/language/hr/users.json index 00c45c12ac..a6e4dba223 100644 --- a/public/language/hr/users.json +++ b/public/language/hr/users.json @@ -11,6 +11,7 @@ "online-only": "Samo na mreži", "invite": "Pozovi", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Pozivnica poslana %1", "user_list": "Popis korisnika", "recent_topics": "Zadnje teme", diff --git a/public/language/hu/admin/manage/privileges.json b/public/language/hu/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/hu/admin/manage/privileges.json +++ b/public/language/hu/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/hu/admin/menu.json b/public/language/hu/admin/menu.json index c09e3f0834..6f72e3c0f5 100644 --- a/public/language/hu/admin/menu.json +++ b/public/language/hu/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Lapszámozás", "settings/tags": "Címkék", "settings/notifications": "Értesítések", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Süti", diff --git a/public/language/hu/admin/settings/email.json b/public/language/hu/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/hu/admin/settings/email.json +++ b/public/language/hu/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/hu/admin/settings/guest.json b/public/language/hu/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/hu/admin/settings/guest.json +++ b/public/language/hu/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/hu/admin/settings/user.json b/public/language/hu/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/hu/admin/settings/user.json +++ b/public/language/hu/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/hu/flags.json b/public/language/hu/flags.json index adc5a33942..9bf2b38188 100644 --- a/public/language/hu/flags.json +++ b/public/language/hu/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/hu/groups.json b/public/language/hu/groups.json index e30a42d83a..51e903ec8f 100644 --- a/public/language/hu/groups.json +++ b/public/language/hu/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Tagok száma", "details.creation_date": "Létrehozás dátuma", "details.description": "Leírás", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Jelvény előnézet", "details.change_icon": "Ikon módosítása", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/hu/notifications.json b/public/language/hu/notifications.json index 71e4edd6a2..46b386ca38 100644 --- a/public/language/hu/notifications.json +++ b/public/language/hu/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Mikor valaki elkezd követni téged", "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-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", diff --git a/public/language/hu/register.json b/public/language/hu/register.json index 6e7e8d782f..f71cff91ff 100644 --- a/public/language/hu/register.json +++ b/public/language/hu/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Elfogadom a Használati feltételeket", "terms_of_use_error": "El kell fogadnod a Használati feltételeket", "registration-added-to-queue": "A regisztráció jóváhagyásra vár. Kapni fogsz egy e-mailt, amint az adminisztrátor elfogadja.", + "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.", "interstitial.intro": "Szükségünk van még további információkra a profilod létrehozásához.", "interstitial.errors-found": "Nem tudtuk teljesíteni a regisztrációd:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/hu/topic.json b/public/language/hu/topic.json index 4ee0d90804..3825796197 100644 --- a/public/language/hu/topic.json +++ b/public/language/hu/topic.json @@ -30,6 +30,7 @@ "locked": "Zárolva", "pinned": "Rögzített", "moved": "Áthelyezett", + "moved-from": "Moved from %1", "copy-ip": "IP-cím másolása", "ban-ip": "IP-cím kitiltása", "view-history": "Edit History", diff --git a/public/language/hu/user.json b/public/language/hu/user.json index 54280225e9..da9b978538 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Kimenő hivatkozások megnyitása új lapon", "enable_topic_searching": "Témakörön belüli keresés engedélyezése", "topic_search_help": "Ha engedélyezett, a témakörön belüli keresés felülírja az alapértelmezett keresési viselkedést, és ezáltal az egész témakörben keresel, nem csak a képernyőn megjelenőkben", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Válaszolást követően az új hozzászólás megjelenítése", "follow_topics_you_reply_to": "Témakör figyelése, melyre válaszolsz", "follow_topics_you_create": "Témakör figyelése, amit létrehozol", diff --git a/public/language/hu/users.json b/public/language/hu/users.json index dd3ba3419c..54f9042055 100644 --- a/public/language/hu/users.json +++ b/public/language/hu/users.json @@ -11,6 +11,7 @@ "online-only": "Csak elérhető", "invite": "Meghívás", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Egy meghívó e-mail el lett küldve %1 részére", "user_list": "Felhasználói lista", "recent_topics": "Legutóbbi témakörök", diff --git a/public/language/id/admin/manage/privileges.json b/public/language/id/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/id/admin/manage/privileges.json +++ b/public/language/id/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/id/admin/menu.json b/public/language/id/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/id/admin/menu.json +++ b/public/language/id/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/id/admin/settings/email.json b/public/language/id/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/id/admin/settings/email.json +++ b/public/language/id/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/id/admin/settings/guest.json b/public/language/id/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/id/admin/settings/guest.json +++ b/public/language/id/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/id/admin/settings/user.json b/public/language/id/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/id/admin/settings/user.json +++ b/public/language/id/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/id/flags.json b/public/language/id/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/id/flags.json +++ b/public/language/id/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/id/groups.json b/public/language/id/groups.json index 7379239d68..920a7a76fc 100644 --- a/public/language/id/groups.json +++ b/public/language/id/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Member Count", "details.creation_date": "Creation Date", "details.description": "Description", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/id/notifications.json b/public/language/id/notifications.json index 2192cce6cc..57f60009db 100644 --- a/public/language/id/notifications.json +++ b/public/language/id/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/id/register.json b/public/language/id/register.json index 6ba5f4ee42..dd764a505e 100644 --- a/public/language/id/register.json +++ b/public/language/id/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Saya menyetujui Aturan Penggunaan", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Pendaftaranmu telah ditambahkan dalam daftar persetujuan. Kamu akan menerima email ketika pendaftaranmu disetujui oleh administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/id/topic.json b/public/language/id/topic.json index 764c8b6639..97fa869ae0 100644 --- a/public/language/id/topic.json +++ b/public/language/id/topic.json @@ -30,6 +30,7 @@ "locked": "Terkunci", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/id/user.json b/public/language/id/user.json index 193f14b54c..33f49fc395 100644 --- a/public/language/id/user.json +++ b/public/language/id/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Gunakan Pencarian Di dalam Topik", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/id/users.json b/public/language/id/users.json index c65fa9c65e..d2965239ab 100644 --- a/public/language/id/users.json +++ b/public/language/id/users.json @@ -11,6 +11,7 @@ "online-only": "Online only", "invite": "Invite", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "An invitation email has been sent to %1", "user_list": "User List", "recent_topics": "Recent Topics", diff --git a/public/language/it/admin/manage/privileges.json b/public/language/it/admin/manage/privileges.json index 6a30efe51c..a9d631e1d8 100644 --- a/public/language/it/admin/manage/privileges.json +++ b/public/language/it/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Carica file", "signature": "Firma", "ban": "Ban", + "invite": "Invite", "search-content": "Cerca contenuto", "search-users": "Cerca utenti", "search-tags": "Cerca tag", diff --git a/public/language/it/admin/menu.json b/public/language/it/admin/menu.json index 82d9e8cc10..0a87a19465 100644 --- a/public/language/it/admin/menu.json +++ b/public/language/it/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Paginazione", "settings/tags": "Tabs", "settings/notifications": "Notifiche", + "settings/api": "Accesso API", "settings/sounds": "Suoni", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/it/admin/settings/email.json b/public/language/it/admin/settings/email.json index d67e27fcfa..5c7d376804 100644 --- a/public/language/it/admin/settings/email.json +++ b/public/language/it/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Il seguente indirizzo email si riferisce all'email che il destinatario vedrà nei campi \"Da\" e \"Rispondi a\".", "from": "Da Nome", "from-help": "Il nome da visualizzare nell'email.", - + "smtp-transport": "Trasporto SMTP", "smtp-transport.enabled": "Utilizza un server di posta elettronica esterno per inviare le email", "smtp-transport-help": "Puoi selezionare da un elenco di servizi noti o inserirne uno personalizzato.", @@ -35,5 +35,7 @@ "subscriptions": "Email riepilogo", "subscriptions.disable": "Disabilita email riepilogo", "subscriptions.hour": "Orario riepilogo", - "subscriptions.hour-help": "Si prega di inserire un numero che rappresenta l'ora per l'invio dell'email programmate (es. 0per mezzanotte, 17per le 17: 00). Tieni presente che questa è l'ora secondo il server stesso, e potrebbe non combaciare esattamente al tuo orologio di sistema.
L'orario approssimativo del server è:
La prossima trasmissione giornaliera è prevista alle " + "subscriptions.hour-help": "Si prega di inserire un numero che rappresenta l'ora per l'invio dell'email programmate (es. 0per mezzanotte, 17per le 17: 00). Tieni presente che questa è l'ora secondo il server stesso, e potrebbe non combaciare esattamente al tuo orologio di sistema.
L'orario approssimativo del server è:
La prossima trasmissione giornaliera è prevista alle ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/it/admin/settings/guest.json b/public/language/it/admin/settings/guest.json index e946d8a26a..798eb01eda 100644 --- a/public/language/it/admin/settings/guest.json +++ b/public/language/it/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Nome utente Ospite", + "settings": "Settings", "handles.enabled": "Consenti nome utente ospite", "handles.enabled-help": "Questa opzione mostra un nuovo campo che permette agli ospiti di scegliere un nome da associare ad ogni post che fanno. Se disabilitata, saranno semplicemente chiamati \"Ospite\".", - "topic-views": "Visualizzazioni discussione", - "topic-views.enabled": "Consentire agli ospiti di aumentare il numero di visualizzazioni della discussione" + "topic-views.enabled": "Consentire agli ospiti di aumentare il numero di visualizzazioni della discussione", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/it/admin/settings/user.json b/public/language/it/admin/settings/user.json index 49118ffffc..db508fbac9 100644 --- a/public/language/it/admin/settings/user.json +++ b/public/language/it/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Niente registrazione", "registration-type.help": "Normale: gli utenti possono registrarsi dalla pagina/di registrazione.
\nSolo invito: gli utenti possono invitare altri dalla pagina utenti.
\nSolo su invito amministratore: solo gli amministratori possono invitare altri utenti edalle pagine amministratore/gestione/utenti.
\nNessuna registrazione - Nessuna registrazione dell'utente.
", "registration-approval-type.help": "Normale: gli utenti vengono registrati immediatamente.
\nApprovazione amministratore - Le registrazioni degli utenti vengono inserite in una coda di approvazione per amministratori.
\nApprovazione amministratore per IP - Normale per i nuovi utenti, Approvazione amministratore per indirizzi IP che dispongono già di un account.
", + "registration-queue-auto-approve-time": "Tempo di approvazione automatico", + "registration-queue-auto-approve-time-help": "Ore prima che l'utente venga approvato automaticamente. 0 per disabilitare.", + "registration-queue-show-average-time": "Mostra agli utenti il tempo medio necessario per approvare un nuovo utente", "registration.max-invites": "Numero massimo di inviti per Utente", "max-invites": "Numero massimo di inviti per Utente", "max-invites-help": "0 per nessuna restrizione. Gli amministratori ricevono infiniti inviti
Applicabile solo per \"Solo invito\"", @@ -62,6 +65,7 @@ "restrict-chat": "Permetti messaggi in chat solo da utenti che seguo", "outgoing-new-tab": "Apri link esterni in una nuova scheda", "topic-search": "Abilita ricerca nella Discussione", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Iscriviti al Riepilogo", "digest-freq.off": "Spento", "digest-freq.daily": "Quotidiano", diff --git a/public/language/it/error.json b/public/language/it/error.json index 10d8d3780d..724ae2806e 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -103,7 +103,7 @@ "group-not-member": "Non è membro di questo gruppo", "group-needs-owner": "Questo gruppo richiede almeno un proprietario.", "group-already-invited": "Questo utente è già stato invitato", - "group-already-requested": "La tua richiesta di partecipazione è già stata inviata", + "group-already-requested": "La tua richiesta di iscrizione è già stata inviata", "group-join-disabled": "Non sei in grado di iscriverti a questo gruppo in questo momento", "group-leave-disabled": "Non sei in grado di lasciare questo gruppo in questo momento.", "post-already-deleted": "Questo post è già stato eliminato", diff --git a/public/language/it/flags.json b/public/language/it/flags.json index 9709236047..5473628978 100644 --- a/public/language/it/flags.json +++ b/public/language/it/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Più voti positivi", "sort-replies": "Più risposte", - "modal-title": "Segnala Contenuto Inappropriato", + "modal-title": "Report Content", "modal-body": "Specifica il motivo per cui contrassegni %1 %2 per la revisione. In alternativa, utilizza uno dei pulsanti di segnalazione rapida, se applicabile.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensivo", diff --git a/public/language/it/groups.json b/public/language/it/groups.json index b06978ba90..afa767294c 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Numero Membri", "details.creation_date": "Data Creazione", "details.description": "Descrizione", + "details.member-post-cids": "Categorie da cui visualizzare i post", + "details.member-post-cids-help": "Nota: Se non si seleziona alcuna categoria, tutte le categorie saranno incluse. Utilizza ctrl e shift per selezionare più opzioni.", "details.badge_preview": "Anteprima Badge", "details.change_icon": "Cambia Icona", "details.change_label_colour": "Cambia colore etichetta", diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json index 45bd4df2ec..812cae26d4 100644 --- a/public/language/it/notifications.json +++ b/public/language/it/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Quando un post viene modificato in un topic che stai guardando", "notificationType_follow": "Quando qualcuno inizia a seguirti", "notificationType_new-chat": "Quando ricevi un messaggio in chat", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "Quando ricevi un invito ad un gruppo", "notificationType_group-request-membership": "Quando qualcuno richiede di iscriversi a un gruppo di tua proprietà", "notificationType_new-register": "Quando qualcuno è in attesa della registrazione", diff --git a/public/language/it/register.json b/public/language/it/register.json index b16b6a2758..99dbb37a46 100644 --- a/public/language/it/register.json +++ b/public/language/it/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Accetto i Termini di Utilizzo", "terms_of_use_error": "Devi accettare i Termini d'Utilizzo", "registration-added-to-queue": "La tua registrazione è stata aggiunta alla coda di approvazione. Riceverai un'email quando sarà accettata da un amministratore.", + "registration-queue-average-time": "Il nostro tempo medio per l'approvazione delle iscrizioni è di %1 ore %2 minuti.", + "registration-queue-auto-approve-time": "La tua iscrizione a questo forum sarà completamente attivata entro un massimo di %1 ore.", "interstitial.intro": "Abbiamo bisogno di alcune informazioni aggiuntive prima di poter creare il tuo account.", "interstitial.errors-found": "Non abbiamo potuto completare la tua registrazione:", "gdpr_agree_data": "Acconsento alla raccolta e al trattamento dei miei dati personali su questo sito web.", diff --git a/public/language/it/topic.json b/public/language/it/topic.json index b257dcf8e5..252ac98c60 100644 --- a/public/language/it/topic.json +++ b/public/language/it/topic.json @@ -30,6 +30,7 @@ "locked": "Bloccato", "pinned": "Appeso", "moved": "Spostato", + "moved-from": "Moved from %1", "copy-ip": "Copia indirizzo IP", "ban-ip": "Banna indirizzo IP", "view-history": "Modifica storico", diff --git a/public/language/it/user.json b/public/language/it/user.json index 13d9684539..c9335882d2 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Apri i link web in una nuova pagina", "enable_topic_searching": "Abilita la ricerca negli argomenti", "topic_search_help": "Se abilitata, la ricerca negli argomenti ignorerà il comportamento predefinito del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Dopo aver postato una risposta, mostra il nuovo post", "follow_topics_you_reply_to": "Segui le discussioni a cui rispondi", "follow_topics_you_create": "Segui le discussioni che crei", diff --git a/public/language/it/users.json b/public/language/it/users.json index b8f5c97130..88220eca07 100644 --- a/public/language/it/users.json +++ b/public/language/it/users.json @@ -11,6 +11,7 @@ "online-only": "Solo online", "invite": "Invita", "prompt-email": "Email:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Una mail di invito è stata inviata a %1", "user_list": "Lista Utenti", "recent_topics": "Discussioni Recenti", diff --git a/public/language/ja/admin/manage/privileges.json b/public/language/ja/admin/manage/privileges.json index a044c93450..c747ae74fd 100644 --- a/public/language/ja/admin/manage/privileges.json +++ b/public/language/ja/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "ファイルをアップロード", "signature": "署名", "ban": "Ban", + "invite": "Invite", "search-content": "コンテンツを検索", "search-users": "ユーザー検索", "search-tags": "タグ検索", diff --git a/public/language/ja/admin/menu.json b/public/language/ja/admin/menu.json index 4c214039b1..9e9be04577 100644 --- a/public/language/ja/admin/menu.json +++ b/public/language/ja/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "ページ", "settings/tags": "タグ", "settings/notifications": "通知", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "クッキー", diff --git a/public/language/ja/admin/settings/email.json b/public/language/ja/admin/settings/email.json index 5d638c3af5..c1dd208061 100644 --- a/public/language/ja/admin/settings/email.json +++ b/public/language/ja/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "次の電子メールアドレスは「送信者」と「返信先」の欄に受信者が表示する電子メールを指します。", "from": "名前から", "from-help": "メールからの名前が表示されます。", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "ダイジェストアワー", - "subscriptions.hour-help": "スケジュールされたメールのダイジェストを送信する時間を表す数字を入力してください(深夜は0、午後5:00は17)これはサーバー自体に基づく時間であり、システムの時計と正確に一致しない場合があります。
次の日のダイジェストは" + "subscriptions.hour-help": "スケジュールされたメールのダイジェストを送信する時間を表す数字を入力してください(深夜は0、午後5:00は17)これはサーバー自体に基づく時間であり、システムの時計と正確に一致しない場合があります。
次の日のダイジェストは", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/ja/admin/settings/guest.json b/public/language/ja/admin/settings/guest.json index 7d9d94db62..629e93d809 100644 --- a/public/language/ja/admin/settings/guest.json +++ b/public/language/ja/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "ゲストハンドル", + "settings": "Settings", "handles.enabled": "ゲストハンドルを有効にする", "handles.enabled-help": "このオプションでは新しい投稿が表示される時に、ゲストは自分が投稿する各投稿に関連付ける名前を選択できます。無効にすると、単に「ゲスト」と呼ばれます。", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/ja/admin/settings/user.json b/public/language/ja/admin/settings/user.json index 9bd19b6e31..0f07c6d471 100644 --- a/public/language/ja/admin/settings/user.json +++ b/public/language/ja/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "登録なし", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "ユーザーごとの最大招待数", "max-invites": "ユーザーごとの最大招待数", "max-invites-help": "無制限の場合は0です。管理者は無限の招待を受ける
「招待のみ」にのみ適用されます", @@ -62,6 +65,7 @@ "restrict-chat": "フォローしたユーザーからのチャットメッセージだけを許可する", "outgoing-new-tab": "外部リンクを新しいタブで開く", "topic-search": "スレッド内検索を有効にする", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "お知らせを購読する", "digest-freq.off": "オフ", "digest-freq.daily": "デイリー", diff --git a/public/language/ja/flags.json b/public/language/ja/flags.json index 75c66b6681..df5a7713d4 100644 --- a/public/language/ja/flags.json +++ b/public/language/ja/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "不適切なコンテンツを報告する", + "modal-title": "Report Content", "modal-body": "レビューのために%1 %2 にフラグを付ける理由を指定してください。または必要に応じてクイックレポートボタンの1つを使用します。", "modal-reason-spam": "スパム", "modal-reason-offensive": "攻撃", diff --git a/public/language/ja/groups.json b/public/language/ja/groups.json index 83821e8072..fea566ad1b 100644 --- a/public/language/ja/groups.json +++ b/public/language/ja/groups.json @@ -35,6 +35,8 @@ "details.member_count": "メンバー数", "details.creation_date": "作成日", "details.description": "説明", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "バッジプレビュー", "details.change_icon": "アイコンを変更", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json index e3db188cd6..7686ab1f78 100644 --- a/public/language/ja/notifications.json +++ b/public/language/ja/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "誰かがあなたをフォローしたとき", "notificationType_new-chat": "チャットメッセージを受信したとき", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "グループ招待を受けたとき", "notificationType_group-request-membership": "誰かがあなたのグループへの参加を要求したとき", "notificationType_new-register": "誰かが登録キューに追加されたとき", diff --git a/public/language/ja/register.json b/public/language/ja/register.json index cf89f8d830..68cd186748 100644 --- a/public/language/ja/register.json +++ b/public/language/ja/register.json @@ -18,6 +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.", "interstitial.intro": "私たちは、あなたのアカウント作成においていくつかの情報をお訪ねします。", "interstitial.errors-found": "私達はあなたの登録を完了できませんでした:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/ja/topic.json b/public/language/ja/topic.json index 2913a57a96..7b37b0d752 100644 --- a/public/language/ja/topic.json +++ b/public/language/ja/topic.json @@ -30,6 +30,7 @@ "locked": "ロック", "pinned": "ピンされた", "moved": "移動しました", + "moved-from": "Moved from %1", "copy-ip": "IPをコピー", "ban-ip": "IPをBan", "view-history": "履歴を編集", diff --git a/public/language/ja/user.json b/public/language/ja/user.json index 9de1543db1..52464560c5 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "外部リンクを新しいタブで開く", "enable_topic_searching": "スレッド内検索を有効にする", "topic_search_help": "有効にしたら、インースレッドの検索はブラウザの既定機能を無視して、スクリーンに示したよりスレッド内からの全部を検索します", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "返信を投稿した後、新しい投稿を表示する", "follow_topics_you_reply_to": "あなたが返信したスレッドをウォッチする", "follow_topics_you_create": "あなたが作成したスレッドをウォッチする", diff --git a/public/language/ja/users.json b/public/language/ja/users.json index 358260223c..b3fcb65cdb 100644 --- a/public/language/ja/users.json +++ b/public/language/ja/users.json @@ -11,6 +11,7 @@ "online-only": "オンラインのみ", "invite": "招待", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "招待メールが%1に送られました。", "user_list": "ユーザー一覧", "recent_topics": "最新スレッド", diff --git a/public/language/ko/admin/manage/privileges.json b/public/language/ko/admin/manage/privileges.json index 85c118d97c..797e19bd85 100644 --- a/public/language/ko/admin/manage/privileges.json +++ b/public/language/ko/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "파일 업로드", "signature": "서명", "ban": "차단", + "invite": "Invite", "search-content": "콘텐츠 검색", "search-users": "사용자 검색", "search-tags": "태그 검색", diff --git a/public/language/ko/admin/menu.json b/public/language/ko/admin/menu.json index a1ed7c9a36..541713c905 100644 --- a/public/language/ko/admin/menu.json +++ b/public/language/ko/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "페이지 매기기", "settings/tags": "태그", "settings/notifications": "알림", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "쿠키", diff --git a/public/language/ko/admin/settings/email.json b/public/language/ko/admin/settings/email.json index cf7255cb1b..dd9ed857a4 100644 --- a/public/language/ko/admin/settings/email.json +++ b/public/language/ko/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "아래 이메일 주소는 수신인의 \"보낸 사람\"과 \"답장하기\" 항목에서 보이게 됩니다.", "from": "보낸 사람 이름", "from-help": "이메일에 표시할 보낸 사람 이름", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "발송 시간", - "subscriptions.hour-help": "정기 이메일을 보낼 시간을 기입해 주세요(예: 0은 자정, 17은 오후 5시 입니다. 이 시간은 서버기준이며, 귀하의 시스템 시간과 일치하지 않을 수 있습니다.
서버 시간은 입니다.
다음 정기 이메일은 에 발송 예정입니다." + "subscriptions.hour-help": "정기 이메일을 보낼 시간을 기입해 주세요(예: 0은 자정, 17은 오후 5시 입니다. 이 시간은 서버기준이며, 귀하의 시스템 시간과 일치하지 않을 수 있습니다.
서버 시간은 입니다.
다음 정기 이메일은 에 발송 예정입니다.", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/ko/admin/settings/guest.json b/public/language/ko/admin/settings/guest.json index 56603dedc7..935f6c2ad1 100644 --- a/public/language/ko/admin/settings/guest.json +++ b/public/language/ko/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "게스트 처리", + "settings": "Settings", "handles.enabled": "미가입 사용자 닉네임 설정 허가", "handles.enabled-help": "이 옵션은 게스트들이 포스트를 작성할 때 이름을 적는 공간을 제공합니다. 이 옵션이 비활성화 돼있다면 \"Guest\" 라고 표시될 것입니다.", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/ko/admin/settings/user.json b/public/language/ko/admin/settings/user.json index 0c5ea1b415..0c42c390b2 100644 --- a/public/language/ko/admin/settings/user.json +++ b/public/language/ko/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "신규 가입 불가", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "최대 가능한 초대 수", "max-invites": "최대 가능한 초대 수", "max-invites-help": "아무런 제한을 두지 않으려면 0. 관리자는 초대 수 에 제한이 없습니다.
\"사용자 초대\" 설정에서만 반영됩니다.", @@ -62,6 +65,7 @@ "restrict-chat": "내가 팔로우하는 이용자로부터만 대화를 허용", "outgoing-new-tab": "외부 링크를 새로운 탭에서 열람", "topic-search": "토픽 내 검색 허용", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "포럼 이메일 정기구독", "digest-freq.off": "해제", "digest-freq.daily": "매일", diff --git a/public/language/ko/flags.json b/public/language/ko/flags.json index c164aad462..4e0218d708 100644 --- a/public/language/ko/flags.json +++ b/public/language/ko/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "부적절한 컨텐츠 신고", + "modal-title": "Report Content", "modal-body": "%1 %2 에 대한 신고 사유를 적어주시거나, 빠른 신고 버튼 중 하나를 사용해 주세요.", "modal-reason-spam": "스팸", "modal-reason-offensive": "부적절한 글", diff --git a/public/language/ko/groups.json b/public/language/ko/groups.json index 654671f36b..21d56a4f98 100644 --- a/public/language/ko/groups.json +++ b/public/language/ko/groups.json @@ -35,6 +35,8 @@ "details.member_count": "구성원 수", "details.creation_date": "생성일", "details.description": "설명", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "배지 미리보기", "details.change_icon": "아이콘 변경", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json index 640ce1374a..b0b29021d9 100644 --- a/public/language/ko/notifications.json +++ b/public/language/ko/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "누군가 사용자님을 팔로우 하면", "notificationType_new-chat": "채팅 메시지를 받으면", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "그룹 초대를 받으면", "notificationType_group-request-membership": "누군가가 당신이 소유한 그룹에 참여를 요청했을 때", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/ko/register.json b/public/language/ko/register.json index dd3f7534ad..a69924499f 100644 --- a/public/language/ko/register.json +++ b/public/language/ko/register.json @@ -18,6 +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.", "interstitial.intro": "계정을 생성하기 전 추가 정보가 더 필요합니다.", "interstitial.errors-found": "회원가입을 완료하지 못했습니다.", "gdpr_agree_data": "나는 이 웹 사이트에서 개인 정보를 수집하고 처리하는데 동의합니다.", diff --git a/public/language/ko/topic.json b/public/language/ko/topic.json index 437fd01ac1..81aafa2234 100644 --- a/public/language/ko/topic.json +++ b/public/language/ko/topic.json @@ -30,6 +30,7 @@ "locked": "잠긴 게시물", "pinned": "고정된 게시물", "moved": "이동된 게시물", + "moved-from": "Moved from %1", "copy-ip": "IP 복사", "ban-ip": "IP 차단", "view-history": "편집 기록", diff --git a/public/language/ko/user.json b/public/language/ko/user.json index ab220377d6..620308b1bf 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "외부 링크를 새로운 탭에서 열람", "enable_topic_searching": "게시물 내 검색 허용", "topic_search_help": "만약 활성화된다면, 브라우저의 기본 검색 기능은 무효화되고 게시물 내 검색을 통해 화면에 보여지는 것 뿐만 아니라 게시물 전체의 내용을 검색할 수 있습니다.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "답글 게시 후 새 포스트 보여주기", "follow_topics_you_reply_to": "내가 답글을 단 게시물을 관심 목록에 추가", "follow_topics_you_create": "내가 작성한 게시물을 관심 목록에 추가", diff --git a/public/language/ko/users.json b/public/language/ko/users.json index 9895d4ee1a..e7e5655a6f 100644 --- a/public/language/ko/users.json +++ b/public/language/ko/users.json @@ -11,6 +11,7 @@ "online-only": "접속한 사용자", "invite": "초대", "prompt-email": "이메일:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "%1님에게 초대 메일을 보냈습니다.", "user_list": "사용자 목록", "recent_topics": "최근 게시물", diff --git a/public/language/lt/admin/manage/privileges.json b/public/language/lt/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/lt/admin/manage/privileges.json +++ b/public/language/lt/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/lt/admin/menu.json b/public/language/lt/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/lt/admin/menu.json +++ b/public/language/lt/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/lt/admin/settings/email.json b/public/language/lt/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/lt/admin/settings/email.json +++ b/public/language/lt/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/lt/admin/settings/guest.json b/public/language/lt/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/lt/admin/settings/guest.json +++ b/public/language/lt/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/lt/admin/settings/user.json b/public/language/lt/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/lt/admin/settings/user.json +++ b/public/language/lt/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/lt/flags.json b/public/language/lt/flags.json index 556035ffbb..1977059a92 100644 --- a/public/language/lt/flags.json +++ b/public/language/lt/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Šlamštas", "modal-reason-offensive": "Offensive", diff --git a/public/language/lt/groups.json b/public/language/lt/groups.json index e140b9b84b..b4d5092432 100644 --- a/public/language/lt/groups.json +++ b/public/language/lt/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Narių skaičiuotuvas", "details.creation_date": "Sukūrimo Data", "details.description": "Aprašymas", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Ženklelio Peržiūra", "details.change_icon": "Pakeisti paveikslėlį", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json index 2b09fbc8ff..c7f4446e04 100644 --- a/public/language/lt/notifications.json +++ b/public/language/lt/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/lt/register.json b/public/language/lt/register.json index 161dc565ff..62fc8ce8ce 100644 --- a/public/language/lt/register.json +++ b/public/language/lt/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Aš sutinku su vartojimo sąlygomis", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Jūsų registracijos prašymas buvo pridėtas į laukiančiųjų sąrašą. Jūs gausite el.paštu laišką kada administratorius patvirtins jus", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index 7f0f281058..7d0b47f37b 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -30,6 +30,7 @@ "locked": "Užrakinta", "pinned": "Pinned", "moved": "Perkelta", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Blokuoti IP", "view-history": "Edit History", diff --git a/public/language/lt/user.json b/public/language/lt/user.json index f41317858e..3cc4b27ab1 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Atidaryti išeinančias nuorodas naujam skirtuke", "enable_topic_searching": "Įjungti Temų Ieškojimą ", "topic_search_help": "Jeigu įjungtas, temų ieškojimas, nepaisys naršyklės puslapio ieškojimo, ir pradės ieškoti tik toje temoje kuri bus rodoma ekrane", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Po parašyto atsakymo, rodyti naują pranešimą", "follow_topics_you_reply_to": "Peržiūrėti temas, kuriose Jūs atsakėte", "follow_topics_you_create": "Peržiūrėti temas, kurias Jūs sukūrėte", diff --git a/public/language/lt/users.json b/public/language/lt/users.json index 93ad845385..df061c067a 100644 --- a/public/language/lt/users.json +++ b/public/language/lt/users.json @@ -11,6 +11,7 @@ "online-only": "Tik prisijunge", "invite": "Pakviesti", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Pakvietimas el.paštu buvo išsiųstas į %1!", "user_list": "Vartotojų sąrašas", "recent_topics": "Paskutinės temos", diff --git a/public/language/lv/admin/manage/privileges.json b/public/language/lv/admin/manage/privileges.json index c7e7c852a4..3a030df713 100644 --- a/public/language/lv/admin/manage/privileges.json +++ b/public/language/lv/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Augšupielādēt failus", "signature": "Parakstīties", "ban": "Bloķēt", + "invite": "Invite", "search-content": "Meklēt saturā", "search-users": "Meklēt lietotājos", "search-tags": "Meklēt birkās", diff --git a/public/language/lv/admin/menu.json b/public/language/lv/admin/menu.json index 74533a7428..9b210ee44e 100644 --- a/public/language/lv/admin/menu.json +++ b/public/language/lv/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Dalīšana pa lapām", "settings/tags": "Birkas", "settings/notifications": "Paziņojumi", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Sīkfaili", diff --git a/public/language/lv/admin/settings/email.json b/public/language/lv/admin/settings/email.json index 0d878340e9..084dd5c055 100644 --- a/public/language/lv/admin/settings/email.json +++ b/public/language/lv/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "E-pasta adrese, ko saņēmējs redzēs laukos \"No:\" un \"Atbildēt:\".", "from": "Sūtītāja vārds vai nosaukums", "from-help": "Vārds vai nosaukums, ko saņēmējs redzēs kā sūtītāju.", - + "smtp-transport": "SMTP transports", "smtp-transport.enabled": "Izmantot atsevišķu e-pasta serveri, lai nosūtītu e-pastus", "smtp-transport-help": "Izvēlies no labi zināmu pakalpojumu saraksta vai ievadi pielāgotu pakalpojumu.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Kopsavilkumu nosūtīšanas stunda", - "subscriptions.hour-help": "Ievadīt skaitli, kas norāda stundu, kurā nosūtītu e-pasta rakstu apkopojumu (piemēram, 0 nozīmē pusnakts, 17 nozīmē plkst.1700). Paturēt prātā, ka šī ir stunda servera laikā, un tā var neatbilst Tavam pulkstenim. Aptuvens servera laiks ir:
Nākamais ikdienas apkopojums tiks nosūtīts " + "subscriptions.hour-help": "Ievadīt skaitli, kas norāda stundu, kurā nosūtītu e-pasta rakstu apkopojumu (piemēram, 0 nozīmē pusnakts, 17 nozīmē plkst.1700). Paturēt prātā, ka šī ir stunda servera laikā, un tā var neatbilst Tavam pulkstenim. Aptuvens servera laiks ir:
Nākamais ikdienas apkopojums tiks nosūtīts ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/lv/admin/settings/guest.json b/public/language/lv/admin/settings/guest.json index e355222d3d..394c6b8a25 100644 --- a/public/language/lv/admin/settings/guest.json +++ b/public/language/lv/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Viesu iesaukas", + "settings": "Settings", "handles.enabled": "Atļaut viesu iesaukas", "handles.enabled-help": "Parādīt lauku, kas viesiem ļaus izvēlēties savu iesauku, kas saistīts ar katru viņu publicēto rakstu. Ja ir atspējots, viņus vienkārši sauks par \"Viesiem\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/lv/admin/settings/user.json b/public/language/lv/admin/settings/user.json index 854269611a..748db1fcfd 100644 --- a/public/language/lv/admin/settings/user.json +++ b/public/language/lv/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Nav", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maksimālais uzaicinājumu skaits katram lietotājam", "max-invites": "Maksimālais uzaicinājumu skaits katram lietotājam", "max-invites-help": "Ievadīt 0, lai nebūtu ierobežots. Administratori var vienmēr uzaicināt jaunus lietotājus.
Attiecas tikai uz \"Tikai ar ielūgumu\"", @@ -62,6 +65,7 @@ "restrict-chat": "Atļaut sarunas tikai no tiem lietotājiem, kurus es sekoju", "outgoing-new-tab": "Atvērt izejošās saites jaunā cilnē", "topic-search": "Iespējot meklēšanu tematu saturā", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Sakopojumu abonements", "digest-freq.off": "Nav", "digest-freq.daily": "Ik dienu", diff --git a/public/language/lv/flags.json b/public/language/lv/flags.json index ec9a8547e7..9132179172 100644 --- a/public/language/lv/flags.json +++ b/public/language/lv/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Ziņot par nepiemērotu saturu", + "modal-title": "Report Content", "modal-body": "Lūdzu, norādi iemeslu, kāpēc %1 %2 ir atzīmēts pārskatīšanai. Citādi, izmanto vienu no ātrā ziņojuma pogām.", "modal-reason-spam": "Mēstule", "modal-reason-offensive": "Aizskarošs", diff --git a/public/language/lv/groups.json b/public/language/lv/groups.json index ff1cdeea83..62d2cd8009 100644 --- a/public/language/lv/groups.json +++ b/public/language/lv/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Pēc biedru skaita", "details.creation_date": "Pēc datuma", "details.description": "Apraksts", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Etiķetes priekšskats", "details.change_icon": "Mainīt ikonu", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/lv/notifications.json b/public/language/lv/notifications.json index afd3c42343..cced8052fe 100644 --- a/public/language/lv/notifications.json +++ b/public/language/lv/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Kad kāds sāk Tev sekot", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "Kad kāds tiek ievietots reģistrācijas rindā", diff --git a/public/language/lv/register.json b/public/language/lv/register.json index 5981b05554..db70ac919a 100644 --- a/public/language/lv/register.json +++ b/public/language/lv/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Es piekrītu lietošanas noteikumiem", "terms_of_use_error": "Tev ir jāpiekrīt lietošanas noteikumiem", "registration-added-to-queue": "Tavs reģistrācijas pieteikums ir ievietots reģistrācijas rindā. Tu saņemsi e-pastu, kad administrators to apstiprinās.", + "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.", "interstitial.intro": "Pirms varam izveidot Tavu kontu, mums ir nepieciešama papildu informācija.", "interstitial.errors-found": "Mēs nevarējām pabeigt Tavu reģistrāciju:", "gdpr_agree_data": "Es piekrītu manas personas informācijas vākšanai un apstrādei šajā vietnē.", diff --git a/public/language/lv/topic.json b/public/language/lv/topic.json index 6827595739..dc6f01b54b 100644 --- a/public/language/lv/topic.json +++ b/public/language/lv/topic.json @@ -30,6 +30,7 @@ "locked": "Slēgtie", "pinned": "Piespraustie", "moved": "Pārvietots", + "moved-from": "Moved from %1", "copy-ip": "Kopēt IP adresi", "ban-ip": "Bloķēt IP adresi", "view-history": "Rediģēšanas vēsture", diff --git a/public/language/lv/user.json b/public/language/lv/user.json index 56feabb55d..27b818a09e 100644 --- a/public/language/lv/user.json +++ b/public/language/lv/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Atvērt izejošās saites jaunā cilnē", "enable_topic_searching": "Iespējot meklēšanu tematu saturā", "topic_search_help": "Ja ir iespējots, meklēšana tematos ignorē pārlūka noklusējuma lapu meklēšanas uzvedību un meklē visā tematā, ne tikai tā temata daļā, kas tiek rādīta ekrānā", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Rādīt jauno rakstu pēc publicēšanas", "follow_topics_you_reply_to": "Novērot tematus, kuros esi rakstījis(-jusi)", "follow_topics_you_create": "Novērot tematus, kurus esi izveidojis(-jusi)", diff --git a/public/language/lv/users.json b/public/language/lv/users.json index 1982f303f1..4cee320aba 100644 --- a/public/language/lv/users.json +++ b/public/language/lv/users.json @@ -11,6 +11,7 @@ "online-only": "Tikai tiešsaistē", "invite": "Uzaicināt", "prompt-email": "E-pasta adreses:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Ielūguma e-pasts ir nosūtīts %1", "user_list": "Lietotāji", "recent_topics": "Nesenie temati", diff --git a/public/language/ms/admin/manage/privileges.json b/public/language/ms/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/ms/admin/manage/privileges.json +++ b/public/language/ms/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/ms/admin/menu.json b/public/language/ms/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/ms/admin/menu.json +++ b/public/language/ms/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/ms/admin/settings/email.json b/public/language/ms/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/ms/admin/settings/email.json +++ b/public/language/ms/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/ms/admin/settings/guest.json b/public/language/ms/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/ms/admin/settings/guest.json +++ b/public/language/ms/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/ms/admin/settings/user.json b/public/language/ms/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/ms/admin/settings/user.json +++ b/public/language/ms/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/ms/flags.json b/public/language/ms/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/ms/flags.json +++ b/public/language/ms/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/ms/groups.json b/public/language/ms/groups.json index 19d3a57428..ebdc913c22 100644 --- a/public/language/ms/groups.json +++ b/public/language/ms/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Kiraan Ahli", "details.creation_date": "Tarikh Dicipta", "details.description": "Penerangan", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Pra-lihat Lencana", "details.change_icon": "Tukar Ikon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json index 444e49c195..598476cc8b 100644 --- a/public/language/ms/notifications.json +++ b/public/language/ms/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/ms/register.json b/public/language/ms/register.json index cad27aa71a..f44395f0a3 100644 --- a/public/language/ms/register.json +++ b/public/language/ms/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Saya bersetuju dengan Terma Penggunaan", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Pendaftaran anda sedang dimasukkan ke barisan pengesahan. Anda akan menerima emel setelah diterima oleh pentadbir.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/ms/topic.json b/public/language/ms/topic.json index a53aca52fa..5f7f6257f1 100644 --- a/public/language/ms/topic.json +++ b/public/language/ms/topic.json @@ -30,6 +30,7 @@ "locked": "Kunci", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 47e0f97bda..b48641c932 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Buka pautan luar di tab yang baru", "enable_topic_searching": "Aktifkan Pencarian Dalam-Topik", "topic_search_help": "Jika diaktifkan, pencarian dalam-topik akan membatalkan fungsi asal pencarian pelayan dan membenarkan anda untuk mencari seluruh topik, daripada menunjukkan apa yang terdapat pada skrin sahaja", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/ms/users.json b/public/language/ms/users.json index c593f98398..8bf7b1aaaf 100644 --- a/public/language/ms/users.json +++ b/public/language/ms/users.json @@ -11,6 +11,7 @@ "online-only": "Atas talian sahaja", "invite": "Jemput", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Emel jemputan telah dihantar ke %1", "user_list": "Senarai Pengguna", "recent_topics": "Topik Terkini", diff --git a/public/language/nb/admin/manage/privileges.json b/public/language/nb/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/nb/admin/manage/privileges.json +++ b/public/language/nb/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/nb/admin/menu.json b/public/language/nb/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/nb/admin/menu.json +++ b/public/language/nb/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/nb/admin/settings/email.json b/public/language/nb/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/nb/admin/settings/email.json +++ b/public/language/nb/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/nb/admin/settings/guest.json b/public/language/nb/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/nb/admin/settings/guest.json +++ b/public/language/nb/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/nb/admin/settings/user.json b/public/language/nb/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/nb/admin/settings/user.json +++ b/public/language/nb/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/nb/flags.json b/public/language/nb/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/nb/flags.json +++ b/public/language/nb/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index 82a4af42bb..65fa516bc2 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Antall medlemmer", "details.creation_date": "Opprettelsesdato", "details.description": "Beskrivelse", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Forhåndsvisning av skilt", "details.change_icon": "Endre ikon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index 470d5d23bb..54f955a650 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/nb/register.json b/public/language/nb/register.json index 668d051098..fc0e5518e3 100644 --- a/public/language/nb/register.json +++ b/public/language/nb/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Jeg godtar vilkårene for bruk", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Din registrering har blitt lagt til i godkjenningskøen. Du vil motta en e-post når denne blir akseptert av en administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/nb/topic.json b/public/language/nb/topic.json index e33bd18b72..c59a5424f4 100644 --- a/public/language/nb/topic.json +++ b/public/language/nb/topic.json @@ -30,6 +30,7 @@ "locked": "Låst", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 0ef588add0..7d88d4a908 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Åpne utgående lenker i en ny fane", "enable_topic_searching": "Aktiver søk-i-emne", "topic_search_help": "Hvis søk-i-emne er aktivert, overstyres nettleserens standard sidesøk og gir mulighet til å søke gjennom hele emnet, ikke bare det som vises på skjermen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/nb/users.json b/public/language/nb/users.json index c49c9f17e9..92ede45840 100644 --- a/public/language/nb/users.json +++ b/public/language/nb/users.json @@ -11,6 +11,7 @@ "online-only": "Bare påloggede", "invite": "Invitér", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "En invitasjons-epost ble sendt til %1", "user_list": "Brukerliste", "recent_topics": "Seneste emner", diff --git a/public/language/nl/admin/manage/privileges.json b/public/language/nl/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/nl/admin/manage/privileges.json +++ b/public/language/nl/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/nl/admin/menu.json b/public/language/nl/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/nl/admin/menu.json +++ b/public/language/nl/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/nl/admin/settings/email.json b/public/language/nl/admin/settings/email.json index 5fdd953ced..e1d062b536 100644 --- a/public/language/nl/admin/settings/email.json +++ b/public/language/nl/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Het volgende e-mailadres refereert aan de e-mail die ontvanger ziet in de \"From\" en \"Reply To\" velden.", "from": "From Naam", "from-help": "De from naam om te tonen in de e-mail.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Gebruik een externe mail server om mails te verzenden", "smtp-transport-help": "Je kunt een bekende dienst uit de lijst selecteren of vul een aangepaste dienst in.", @@ -35,5 +35,7 @@ "subscriptions": "E-mail digests", "subscriptions.disable": "Schakel e-mail digests uit", "subscriptions.hour": "Uur van Digest", - "subscriptions.hour-help": "Voer het nummer in dat het uur representeerd waarop scheduled email digests worden verstuurd (bv. 0 voor middernacht, 17 voor 17:00). Neem er s.v.p. notie van dat dit het uur is van de server self, dit hoeft niet exact overeen te komen met de klok van uw systeem.
De tijd op de server is bij benadering:
De volgende dagelijkse digest staat gepland om " + "subscriptions.hour-help": "Voer het nummer in dat het uur representeerd waarop scheduled email digests worden verstuurd (bv. 0 voor middernacht, 17 voor 17:00). Neem er s.v.p. notie van dat dit het uur is van de server self, dit hoeft niet exact overeen te komen met de klok van uw systeem.
De tijd op de server is bij benadering:
De volgende dagelijkse digest staat gepland om ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/nl/admin/settings/guest.json b/public/language/nl/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/nl/admin/settings/guest.json +++ b/public/language/nl/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/nl/admin/settings/user.json b/public/language/nl/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/nl/admin/settings/user.json +++ b/public/language/nl/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/nl/flags.json b/public/language/nl/flags.json index c6cce94e4e..5d36245b74 100644 --- a/public/language/nl/flags.json +++ b/public/language/nl/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Rapporteer ongepaste content", + "modal-title": "Report Content", "modal-body": "Beschrijf de reden voor het markeren van %1 %2 voor review. Of gebruik een van de snelknoppen indien van toepassing.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Aanstootgevend", diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index bcd206b0d7..8b4465899d 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Ledentelling", "details.creation_date": "Aangemaakt op", "details.description": "Beschrijving", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Voorbeeld", "details.change_icon": "Wijzig icoon", "details.change_label_colour": "Wijzig labelkleur", diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json index 6f33e6b37e..6c77277819 100644 --- a/public/language/nl/notifications.json +++ b/public/language/nl/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Als een bericht wordt aangepast in een onderwerp dat je volgt", "notificationType_follow": "Als iemand begint met jou te volgen", "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-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", diff --git a/public/language/nl/register.json b/public/language/nl/register.json index 43a790a4d6..71a2bc0db5 100644 --- a/public/language/nl/register.json +++ b/public/language/nl/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Ik ga akkoord met de gebruiksvoorwaarden", "terms_of_use_error": "Je moet akkoord gaan met de service voorwaarden.", "registration-added-to-queue": "Het registratieverzoek is toegevoegd aan de wachtrij. Een bericht wordt naar het opgegeven emailadres gestuurd wanneer de registratie is goedgekeurd.", + "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.", "interstitial.intro": "Je hebben meer informatie van je nodig voordat we je account kunnen aanmaken.", "interstitial.errors-found": "Je konden jouw registratie niet afronden.", "gdpr_agree_data": "Ik geef toestemming voor het verzamelen en verwerken van mijn persoonlijke informatie op deze website.", diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json index 205eb899ce..48791248da 100644 --- a/public/language/nl/topic.json +++ b/public/language/nl/topic.json @@ -30,6 +30,7 @@ "locked": "Gesloten", "pinned": "Pinned", "moved": "Verplaatst", + "moved-from": "Moved from %1", "copy-ip": "Kopieer IP", "ban-ip": "Verban IP", "view-history": "Revisie geschiedenis", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 2b21641ef8..e1964d5720 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open uitgaande links naar een externe site in een nieuw tabblad", "enable_topic_searching": "Inschakelen mogelijkheid op onderwerp te kunnen zoeken", "topic_search_help": "Wanneer ingeschakeld zal de standaard zoekfunctie, met een aangepaste methode voor onderwerpen, overschreven worden", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Toon het nieuwe bericht na het plaatsen van een antwoord", "follow_topics_you_reply_to": "Ontvang meldingen van berichten waar je op hebt gereageerd", "follow_topics_you_create": "Ontvang meldingen van berichten die je hebt gemaakt", diff --git a/public/language/nl/users.json b/public/language/nl/users.json index 4254e637a4..c865741f31 100644 --- a/public/language/nl/users.json +++ b/public/language/nl/users.json @@ -11,6 +11,7 @@ "online-only": "Online ", "invite": "Uitnodigen", "prompt-email": "E-mails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Een uitnodiging email is verstuurd naar %1 ", "user_list": "Ledenlijst", "recent_topics": "Recente onderwerpen", diff --git a/public/language/pl/admin/extend/plugins.json b/public/language/pl/admin/extend/plugins.json index 34781b3ee4..a653d06c54 100644 --- a/public/language/pl/admin/extend/plugins.json +++ b/public/language/pl/admin/extend/plugins.json @@ -1,5 +1,5 @@ { - "trending": "Trending", + "trending": "O trendzie", "installed": "Zainstalowane", "active": "Aktywne", "inactive": "Nieaktywne", diff --git a/public/language/pl/admin/manage/privileges.json b/public/language/pl/admin/manage/privileges.json index f7f207b691..fa3530abac 100644 --- a/public/language/pl/admin/manage/privileges.json +++ b/public/language/pl/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Przesyłanie plików", "signature": "Dodanie sygnatury", "ban": "Banowanie", + "invite": "Invite", "search-content": "Szukanie treści", "search-users": "Szukanie użytkowników", "search-tags": "Szukanie tagów", @@ -49,5 +50,5 @@ "alert.confirm-copyToChildren": "Czy na pewno chcesz zastosować ten zbiór uprawnień dla wszystkich podkategorii?", "alert.confirm-copyToChildrenGroup": "Czy na pewno chcesz zastosować zbiór uprawnień tej grupy dla wszystkich podkategorii?", "alert.no-undo": "Tej czynności nie można cofnąć.", - "alert.admin-warning": "Administrators implicitly get all privileges" + "alert.admin-warning": "Administratorzy domyślnie otrzymują wszelkie uprawnienia" } \ 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 ea24368388..0d7bb6006b 100644 --- a/public/language/pl/admin/manage/users.json +++ b/public/language/pl/admin/manage/users.json @@ -20,9 +20,9 @@ "add-group": "Dodaj grupę", "invite": "Zaproś", "new": "Nowy użytkownik", - "filter-by": "Filter by", + "filter-by": "Filtruj po", "pills.unvalidated": "Niezweryfikowani", - "pills.validated": "Validated", + "pills.validated": "Zweryfikowano", "pills.banned": "Zbanowani", "50-per-page": "50 na stronę", diff --git a/public/language/pl/admin/menu.json b/public/language/pl/admin/menu.json index 656f1acb50..df26a3c686 100644 --- a/public/language/pl/admin/menu.json +++ b/public/language/pl/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Paginacja", "settings/tags": "Tagi", "settings/notifications": "Powiadomienia", + "settings/api": "Dostęp do API", "settings/sounds": "Dźwięki", "settings/social": "Społecznościowe", "settings/cookies": "Ciasteczka", @@ -70,7 +71,7 @@ "logout": "Wyloguj się", "view-forum": "Zobacz forum", - "search.placeholder": "Press "/" to search for settings", + "search.placeholder": "Naciśnij "/" aby wyszukać ustawienia", "search.no-results": "Brak wyników...", "search.search-forum": "Szukaj w forum ", "search.keep-typing": "Wpisz więcej, aby zobaczyć wyniki ...", diff --git a/public/language/pl/admin/settings/advanced.json b/public/language/pl/admin/settings/advanced.json index 9035af0e4e..62e71081ec 100644 --- a/public/language/pl/admin/settings/advanced.json +++ b/public/language/pl/admin/settings/advanced.json @@ -34,10 +34,10 @@ "sockets.default-placeholder": "Domyślnie: %1", "sockets.delay": "Opóźnienie ponownego łączenia", - "analytics.settings": "Analytics Settings", + "analytics.settings": "Ustawienia Analityki", "analytics.max-cache": "Analytics Cache Max Value", "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", - "compression.settings": "Compression Settings", - "compression.enable": "Enable Compression", + "compression.settings": "Ustawienia Kompresji", + "compression.enable": "Włącz Kompresję", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." } \ No newline at end of file diff --git a/public/language/pl/admin/settings/api.json b/public/language/pl/admin/settings/api.json index ba7d964a04..c0c9758870 100644 --- a/public/language/pl/admin/settings/api.json +++ b/public/language/pl/admin/settings/api.json @@ -1,12 +1,12 @@ { - "tokens": "Tokens", + "tokens": "Tokeny", "lead-text": "From this page you can configure access to the Write API in NodeBB.", "intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.", - "docs": "Click here to access the full API specification", + "docs": "Kliknij tutaj, aby zobaczyć pełną specyfikację API", - "uid": "User ID", + "uid": "ID Użytkownika", "uid-help-text": "Specify a User ID to associate with this token. If the user ID is 0, it will be considered a master token, which can assume the identity of other users based on the _uid parameter", - "description": "Description", - "no-description": "No description specified.", - "token-on-save": "Token will be generated once form is saved" + "description": "Opis", + "no-description": "Brak opisu.", + "token-on-save": "Token zostanie wygenerowany po zapisaniu formularza" } \ No newline at end of file diff --git a/public/language/pl/admin/settings/email.json b/public/language/pl/admin/settings/email.json index e3774d23a9..0133f3617a 100644 --- a/public/language/pl/admin/settings/email.json +++ b/public/language/pl/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Ten adres e-mail odbiorca zobaczy w polach „Od” i „Odpowiedz”.", "from": "Pole „Od”", "from-help": "Nazwa „Od” widoczna w e-mailach", - + "smtp-transport": "Transport SMTP", "smtp-transport.enabled": "Używaj zewnętrznego serwera e-mail do wysyłania e-maili.", "smtp-transport-help": "Możesz wybrać z listy dobrze znanych usług lub wskazać usługę niestandardową.", @@ -35,5 +35,7 @@ "subscriptions": "Podsumowania e-mail", "subscriptions.disable": "Wyłącz podsumowania e-maili", "subscriptions.hour": "Godzina podsumowania", - "subscriptions.hour-help": "Wprowadź liczbę odpowiadającą godzinie, o której mają być wysyłane regularne e-maile z podsumowaniem (np. 0 dla północy lub 17 dla 17:00). Pamiętaj, że godzina jest godziną serwera i nie musi zgadzać się z czasem lokalnym administratora. Przybliżony czas serwera to:
Wysłanie kolejnego e-maila z podsumowaniem zaplanowano na " + "subscriptions.hour-help": "Wprowadź liczbę odpowiadającą godzinie, o której mają być wysyłane regularne e-maile z podsumowaniem (np. 0 dla północy lub 17 dla 17:00). Pamiętaj, że godzina jest godziną serwera i nie musi zgadzać się z czasem lokalnym administratora. Przybliżony czas serwera to:
Wysłanie kolejnego e-maila z podsumowaniem zaplanowano na ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/pl/admin/settings/guest.json b/public/language/pl/admin/settings/guest.json index 4eb4da8a21..1584969a45 100644 --- a/public/language/pl/admin/settings/guest.json +++ b/public/language/pl/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Podpisywanie się gości", + "settings": "Settings", "handles.enabled": "Zezwalaj gościom na podpisywanie się", "handles.enabled-help": "Opcja ta udostępnia gościom nowe pole, w którym mogą wybrać nazwę, pod jaką będą publikować posty. Jeśli opcja jest wyłączona, stosowana będzie po prostu nazwa „Gość”", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/pl/admin/settings/user.json b/public/language/pl/admin/settings/user.json index e36fb72d5a..1a1e1388e8 100644 --- a/public/language/pl/admin/settings/user.json +++ b/public/language/pl/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Brak rejestracji", "registration-type.help": "Standardowa - Użytkownicy mogą się rejestrować na stronie /register.
\nTylko zaproszenia - Użytkownicy mogą zapraszać innych poprzez stronę users.
\nTylko zaproszenia administratora - Tylko administratorzy mogą zapraszać innych poprzez stronę users oraz admin/manage/users.
\nBrak rejestracji - Brak rejestracji użytkowników.
", "registration-approval-type.help": "Normalny - użytkownicy są rejestrowani natychmiast.
\nZatwierdzenie administratora - rejestracje użytkowników są umieszczane w kolejce zatwierdzania dla administratorów.
\n Kolejka zatwierdzania dla IPs - Normalne dla nowych użytkowników, kolejka zatwierdzania dla adresów IP, które już mają konto.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maksymalnie liczba zaproszeń na użytkownika", "max-invites": "Maksymalnie liczba zaproszeń na użytkownika", "max-invites-help": "0 dla braku ograniczeń. Administratorzy otrzymują nieskończoną liczbę zaproszeń
Aplikowane tylko dla \"Tylko zaproszeni\"", @@ -62,6 +65,7 @@ "restrict-chat": "Przyjmuj wiadomości na czacie tylko od osób, które obserwuję", "outgoing-new-tab": "Otwieraj odnośniki wychodzące na nowej karcie", "topic-search": "Włącz wyszukiwanie wewnątrz tematów", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Podsumowania - tryb", "digest-freq.off": "Wyłączone", "digest-freq.daily": "Dzienny ", diff --git a/public/language/pl/flags.json b/public/language/pl/flags.json index cc69a02ec9..241896eb4d 100644 --- a/public/language/pl/flags.json +++ b/public/language/pl/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Zgłoś niewłaściwe treści", + "modal-title": "Report Content", "modal-body": "Wskaż powód oflagowania i zgłoszenia %1 %2 do oceny. Jeśli to możliwe, użyj jednego z przycisków szybkiego zgłoszenia.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Treści obraźliwe", diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json index e0569382ae..3f0b17db0e 100644 --- a/public/language/pl/groups.json +++ b/public/language/pl/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Liczba Członków", "details.creation_date": "Data Utworzenia", "details.description": "Opis", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Podgląd etykiety", "details.change_icon": "Zmień ikonę", "details.change_label_colour": "Zmień kolor etykiety", diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json index 5ff19a59a7..ae37815cc8 100644 --- a/public/language/pl/notifications.json +++ b/public/language/pl/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Kiedy post jest edytowany w temacie, który obserwujesz", "notificationType_follow": "Kiedy ktoś zacznie Cię obserwować", "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-request-membership": "Kiedy ktoś prosi o dołączenie do grupy, którą posiadasz", "notificationType_new-register": "Kiedy ktoś zostaje dodany do kolejki rejestracyjnej", diff --git a/public/language/pl/register.json b/public/language/pl/register.json index 26e505026d..fad5540645 100644 --- a/public/language/pl/register.json +++ b/public/language/pl/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Zgadzam się na powyższe warunki", "terms_of_use_error": "Musisz zaakceptować warunki korzystania z serwisu", "registration-added-to-queue": "Twoja rejestracja została dodana do kolejki oczekujących na akceptację. Otrzymasz e-mail, kiedy zostanie zatwierdzona przez administratora.", + "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.", "interstitial.intro": "Do utworzenia Twojego konta potrzebne są dodatkowe informacje.", "interstitial.errors-found": "Nie mogliśmy ukończyć procesu rejestracji:", "gdpr_agree_data": "Wyrażam zgodę na zbieranie i przetwarzanie moich danych przez tę stronę.", diff --git a/public/language/pl/topic.json b/public/language/pl/topic.json index 682131652c..57f5ee1a1e 100644 --- a/public/language/pl/topic.json +++ b/public/language/pl/topic.json @@ -30,6 +30,7 @@ "locked": "Zablokowany", "pinned": "Przypięty", "moved": "Przeniesiony", + "moved-from": "Moved from %1", "copy-ip": "Kopiuj IP", "ban-ip": "Blokuj IP", "view-history": "Historia edycji", diff --git a/public/language/pl/user.json b/public/language/pl/user.json index 1e715c3070..a985d09d42 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Otwieraj odnośniki wychodzące w nowej karcie", "enable_topic_searching": "Włącz szukanie w temacie", "topic_search_help": "Zaznacz, jeśli chcesz, by wyszukiwanie w temacie zastąpiło przeszukiwanie strony poprzez przeglądarkę, a tym samym umożliwiło przeszukiwanie całego tematu, a nie tylko treści aktualnie wyświetlanych na ekranie", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Wyświetl nowy post po zamieszczeniu odpowiedzi", "follow_topics_you_reply_to": "Obserwuj tematy, w których uczestniczysz", "follow_topics_you_create": "Obserwuj tematy, które utworzyłeś", diff --git a/public/language/pl/users.json b/public/language/pl/users.json index a7d103bcfc..693ba9d3c3 100644 --- a/public/language/pl/users.json +++ b/public/language/pl/users.json @@ -11,6 +11,7 @@ "online-only": "Tylko online", "invite": "Zaproś", "prompt-email": "Adresy e-mail:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "E-mail z zaproszeniem został wysłany do %1", "user_list": "Lista użytkowników", "recent_topics": "Ostatnie tematy", diff --git a/public/language/pt-BR/admin/manage/privileges.json b/public/language/pt-BR/admin/manage/privileges.json index 88e21535d6..a54d8b9712 100644 --- a/public/language/pt-BR/admin/manage/privileges.json +++ b/public/language/pt-BR/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Enviar Arquivos", "signature": "Assinatura", "ban": "Banir", + "invite": "Invite", "search-content": "Pesquisar Conteúdo", "search-users": "Pesquisar Usuários", "search-tags": "Pesquisar Tags", diff --git a/public/language/pt-BR/admin/menu.json b/public/language/pt-BR/admin/menu.json index dce0ca5d23..d5f6d2ef73 100644 --- a/public/language/pt-BR/admin/menu.json +++ b/public/language/pt-BR/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Paginação", "settings/tags": "Tags", "settings/notifications": "Notificações", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/pt-BR/admin/settings/email.json b/public/language/pt-BR/admin/settings/email.json index edeef89aa4..6d233e6dfd 100644 --- a/public/language/pt-BR/admin/settings/email.json +++ b/public/language/pt-BR/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "O seguinte endereço de e-mail se refere ao e-mail que o destinatário verá nos campos \"De\" e \"Responder Para\".", "from": "Por Nome (From)", "from-help": "O nome que será mostrado em \"De\" no e-mail.", - + "smtp-transport": "Trasporte por SMTP", "smtp-transport.enabled": "Utilizar um servidor de e-mail externo para enviar e-mails", "smtp-transport-help": "Você pode escolher entre uma lista de serviços conhecidos ou adicionar um personalizado.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Hora de Envio dos Resumos", - "subscriptions.hour-help": "Por favor, entre um número representando a hora para enviar os resumos agendados via e-mail (por exemplo: 0 para meia-noite, 17 para 5:00pm). Tenha em mente que esta é a hora de acordo com o servidor e pode não combinar exatamente com o relógio do seu sistema.
O horário aproximado do servidor é:
O próximo resumo diário está agendado para ser enviado " + "subscriptions.hour-help": "Por favor, entre um número representando a hora para enviar os resumos agendados via e-mail (por exemplo: 0 para meia-noite, 17 para 5:00pm). Tenha em mente que esta é a hora de acordo com o servidor e pode não combinar exatamente com o relógio do seu sistema.
O horário aproximado do servidor é:
O próximo resumo diário está agendado para ser enviado ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/guest.json b/public/language/pt-BR/admin/settings/guest.json index 09422d5b18..84e3098de0 100644 --- a/public/language/pt-BR/admin/settings/guest.json +++ b/public/language/pt-BR/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Nome para Visitantes", + "settings": "Settings", "handles.enabled": "Permitir que visitantes escolham um nome", "handles.enabled-help": "Esta opção mostra um novo campo que permite visitantes de escolher um nome para associar a cada post que eles fizerem. Se desabilitado, eles serão simplesmente chamados de \"Visitante\".", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/user.json b/public/language/pt-BR/admin/settings/user.json index 0f68d83c52..5882ca355b 100644 --- a/public/language/pt-BR/admin/settings/user.json +++ b/public/language/pt-BR/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Desativar registros", "registration-type.help": "Normal - Usuários podem se registrar pela página /register.
\nApenas Convite - Usuários podem convidar outros da página usuários.
\nApenas Convite do Administrador - Apenas administradores podem convidar das páginas de usuários e administração/administrar/usuários .
\nSem registro - Sem registro de usuários.
", "registration-approval-type.help": "Normal - Usuários são registrados imediatamente.
\nAprovação do Admin - Registros de usuários são colocados em uma fila de aprovação por administradores.
\nAprovação do Admin por IPs - Normal para novos usuários, Aprovação do Admin por endereços IPs que já têm uma conta.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Máximo de Convites por Usuário", "max-invites": "Máximo de Convites por Usuário", "max-invites-help": "0 para nenhuma restrição. Administradores têm convites infinitos.
Apenas aplicável para \"Apenas por Convite\".", @@ -62,6 +65,7 @@ "restrict-chat": "Permitir apenas mensagens de chat de usuários que eu sigo", "outgoing-new-tab": "Abrir links externos em nova aba", "topic-search": "Permitir Busca dentro do Tópico", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Habilitar o recebimento de Resumos", "digest-freq.off": "Desligado", "digest-freq.daily": "Diário", diff --git a/public/language/pt-BR/flags.json b/public/language/pt-BR/flags.json index 0dff281db8..1bb5fc5a31 100644 --- a/public/language/pt-BR/flags.json +++ b/public/language/pt-BR/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Reportar Conteúdo Inadequado", + "modal-title": "Report Content", "modal-body": "Por favor, especifique a razão pela qual você está sinalizando %1 %2 para a revisão. Alternativamente, use um dos botões de reporte rápido se for aplicável.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", diff --git a/public/language/pt-BR/groups.json b/public/language/pt-BR/groups.json index 14bb379505..107ba7e215 100644 --- a/public/language/pt-BR/groups.json +++ b/public/language/pt-BR/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Número de Membros", "details.creation_date": "Data de Criação", "details.description": "Descrição", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Visualização do Distintivo", "details.change_icon": "Mudar Ícone", "details.change_label_colour": "Alterar Cor do Rótulo", diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json index d9fc33c48a..c06ba4e7ca 100644 --- a/public/language/pt-BR/notifications.json +++ b/public/language/pt-BR/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Quando alguém começar a seguir você", "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-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", diff --git a/public/language/pt-BR/register.json b/public/language/pt-BR/register.json index 6363ee283a..40609f5cea 100644 --- a/public/language/pt-BR/register.json +++ b/public/language/pt-BR/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Eu concordo com os Termos de Uso", "terms_of_use_error": "Você deve concordar com os Termos de Uso", "registration-added-to-queue": "O seu cadastro foi adicionado à fila de aprovação. Você receberá um email quando ele for aceito por um administrador.", + "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.", "interstitial.intro": "Precisamos de algumas informações adicionais antes de podermos criar sua conta.", "interstitial.errors-found": "Não foi possível concluir o seu cadastro:", "gdpr_agree_data": "Eu concordo com a coleta e o processamento de minhas informações pessoais neste site.", diff --git a/public/language/pt-BR/topic.json b/public/language/pt-BR/topic.json index 9e5b448a82..7ae84e2309 100644 --- a/public/language/pt-BR/topic.json +++ b/public/language/pt-BR/topic.json @@ -30,6 +30,7 @@ "locked": "Trancado", "pinned": "Fixado", "moved": "Movido", + "moved-from": "Moved from %1", "copy-ip": "Copiar IP", "ban-ip": "Banir IP", "view-history": "Histórico de Edição", diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index 049844ab4d..07f4736c03 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Abrir links externos em nova aba", "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro do tópico irá substituir a pesquisa padrão do seu navegador. Assim, você poderá pesquisar pelo tópico inteiro, e não apenas pelo o que está sendo exibido na tela.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Ao responder um tópico, role a página até a minha postagem", "follow_topics_you_reply_to": "Acompanhar os tópicos que você responde", "follow_topics_you_create": "Acompanhar os tópicos que você cria", diff --git a/public/language/pt-BR/users.json b/public/language/pt-BR/users.json index b7ff2950b4..ceef5faffa 100644 --- a/public/language/pt-BR/users.json +++ b/public/language/pt-BR/users.json @@ -11,6 +11,7 @@ "online-only": "Apenas Online", "invite": "Convidar", "prompt-email": "E-mails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Um email de convite foi enviado para %1", "user_list": "Lista de Usuários", "recent_topics": "Tópicos Recentes", diff --git a/public/language/pt-PT/admin/manage/privileges.json b/public/language/pt-PT/admin/manage/privileges.json index 735b781104..81e7ad9634 100644 --- a/public/language/pt-PT/admin/manage/privileges.json +++ b/public/language/pt-PT/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Enviar Ficheiros", "signature": "Assinatura", "ban": "Banir", + "invite": "Invite", "search-content": "Procurar Conteúdo", "search-users": "Procurar Utilizadores", "search-tags": "Procurar Marcadores", diff --git a/public/language/pt-PT/admin/menu.json b/public/language/pt-PT/admin/menu.json index c28a621759..f2eaa7e52a 100644 --- a/public/language/pt-PT/admin/menu.json +++ b/public/language/pt-PT/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Paginação", "settings/tags": "Marcadores", "settings/notifications": "Notificações", + "settings/api": "API Access", "settings/sounds": "Sons", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/pt-PT/admin/settings/email.json b/public/language/pt-PT/admin/settings/email.json index 9a4d43bb02..8917a8ea07 100644 --- a/public/language/pt-PT/admin/settings/email.json +++ b/public/language/pt-PT/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Resumos por E-mail", "subscriptions.disable": "Desativar resumos por e-mail", "subscriptions.hour": "Hora do Resumo", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/settings/guest.json b/public/language/pt-PT/admin/settings/guest.json index d2e42cbedd..af3d498e80 100644 --- a/public/language/pt-PT/admin/settings/guest.json +++ b/public/language/pt-PT/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Nomes para visitantes", + "settings": "Settings", "handles.enabled": "Permitir nomes para visitantes", "handles.enabled-help": "Esta opção expôe um novo campo que permite a visitantes escolher um nome para associar a cada publicação que eles criem. Se desabilitada, eles simplesmente se chamarão \"Visitante\" ", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/settings/user.json b/public/language/pt-PT/admin/settings/user.json index a380cc51d3..33edff1b13 100644 --- a/public/language/pt-PT/admin/settings/user.json +++ b/public/language/pt-PT/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Sem registo", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Máximo de Convites por Utilizador", "max-invites": "Máximo de Convites por Utilizador", "max-invites-help": "Usa 0 para nenhuma restrição. Administradores têm convites infinitos.
Apenas aplicável quando selecionado \"Apenas por Convite\"", @@ -62,6 +65,7 @@ "restrict-chat": "Apenas permitir mensagens de utilizadores que eu sigo", "outgoing-new-tab": "Abrir links externos num novo separador", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscrever o Resumo", "digest-freq.off": "Desligado", "digest-freq.daily": "Diariamente ", diff --git a/public/language/pt-PT/flags.json b/public/language/pt-PT/flags.json index 87b36c6847..3f22c5b2c2 100644 --- a/public/language/pt-PT/flags.json +++ b/public/language/pt-PT/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Denunciar Conteúdo Impróprio", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Ofensivo", diff --git a/public/language/pt-PT/groups.json b/public/language/pt-PT/groups.json index f506d2837e..77bfbdd44b 100644 --- a/public/language/pt-PT/groups.json +++ b/public/language/pt-PT/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Quantidade de membros", "details.creation_date": "Data de criação", "details.description": "Descrição", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Pré-visualização do crachá", "details.change_icon": "Alterar o Ícone", "details.change_label_colour": "Alterar Cor da Etiqueta", diff --git a/public/language/pt-PT/notifications.json b/public/language/pt-PT/notifications.json index ed1b911ef8..cda956aa54 100644 --- a/public/language/pt-PT/notifications.json +++ b/public/language/pt-PT/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Quando uma publicação é editada num tópico que estás a seguir", "notificationType_follow": "Quando alguém começa a seguir-te", "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-request-membership": "Quando alguém pede para entrar num grupo que é teu", "notificationType_new-register": "Quando alguém é adicionado à fila de espera de registo", diff --git a/public/language/pt-PT/register.json b/public/language/pt-PT/register.json index d751416bb0..6ee0d02945 100644 --- a/public/language/pt-PT/register.json +++ b/public/language/pt-PT/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Eu aceito os Termos de Utilização", "terms_of_use_error": "Deves aceitar os Termos de Utilização", "registration-added-to-queue": "O teu registo foi adicionado à fila de aprovação. Receberás um e-mail quando fores aceite por um administrador.", + "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.", "interstitial.intro": "Requeremos informação adicional antes de criarmos a tua conta.", "interstitial.errors-found": "Não pudemos completar o teu registro:", "gdpr_agree_data": "Autorizo a recolha e o processamento das minhas informações pessoais neste website.", diff --git a/public/language/pt-PT/topic.json b/public/language/pt-PT/topic.json index 8ea32d45f9..7599763939 100644 --- a/public/language/pt-PT/topic.json +++ b/public/language/pt-PT/topic.json @@ -30,6 +30,7 @@ "locked": "Bloqueado", "pinned": "Afixado", "moved": "Movido", + "moved-from": "Moved from %1", "copy-ip": "Copiar IP", "ban-ip": "Banir IP", "view-history": "Histórico de Edição", diff --git a/public/language/pt-PT/user.json b/public/language/pt-PT/user.json index 1efd397e68..0ef645e6cf 100644 --- a/public/language/pt-PT/user.json +++ b/public/language/pt-PT/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Abrir links externos num novo separador", "enable_topic_searching": "Permitir pesquisa dentro dos tópicos", "topic_search_help": "Se ativada, a pesquisa dentro de tópicos irá sobrepor-se ao comportamento normal de pesquisa do browser pré-definido e irá permitir-te pesquisar ao longo de todo o tópico, em vez de pesquisar somente no que é mostrado no ecrã", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Depois de publicar uma resposta, mostrar a nova publicação", "follow_topics_you_reply_to": "Visualizar tópicos aos quais respondeste", "follow_topics_you_create": "Visualizar tópicos que criaste", diff --git a/public/language/pt-PT/users.json b/public/language/pt-PT/users.json index abbbdb59d2..d4dabc760b 100644 --- a/public/language/pt-PT/users.json +++ b/public/language/pt-PT/users.json @@ -11,6 +11,7 @@ "online-only": "Só online", "invite": "Convidar", "prompt-email": "E-mails", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Foi enviado um e-mail de convite para %1", "user_list": "Lista de utilizadores", "recent_topics": "Tópicos recentes", diff --git a/public/language/ro/admin/manage/privileges.json b/public/language/ro/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/ro/admin/manage/privileges.json +++ b/public/language/ro/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/ro/admin/menu.json b/public/language/ro/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/ro/admin/menu.json +++ b/public/language/ro/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/ro/admin/settings/email.json b/public/language/ro/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/ro/admin/settings/email.json +++ b/public/language/ro/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/ro/admin/settings/guest.json b/public/language/ro/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/ro/admin/settings/guest.json +++ b/public/language/ro/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/ro/admin/settings/user.json b/public/language/ro/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/ro/admin/settings/user.json +++ b/public/language/ro/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/ro/flags.json b/public/language/ro/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/ro/flags.json +++ b/public/language/ro/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/ro/groups.json b/public/language/ro/groups.json index 245c58160e..7f03bf06da 100644 --- a/public/language/ro/groups.json +++ b/public/language/ro/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Număr de membrii", "details.creation_date": "Data creării", "details.description": "Descriere", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Previzualizarea insignei", "details.change_icon": "Schimbă icoana", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/ro/notifications.json b/public/language/ro/notifications.json index 10008327aa..175ee9c7e2 100644 --- a/public/language/ro/notifications.json +++ b/public/language/ro/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/ro/register.json b/public/language/ro/register.json index ca1ed4eac4..d7ed0050ed 100644 --- a/public/language/ro/register.json +++ b/public/language/ro/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Sunt de acord cu termenii de utilizare", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/ro/topic.json b/public/language/ro/topic.json index c7ecedf806..dd1844b7b4 100644 --- a/public/language/ro/topic.json +++ b/public/language/ro/topic.json @@ -30,6 +30,7 @@ "locked": "Închis", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 492b6d8b38..b7c643cad0 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/ro/users.json b/public/language/ro/users.json index 39460311e9..cecbe5971e 100644 --- a/public/language/ro/users.json +++ b/public/language/ro/users.json @@ -11,6 +11,7 @@ "online-only": "Numai online", "invite": "Invită", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Un email de invitație s-a trimis la %1", "user_list": "Listă utilizatori", "recent_topics": "Subiecte Noi", diff --git a/public/language/ru/admin/manage/privileges.json b/public/language/ru/admin/manage/privileges.json index 699bb32ee4..556d5cce86 100644 --- a/public/language/ru/admin/manage/privileges.json +++ b/public/language/ru/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Загрузка файлов", "signature": "Подпись", "ban": "Блокировка пользователей", + "invite": "Invite", "search-content": "Поиск по содержимому", "search-users": "Поиск пользователей", "search-tags": "Поиск меток", diff --git a/public/language/ru/admin/menu.json b/public/language/ru/admin/menu.json index f08ad053f2..afdb61a8ef 100644 --- a/public/language/ru/admin/menu.json +++ b/public/language/ru/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Пагинация", "settings/tags": "Метки", "settings/notifications": "Уведомления", + "settings/api": "API Access", "settings/sounds": "Звуки", "settings/social": "Шэринг", "settings/cookies": "Куки", diff --git a/public/language/ru/admin/settings/email.json b/public/language/ru/admin/settings/email.json index 805e300208..acdad4c0ed 100644 --- a/public/language/ru/admin/settings/email.json +++ b/public/language/ru/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Этот адрес получатели писем увидят в полях «От кого» и «Ответить».", "from": "От кого", "from-help": "Имя отправителя письма (или название форума).", - + "smtp-transport": "Сервис SMTP", "smtp-transport.enabled": "Использовать сторонний сервис для рассылки писем", "smtp-transport-help": "Выберите один из популярных сервисов или укажите свой почтовый сервер.", @@ -35,5 +35,7 @@ "subscriptions": "Новостные рассылки", "subscriptions.disable": "Отключить новостные рассылки", "subscriptions.hour": "Час отправки", - "subscriptions.hour-help": "Введите число, соответствующее номеру часа (например, 0 для полуночи, 17 для 17:00). Имейте в виду, что время определяется по часовому поясу сервера.
Текущее время сервера:
Следующая рассылка запланирована на " + "subscriptions.hour-help": "Введите число, соответствующее номеру часа (например, 0 для полуночи, 17 для 17:00). Имейте в виду, что время определяется по часовому поясу сервера.
Текущее время сервера:
Следующая рассылка запланирована на ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/guest.json b/public/language/ru/admin/settings/guest.json index 94d34bf6d6..4245f4eec1 100644 --- a/public/language/ru/admin/settings/guest.json +++ b/public/language/ru/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Имена гостей", + "settings": "Settings", "handles.enabled": "Разрешить гостям выбирать имена", "handles.enabled-help": "Эта настройка добавляет поле, в котором гость сможет указать имя, под которым он хочет оставить сообщение. Когда она выключена, вместо имени будет написано просто «Гость».", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/user.json b/public/language/ru/admin/settings/user.json index 5fb984be8c..11a91f4fd3 100644 --- a/public/language/ru/admin/settings/user.json +++ b/public/language/ru/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Регистрация отключена", "registration-type.help": "Обычный – пользователи могут регистрироваться без ограничений.
\nТолько по приглашениям – существующие пользователи могут приглашать других участников
\nТолько по приглашению администратора – только администратор может приглашать пользователей на странице Пользователи или в панели администратора.
\nРегистрация отключена – пользователи не могут регистрироваться.
", "registration-approval-type.help": "Обычный – регистрация подтверждается автоматически.
\nПодтверждается администратором – заявки на регистрацию помещаются в очередь на одобрение.
\nПодтверждается администратором для известных IP-адресов – новые пользователи регистрируются как обычно, но если заявка поступает с такого же IP, как у существующего пользователя, требуется подтверждение администратора.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Макс. приглашений у пользователя", "max-invites": "Макс. приглашений у пользователя", "max-invites-help": "0 – без ограничений. Администраторы в любом случае могут приглашать бесконечно
Эта настройка действует только в режиме регистрации только по приглашениям.", @@ -62,6 +65,7 @@ "restrict-chat": "Разрешить чат только с теми, на кого подписаны", "outgoing-new-tab": "Открывать внешние ссылки в новой вкладке", "topic-search": "Включить поиск по сообщениям внутри тем", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Подписка на дайджест", "digest-freq.off": "Отключена", "digest-freq.daily": "Ежедневная", diff --git a/public/language/ru/flags.json b/public/language/ru/flags.json index d14a6d21b3..25aa9ffb02 100644 --- a/public/language/ru/flags.json +++ b/public/language/ru/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Сообщить о недопустимом контенте", + "modal-title": "Report Content", "modal-body": "Укажите причину для жалобы на %1 %2. Вы можете использовать одну из подходящих стандартных причин.", "modal-reason-spam": "Спам", "modal-reason-offensive": "Оскорбительное содержимое", diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index e136d830c1..c7ac40be51 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Количество участников", "details.creation_date": "Дата создания", "details.description": "Описание", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Предпросмотр значка", "details.change_icon": "Сменить иконку", "details.change_label_colour": "Изменить цвет ярлыка", diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json index 98be01de19..a8a05f48a9 100644 --- a/public/language/ru/notifications.json +++ b/public/language/ru/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Когда сообщение было отредактировано в теме, на которую вы подписаны", "notificationType_follow": "Когда кто-то подписался на вас", "notificationType_new-chat": "Когда вы получаете сообщение в чат", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "Когда вы получаете приглашение в группу", "notificationType_group-request-membership": "Когда кто-то хочет присоединиться к группе, которой вы управляете", "notificationType_new-register": "Когда в очереди на регистрацию появляется новый пользователь", diff --git a/public/language/ru/register.json b/public/language/ru/register.json index 8e8d3c0ea7..c929e75b68 100644 --- a/public/language/ru/register.json +++ b/public/language/ru/register.json @@ -18,6 +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.", "interstitial.intro": "Нам потребуется дополнительная информация, прежде чем мы сможем создать вашу учётную запись.", "interstitial.errors-found": "Мы не смогли завершить регистрацию:", "gdpr_agree_data": "Я соглашаюсь на сбор и обработку моей личной информации на этом веб-сайте.", diff --git a/public/language/ru/topic.json b/public/language/ru/topic.json index 32c4174e35..40f5bd5934 100644 --- a/public/language/ru/topic.json +++ b/public/language/ru/topic.json @@ -30,6 +30,7 @@ "locked": "Закрыта", "pinned": "Прикреплена", "moved": "Перенесена", + "moved-from": "Moved from %1", "copy-ip": "Копировать IP", "ban-ip": "Забанить IP", "view-history": "История правок", diff --git a/public/language/ru/user.json b/public/language/ru/user.json index b23955ba18..920738234f 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Открывать внешние ссылки в новом окне", "enable_topic_searching": "Включить поиск по сообщениям внутри тем", "topic_search_help": "Когда эта опция включена, вместо стандартного поиска по странице ваш браузер будет использовать соответствующую функцию форума, которая позволит искать и среди сообщений, которые ещё не загружены.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Пролистывать страницы к вашим новым сообщениям сразу после их отправки", "follow_topics_you_reply_to": "Включать отслеживание во всех темах, в которых вы отвечаете", "follow_topics_you_create": "Включать отслеживание всех тем, которые вы создаёте", diff --git a/public/language/ru/users.json b/public/language/ru/users.json index 09670a5481..f924e5ac84 100644 --- a/public/language/ru/users.json +++ b/public/language/ru/users.json @@ -11,6 +11,7 @@ "online-only": "Только онлайн", "invite": "Пригласить", "prompt-email": "Адреса электронной почты:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Письмо с приглашением для %1 отправлено", "user_list": "Список пользователей", "recent_topics": "Последние темы", diff --git a/public/language/rw/admin/manage/privileges.json b/public/language/rw/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/rw/admin/manage/privileges.json +++ b/public/language/rw/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/rw/admin/menu.json b/public/language/rw/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/rw/admin/menu.json +++ b/public/language/rw/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/rw/admin/settings/email.json b/public/language/rw/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/rw/admin/settings/email.json +++ b/public/language/rw/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/rw/admin/settings/guest.json b/public/language/rw/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/rw/admin/settings/guest.json +++ b/public/language/rw/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/rw/admin/settings/user.json b/public/language/rw/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/rw/admin/settings/user.json +++ b/public/language/rw/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/rw/flags.json b/public/language/rw/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/rw/flags.json +++ b/public/language/rw/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json index cd3537025f..eec9571922 100644 --- a/public/language/rw/groups.json +++ b/public/language/rw/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Umubare w'Abagize Itsinda", "details.creation_date": "Igihe Ryaremewe", "details.description": "Ibiriranga", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Ibisobanuro ku Kirango", "details.change_icon": "Hindura Akarango", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json index 466d7cef9d..fc6ea70cf4 100644 --- a/public/language/rw/notifications.json +++ b/public/language/rw/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/rw/register.json b/public/language/rw/register.json index f8c4d9aaa8..70a7f949f6 100644 --- a/public/language/rw/register.json +++ b/public/language/rw/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Nzakurikiza Amategeko n'Amabwiriza", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Icyifuzo cy'iyandikwa ryawe cyakiriwe ariko gitegereje isuzuma. Uzabimenyeshwa biciye muri email niba ubuyobozi bwakwemereye kwandikwa. ", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json index 4459286859..fb15f3a347 100644 --- a/public/language/rw/topic.json +++ b/public/language/rw/topic.json @@ -30,6 +30,7 @@ "locked": "Birafungiranye", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/rw/user.json b/public/language/rw/user.json index 13809638fb..6f406dece7 100644 --- a/public/language/rw/user.json +++ b/public/language/rw/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Fungurira imirongo ijya hanze mu idirishya rishya", "enable_topic_searching": "Emerera Ugushakira mu Kiganiro", "topic_search_help": "Nibyemerwa, ugushakira mu kiganiro bizajya biba ari byo bikorwa maze bitume umuntu abasha gushakira mu kiganiro hose aho gushakira kuri paji igaragarira amaso, imbere yawe gusa", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Nyuma yo gushyiraho igisubizo, hagaragare icyashyizweho gishya", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/rw/users.json b/public/language/rw/users.json index b6448a0e79..b79a5b75a4 100644 --- a/public/language/rw/users.json +++ b/public/language/rw/users.json @@ -11,6 +11,7 @@ "online-only": "Abari ku murongo gusa", "invite": "Tumira", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Ubutumire bwa email bwohererejwe %1", "user_list": "Urutonde rw'Abantu", "recent_topics": "Ibiganiro Biheruka", diff --git a/public/language/sc/admin/manage/privileges.json b/public/language/sc/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/sc/admin/manage/privileges.json +++ b/public/language/sc/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/sc/admin/menu.json b/public/language/sc/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/sc/admin/menu.json +++ b/public/language/sc/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/sc/admin/settings/email.json b/public/language/sc/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/sc/admin/settings/email.json +++ b/public/language/sc/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/sc/admin/settings/guest.json b/public/language/sc/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/sc/admin/settings/guest.json +++ b/public/language/sc/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/sc/admin/settings/user.json b/public/language/sc/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/sc/admin/settings/user.json +++ b/public/language/sc/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/sc/flags.json b/public/language/sc/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/sc/flags.json +++ b/public/language/sc/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/sc/groups.json b/public/language/sc/groups.json index 132200d213..ff52b35c08 100644 --- a/public/language/sc/groups.json +++ b/public/language/sc/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Member Count", "details.creation_date": "Creation Date", "details.description": "Description", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Badge Preview", "details.change_icon": "Change Icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/sc/notifications.json b/public/language/sc/notifications.json index e80a740a95..590e3aeb62 100644 --- a/public/language/sc/notifications.json +++ b/public/language/sc/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/sc/register.json b/public/language/sc/register.json index ace93cd271..aae9890c96 100644 --- a/public/language/sc/register.json +++ b/public/language/sc/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "So de acòrdiu cun is Tèrmines de Impreu", "terms_of_use_error": "You must agree to the Terms of Use", "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", + "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.", "interstitial.intro": "We require some additional information before we can create your account.", "interstitial.errors-found": "We could not complete your registration:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/sc/topic.json b/public/language/sc/topic.json index f362bdf565..9c4fd5ce6d 100644 --- a/public/language/sc/topic.json +++ b/public/language/sc/topic.json @@ -30,6 +30,7 @@ "locked": "Locked", "pinned": "Pinned", "moved": "Moved", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/sc/user.json b/public/language/sc/user.json index 6d0aa1eb09..f12f7f0100 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/sc/users.json b/public/language/sc/users.json index 12435abb9c..fc7da3fa35 100644 --- a/public/language/sc/users.json +++ b/public/language/sc/users.json @@ -11,6 +11,7 @@ "online-only": "Online only", "invite": "Invite", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "An invitation email has been sent to %1", "user_list": "User List", "recent_topics": "Recent Topics", diff --git a/public/language/sk/admin/manage/privileges.json b/public/language/sk/admin/manage/privileges.json index e97715d9ab..45f4974589 100644 --- a/public/language/sk/admin/manage/privileges.json +++ b/public/language/sk/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Nahrať súbory", "signature": "Podpis", "ban": "Zablokovať", + "invite": "Invite", "search-content": "Vyhľadať obsah", "search-users": "Vyhľadať používateľov", "search-tags": "Vyhľadať značky", diff --git a/public/language/sk/admin/menu.json b/public/language/sk/admin/menu.json index cd6f339da9..563c930e55 100644 --- a/public/language/sk/admin/menu.json +++ b/public/language/sk/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Stránkovanie", "settings/tags": "Značky", "settings/notifications": "Oznámenia", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Coockie", diff --git a/public/language/sk/admin/settings/email.json b/public/language/sk/admin/settings/email.json index ed440bb848..35fc262867 100644 --- a/public/language/sk/admin/settings/email.json +++ b/public/language/sk/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Nasledujúce e-mailové adresy budú zobrazené príjemcovi v políčkach 'Od' a 'Odpovedať'.", "from": "Meno - od", "from-help": "Zobrazené meno v e-maily v - Od", - + "smtp-transport": "Prenos SMTP", "smtp-transport.enabled": "Pre odosielanie e-mailov použiť externý e-mailový server", "smtp-transport-help": "Zo zoznamu môžete vybrať známe služby alebo zadať vlastné.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/sk/admin/settings/guest.json b/public/language/sk/admin/settings/guest.json index bd342391fb..760cd59c8b 100644 --- a/public/language/sk/admin/settings/guest.json +++ b/public/language/sk/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Zaobchádzanie s hosťami", + "settings": "Settings", "handles.enabled": "Povoliť upravovanie zaobchádzania s hosťami", "handles.enabled-help": "Táto možnosť odkryje nové pole, ktoré umožňuje hosťom vybrať meno, ktoré sa pripojí ku každému príspevku, ktorý vytvorí. Ak bude zakázané, budú jednoducho nazývaní 'Hosť'", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/sk/admin/settings/user.json b/public/language/sk/admin/settings/user.json index 5450ec2d0d..7c4d0a5c1e 100644 --- a/public/language/sk/admin/settings/user.json +++ b/public/language/sk/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Bez registrácie", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximálny počet pozvánok na používateľa", "max-invites": "Maximálny počet pozvánok na používateľa", "max-invites-help": "0 pre neobmedzené. Správcovia majú neobmedzene pozvánky
Použiteľné iba pre „Iba pozvané“", @@ -62,6 +65,7 @@ "restrict-chat": "Povoliť správy konverzácie iba od používateľov, ktorých sledujem", "outgoing-new-tab": "Otvoriť odchádzajúce odkazy v novom liste", "topic-search": "Povoliť vyhľadávanie v témach", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Prihlásiť k prehľadu", "digest-freq.off": "Vypnuté", "digest-freq.daily": "Denne", diff --git a/public/language/sk/flags.json b/public/language/sk/flags.json index bf24b2dfa8..f328f60e18 100644 --- a/public/language/sk/flags.json +++ b/public/language/sk/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Nahlásiť nevhodný obsah", + "modal-title": "Report Content", "modal-body": "Zadajte dôvod, pre ktorý chcete označiť %1 %2 na kontrolu. Prípadne použite jedno z tlačidiel rýchleho hlásenia, ak je to vhodné.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Urážlivý", diff --git a/public/language/sk/groups.json b/public/language/sk/groups.json index defc8cdad5..01e407c012 100644 --- a/public/language/sk/groups.json +++ b/public/language/sk/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Počet členov", "details.creation_date": "Dátum vytvorenia", "details.description": "Popis", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Náhľad odznaku", "details.change_icon": "Zmeniť ikonu", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json index 04d86ca116..ef9f509cff 100644 --- a/public/language/sk/notifications.json +++ b/public/language/sk/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Ak Vás začne niekto sledovať", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "Ak bude niekto pridaný do registračnej fronty", diff --git a/public/language/sk/register.json b/public/language/sk/register.json index 037360252c..69d7e7c682 100644 --- a/public/language/sk/register.json +++ b/public/language/sk/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Súhlasím s podmienkami používania", "terms_of_use_error": "Musíte súhlasiť s podmienkami použitia", "registration-added-to-queue": "Vaša registrácia bola pridaná do fronty na schválenie. Obdržíte e-mail, keď Vaša registrácia bude prijatá správcom.", + "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.", "interstitial.intro": "Pred vytvorením účtu požadujeme nejaké dodatočné informácie.", "interstitial.errors-found": "Nepodarilo sa nám dokončiť Vašu registráciu:", "gdpr_agree_data": "Dávam súhlas so zberom a spracovaním mojich osobných údajov na tejto webovej stránke.", diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json index c4c5ce68c9..d63f25d323 100644 --- a/public/language/sk/topic.json +++ b/public/language/sk/topic.json @@ -30,6 +30,7 @@ "locked": "Uzamknuté", "pinned": "Pripnuté", "moved": "Presunuté", + "moved-from": "Moved from %1", "copy-ip": "Kopírovať IP adresu", "ban-ip": "Zablokovať IP adresu", "view-history": "Upraviť históriu", diff --git a/public/language/sk/user.json b/public/language/sk/user.json index dc43964955..25c1bf4629 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Otvárať odchádzajúce odkazy v novom liste", "enable_topic_searching": "Povoliť vyhľadávanie priamo v téme", "topic_search_help": "Ak je funkcia povolená, predvolené nastavenia vyhľadávania v prehliadači budú pre nastavené, a umožnia Vám prechádzať cez všetky vstupy, nie iba cez tie, ktoré budú zobrazené na obrazovke", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Po odoslaní odpovede, ukázať nový príspevok", "follow_topics_you_reply_to": "Sledovať témy na ktoré ste odpovedali", "follow_topics_you_create": "Sledovať témy ktoré ste vytvorili", diff --git a/public/language/sk/users.json b/public/language/sk/users.json index 83c2725c79..e048857532 100644 --- a/public/language/sk/users.json +++ b/public/language/sk/users.json @@ -11,6 +11,7 @@ "online-only": "Iba pripojený", "invite": "Pozvať", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "E-mailová pozvánka bola odoslaná na adresu %1", "user_list": "Zoznam používateľov", "recent_topics": "Nedávne témy", diff --git a/public/language/sl/admin/manage/privileges.json b/public/language/sl/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/sl/admin/manage/privileges.json +++ b/public/language/sl/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/sl/admin/menu.json b/public/language/sl/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/sl/admin/menu.json +++ b/public/language/sl/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/sl/admin/settings/email.json b/public/language/sl/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/sl/admin/settings/email.json +++ b/public/language/sl/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/sl/admin/settings/guest.json b/public/language/sl/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/sl/admin/settings/guest.json +++ b/public/language/sl/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/sl/admin/settings/user.json b/public/language/sl/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/sl/admin/settings/user.json +++ b/public/language/sl/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/sl/flags.json b/public/language/sl/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/sl/flags.json +++ b/public/language/sl/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/sl/groups.json b/public/language/sl/groups.json index 0e1291951d..c911313994 100644 --- a/public/language/sl/groups.json +++ b/public/language/sl/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Število članov", "details.creation_date": "Datum nastanka", "details.description": "Opis skupine", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Predogled značke", "details.change_icon": "Zamenjaj ikono", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/sl/notifications.json b/public/language/sl/notifications.json index 418a4db93e..9cf0a326b4 100644 --- a/public/language/sl/notifications.json +++ b/public/language/sl/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "When someone starts following you", "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-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "When someone gets added to registration queue", diff --git a/public/language/sl/register.json b/public/language/sl/register.json index f0d67e5400..d4e73e470b 100644 --- a/public/language/sl/register.json +++ b/public/language/sl/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Strinjam se s pogoji uporabe.", "terms_of_use_error": "S pogoji uporabe se morate strinjati.", "registration-added-to-queue": "Registracija uporabniškega profila poteka. Ob potrditvi skrbnika boste v svoj e-poštni predal prejeli sporočilo.", + "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.", "interstitial.intro": "Preden ustvarimo vaš račun, potrebujemo nekaj dodatnih informacij.", "interstitial.errors-found": "Vaše registracije ne moremo dokončati:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/sl/topic.json b/public/language/sl/topic.json index 494c0e25af..3ed9160fd8 100644 --- a/public/language/sl/topic.json +++ b/public/language/sl/topic.json @@ -30,6 +30,7 @@ "locked": "Zaklenjeno", "pinned": "Pripeto", "moved": "Premaknjeno", + "moved-from": "Moved from %1", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", diff --git a/public/language/sl/user.json b/public/language/sl/user.json index 2ebf3ef9a4..4a5002ccad 100644 --- a/public/language/sl/user.json +++ b/public/language/sl/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Zunanje povezave odpri v novem zavihku", "enable_topic_searching": "Omogoči iskanje znotraj teme", "topic_search_help": "Če omogočite, bo iskanje prepisalo brskalnikove prevzete nastavitve in vam omogočilo iskanje skozi celotno temo.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Spremljanj teme, na katere si odgovoril", "follow_topics_you_create": "Spremljanj teme, ki si jih ustvaril", diff --git a/public/language/sl/users.json b/public/language/sl/users.json index baa6f6488a..724ef7edaa 100644 --- a/public/language/sl/users.json +++ b/public/language/sl/users.json @@ -11,6 +11,7 @@ "online-only": "Samo dosegljivi", "invite": "Povabi", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Povabilo je bilo poslano na e-mail naslov %1", "user_list": "Sezam uporabnikov", "recent_topics": "Zadnje teme", diff --git a/public/language/sr/admin/manage/privileges.json b/public/language/sr/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/sr/admin/manage/privileges.json +++ b/public/language/sr/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/sr/admin/menu.json b/public/language/sr/admin/menu.json index 31a2835ff5..ad7b1c27bf 100644 --- a/public/language/sr/admin/menu.json +++ b/public/language/sr/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifikacije", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/sr/admin/settings/email.json b/public/language/sr/admin/settings/email.json index 31274349b9..d7f907b94f 100644 --- a/public/language/sr/admin/settings/email.json +++ b/public/language/sr/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Označena email adresa se odnosi na email koga će primalac videti \"Od\" i \"Odgovori\" poljima.", "from": "Od koga", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Molim unesite broj koji označava satnicu kada da pošalje zakazani sažeti email (nrp. 0 za ponoć, 17 za 5:00 pm). Uzmite u obzir da će se slanje događati po satnici samog servara, i da vrlo verovatno se ne poklapa sa satnicom vašeg sistema.
Trenutno vreme servera je:
Sledeći dnevni sažeti email zakazan je za slanje u " + "subscriptions.hour-help": "Molim unesite broj koji označava satnicu kada da pošalje zakazani sažeti email (nrp. 0 za ponoć, 17 za 5:00 pm). Uzmite u obzir da će se slanje događati po satnici samog servara, i da vrlo verovatno se ne poklapa sa satnicom vašeg sistema.
Trenutno vreme servera je:
Sledeći dnevni sažeti email zakazan je za slanje u ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/sr/admin/settings/guest.json b/public/language/sr/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/sr/admin/settings/guest.json +++ b/public/language/sr/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/sr/admin/settings/user.json b/public/language/sr/admin/settings/user.json index f6f4be69d3..81383b8a0f 100644 --- a/public/language/sr/admin/settings/user.json +++ b/public/language/sr/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Nema registracije", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maksimum poziva po korisniku.", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 za bez restrikcija. Administratori dobijaju bezgranično pozivnica
Samo određeni za \"Samo pozivnica\"", @@ -62,6 +65,7 @@ "restrict-chat": "Samo dozvoli chat poruke korisnika koje ja pratim", "outgoing-new-tab": "Otvori odlazeće linove u novom tabu", "topic-search": "Omogući pretraživanje u temi", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Pretplatite se na Digest", "digest-freq.off": "Isključeno", "digest-freq.daily": "Dnevno", diff --git a/public/language/sr/flags.json b/public/language/sr/flags.json index f1b3b808db..3d9c10a421 100644 --- a/public/language/sr/flags.json +++ b/public/language/sr/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Пријави неприкладан садржај", + "modal-title": "Report Content", "modal-body": "Наведите разлог за означавање %1 %2 за проверу. Алтернативно, користите један од тастера за брзу пријаву ко је применљиво.", "modal-reason-spam": "Непожељно", "modal-reason-offensive": "Увредљиво", diff --git a/public/language/sr/groups.json b/public/language/sr/groups.json index b0dc8097cf..94698635ff 100644 --- a/public/language/sr/groups.json +++ b/public/language/sr/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Број чланова", "details.creation_date": "Датум настанка", "details.description": "Опис", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Приказ беџа", "details.change_icon": "Промени икону", "details.change_label_colour": "Промени боју ознаке", diff --git a/public/language/sr/notifications.json b/public/language/sr/notifications.json index 0f1bbc6527..2431eef20e 100644 --- a/public/language/sr/notifications.json +++ b/public/language/sr/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Када је порука уређена у теми коју надгледате", "notificationType_follow": "Када неко почне да вас прати", "notificationType_new-chat": "Када примите поруку за ћаскање", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "Када примите позивницу за групу", "notificationType_group-request-membership": "Када неко затражи да се придружи групи коју поседујете", "notificationType_new-register": "Када је неко додат на чекање за регистрацију", diff --git a/public/language/sr/register.json b/public/language/sr/register.json index e02ca02353..3097047e98 100644 --- a/public/language/sr/register.json +++ b/public/language/sr/register.json @@ -18,6 +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.", "interstitial.intro": "Захтевамо неке додатне информације пре него што отворимо ваш налог.", "interstitial.errors-found": "Нисмо могли комплетирати вашу регистрацију:", "gdpr_agree_data": "Пристајем на прикупљање и обраду мојих личних података на овој веб страници.", diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index e002fa1f8f..affe0651c4 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -30,6 +30,7 @@ "locked": "Закључано", "pinned": "Закачено", "moved": "Премештено", + "moved-from": "Moved from %1", "copy-ip": "Копирај IP", "ban-ip": "Бануј IP", "view-history": "Уреди историју", diff --git a/public/language/sr/user.json b/public/language/sr/user.json index b809883743..04cefc151f 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Отвори одлазне везе у новој картици", "enable_topic_searching": "Омогући претрагу унутар тема", "topic_search_help": "Ако је омогућено, претраживање унутар тема ће прегазити подразумевано понашање претраге страница и омогућити претрагу целе теме уместо само оног што је приказано на екрану", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Након објављивања одговора, прикажи нову поруку", "follow_topics_you_reply_to": "Надгледај теме у којима си одговорио", "follow_topics_you_create": "Надгледај теме које си креирао", diff --git a/public/language/sr/users.json b/public/language/sr/users.json index 08701614e0..0c43f6815e 100644 --- a/public/language/sr/users.json +++ b/public/language/sr/users.json @@ -11,6 +11,7 @@ "online-only": "Само корисници на мрежи", "invite": "Позови", "prompt-email": "Е-поштe:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Е-пошта са позивом је послата на %1", "user_list": "Листа корисника", "recent_topics": "Недавне теме", diff --git a/public/language/sv/admin/admin.json b/public/language/sv/admin/admin.json index 7a057d636c..b68973378d 100644 --- a/public/language/sv/admin/admin.json +++ b/public/language/sv/admin/admin.json @@ -1,5 +1,5 @@ { - "alert.confirm-rebuild-and-restart": "Är du säker på att du vill bygga och starta om NodeBB?", + "alert.confirm-rebuild-and-restart": "Är du säker på att du vill ombygga och starta om NodeBB?", "alert.confirm-restart": "Är du säker på att du vill starta om NodeBB?", "acp-title": "%1 | NodeBB Admin Kontrollpanel", diff --git a/public/language/sv/admin/advanced/cache.json b/public/language/sv/admin/advanced/cache.json index 2fd7984883..5be0b1378b 100644 --- a/public/language/sv/admin/advanced/cache.json +++ b/public/language/sv/admin/advanced/cache.json @@ -1,6 +1,6 @@ { - "post-cache": "Post Cache", + "post-cache": "Inläggscache", "percent-full": "%1% Full", - "post-cache-size": "Post Cache Size", - "items-in-cache": "Items in Cache" + "post-cache-size": "Storlek på inläggscache", + "items-in-cache": "Föremål i cache" } \ No newline at end of file diff --git a/public/language/sv/admin/advanced/database.json b/public/language/sv/admin/advanced/database.json index 9167b381ed..d815e3acef 100644 --- a/public/language/sv/admin/advanced/database.json +++ b/public/language/sv/admin/advanced/database.json @@ -2,34 +2,34 @@ "x-b": "%1 b", "x-mb": "%1 mb", "x-gb": "%1 gb", - "uptime-seconds": "Uptime in Seconds", - "uptime-days": "Uptime in Days", + "uptime-seconds": "Driftstid i sekunder", + "uptime-days": "Driftstid i dagar", "mongo": "Mongo", "mongo.version": "MongoDB Version", - "mongo.storage-engine": "Storage Engine", - "mongo.collections": "Collections", - "mongo.objects": "Objects", - "mongo.avg-object-size": "Avg. Object Size", - "mongo.data-size": "Data Size", - "mongo.storage-size": "Storage Size", - "mongo.index-size": "Index Size", - "mongo.file-size": "File Size", + "mongo.storage-engine": "Lagringsmotor", + "mongo.collections": "Samlingar", + "mongo.objects": "Objekt", + "mongo.avg-object-size": "Genomsnittlig Objektstorlek", + "mongo.data-size": "Datastorlek", + "mongo.storage-size": "Förvaringsstorlek", + "mongo.index-size": "Indexstorlek", + "mongo.file-size": "Filstorlek", "mongo.resident-memory": "Resident Memory", - "mongo.virtual-memory": "Virtual Memory", - "mongo.mapped-memory": "Mapped Memory", + "mongo.virtual-memory": "Virtuellt minne", + "mongo.mapped-memory": "Mappat minne", "mongo.bytes-in": "Bytes In", "mongo.bytes-out": "Bytes Out", - "mongo.num-requests": "Number of Requests", + "mongo.num-requests": "Antal förfrågningar", "mongo.raw-info": "MongoDB Raw Info", - "mongo.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the "clusterMonitor" role for the "admin" database.", + "mongo.unauthorized": "NodeBB kunde inte fråga MongoDB-databasen för relevant statistik. Se till att användaren av NodeBB inkluderar "clusterMonitor" role for the "admin"databas.", "redis": "Redis", "redis.version": "Redis Version", - "redis.keys": "Keys", - "redis.expires": "Expires", - "redis.avg-ttl": "Average TTL", - "redis.connected-clients": "Connected Clients", + "redis.keys": "Nycklar", + "redis.expires": "Upphör att gälla", + "redis.avg-ttl": "Genomsnittlig TTL", + "redis.connected-clients": "Anslutna klienter", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", "redis.used-memory": "Used Memory", diff --git a/public/language/sv/admin/manage/privileges.json b/public/language/sv/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/sv/admin/manage/privileges.json +++ b/public/language/sv/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/sv/admin/menu.json b/public/language/sv/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/sv/admin/menu.json +++ b/public/language/sv/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/sv/admin/settings/email.json b/public/language/sv/admin/settings/email.json index d2136c2ef3..8f11cd9449 100644 --- a/public/language/sv/admin/settings/email.json +++ b/public/language/sv/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Epostsammandrag", "subscriptions.disable": "Avaktivera epostsammandrag", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/sv/admin/settings/guest.json b/public/language/sv/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/sv/admin/settings/guest.json +++ b/public/language/sv/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/sv/admin/settings/user.json b/public/language/sv/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/sv/admin/settings/user.json +++ b/public/language/sv/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/sv/flags.json b/public/language/sv/flags.json index c4b915ea26..4a617433ad 100644 --- a/public/language/sv/flags.json +++ b/public/language/sv/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Rapportera opassande innehåll", + "modal-title": "Report Content", "modal-body": "Vänligen ange anledningen till att du flaggar %1 %2 för granskning. Alternativt, använd en av snabbrapporteringsknapparna.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Kränkande", diff --git a/public/language/sv/groups.json b/public/language/sv/groups.json index ba34743a8e..338272ecc3 100644 --- a/public/language/sv/groups.json +++ b/public/language/sv/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Medlemsantal", "details.creation_date": "Skapardatum", "details.description": "Beskrivning", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Förhandsgranskning av märke", "details.change_icon": "Byt ikon", "details.change_label_colour": "Ändra etikettfärg", diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json index 500602ade4..14fabefc9a 100644 --- a/public/language/sv/notifications.json +++ b/public/language/sv/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "När någon börjar följa dig", "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-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", diff --git a/public/language/sv/register.json b/public/language/sv/register.json index 1bca6a1d27..081513e301 100644 --- a/public/language/sv/register.json +++ b/public/language/sv/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Jag godkänner användarvillkoren", "terms_of_use_error": "Du måste godkänna användarvillkoren", "registration-added-to-queue": "Din registrering har lagts till i kön. Du kommer att få ett mail när den accepteras av en administratör.", + "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.", "interstitial.intro": "Vi behöver ytterligare information innan vi kan skapa ditt konto.", "interstitial.errors-found": "Vi kunde inte slutföra din registrering:", "gdpr_agree_data": "Jag ger detta forum mitt medgivande att samla in och behandla min personliga information.", diff --git a/public/language/sv/topic.json b/public/language/sv/topic.json index 1e876d6a36..197d235d3e 100644 --- a/public/language/sv/topic.json +++ b/public/language/sv/topic.json @@ -30,6 +30,7 @@ "locked": "Låst", "pinned": "Fäst", "moved": "Flyttad", + "moved-from": "Moved from %1", "copy-ip": "Kopiera IP", "ban-ip": "Banna IP", "view-history": "Redigera historik", diff --git a/public/language/sv/user.json b/public/language/sv/user.json index 78fa336fab..1de5867af5 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -110,7 +110,7 @@ "topics_per_page": "Ämnen per sida", "posts_per_page": "Inlägg per sida", "max_items_per_page": "Maximalt %1", - "acp_language": "Språk för administratorsida", + "acp_language": "Språk för administratörssida", "notifications": "Notifications", "upvote-notif-freq": "Notisfrekvens för uppröstningar", "upvote-notif-freq.all": "Alla uppröstningar", @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Öppna utgående länkar i ny flik", "enable_topic_searching": "Aktivera sökning inom ämne", "topic_search_help": "Om aktiverat kommer sökning inom ämne överskrida webbläsarens vanliga funktionen för sökning bland sidor och tillåta dig att söka genom hela ämnet istället för det som endast visas på skärmen.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Visa det nya inlägget när ett svar har postats", "follow_topics_you_reply_to": "Bevaka ämnen som du svarat på", "follow_topics_you_create": "Bevaka ämnen som du skapat", diff --git a/public/language/sv/users.json b/public/language/sv/users.json index e65496e4d4..f00e585369 100644 --- a/public/language/sv/users.json +++ b/public/language/sv/users.json @@ -11,6 +11,7 @@ "online-only": "Endast online", "invite": "Bjud in", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "En inbjudan har skickats till %1", "user_list": "Användarlista", "recent_topics": "Senaste ämnen", diff --git a/public/language/th/admin/manage/privileges.json b/public/language/th/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/th/admin/manage/privileges.json +++ b/public/language/th/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/th/admin/menu.json b/public/language/th/admin/menu.json index b6a38f0d0e..01cc355fa1 100644 --- a/public/language/th/admin/menu.json +++ b/public/language/th/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Pagination", "settings/tags": "Tags", "settings/notifications": "Notifications", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/th/admin/settings/email.json b/public/language/th/admin/settings/email.json index f6ade9cfc9..839fd2b6f6 100644 --- a/public/language/th/admin/settings/email.json +++ b/public/language/th/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/th/admin/settings/guest.json b/public/language/th/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/th/admin/settings/guest.json +++ b/public/language/th/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/th/admin/settings/user.json b/public/language/th/admin/settings/user.json index 9933184b3b..f5c770fe26 100644 --- a/public/language/th/admin/settings/user.json +++ b/public/language/th/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "ทุกวัน", diff --git a/public/language/th/flags.json b/public/language/th/flags.json index eabb76398c..bddef72f81 100644 --- a/public/language/th/flags.json +++ b/public/language/th/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "รายงานเนื้อหาไม่เหมาะสม", + "modal-title": "Report Content", "modal-body": "กรุณาระเหตุผลสำหรับการปักธง %1 %2 สำหรับการรีวิว หรือไม่ก็ใช้หนึ่งในปุ่มกดรายงานด่วนถ้าเป็นไปได้", "modal-reason-spam": "สแปม", "modal-reason-offensive": "น่ารังเกียจ", diff --git a/public/language/th/groups.json b/public/language/th/groups.json index 6488e3f794..4ebfe74b71 100644 --- a/public/language/th/groups.json +++ b/public/language/th/groups.json @@ -35,6 +35,8 @@ "details.member_count": "จำนวนสมาชิก", "details.creation_date": "สร้างวันที่", "details.description": "คำอธิบาย", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "สัญลักษณ์พรีวิว", "details.change_icon": "เปลี่ยนไอคอน", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/th/notifications.json b/public/language/th/notifications.json index 5d8b12583e..b076ad1697 100644 --- a/public/language/th/notifications.json +++ b/public/language/th/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "เมื่อมีคนติดตามคุณ", "notificationType_new-chat": "เมื่อคุณได้รับข้อความใหม่", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "เมื่อคุณได้รับเชิญเข้ากลุ่ม", "notificationType_group-request-membership": "When someone requests to join a group you own", "notificationType_new-register": "เมื่อมีคนถูกเพิ่มในคิวลงทะเบียน", diff --git a/public/language/th/register.json b/public/language/th/register.json index 16058d7f7e..7aad308962 100644 --- a/public/language/th/register.json +++ b/public/language/th/register.json @@ -18,6 +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.", "interstitial.intro": "เราต้องการข้อมูลบางอย่างเพิ่มเติมก่อนที่เราจะสร้างบัญชีให้คุณ", "interstitial.errors-found": "เราไม่สามารถทำให้การสมัครสมาชิกของคุณสำเร็จได้:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/th/topic.json b/public/language/th/topic.json index b66c499b54..57c29e9cf0 100644 --- a/public/language/th/topic.json +++ b/public/language/th/topic.json @@ -30,6 +30,7 @@ "locked": "ถูกล็อก", "pinned": "ถูกปักหมุด", "moved": "ถูกย้าย", + "moved-from": "Moved from %1", "copy-ip": "คัดลอก IP", "ban-ip": "แบน IP", "view-history": "แก้ไขประวัติ", diff --git a/public/language/th/user.json b/public/language/th/user.json index c5dc1e5a16..e5a2db9b17 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "เปิดลิงค์ในแท็บใหม่", "enable_topic_searching": "เปิดใช้การค้นหาแบบ In-Topic", "topic_search_help": "หากเปิดใช้งาน, \"การค้นหาภายในกระทู้\" จะแทนที่ระบบ \"การค้นหาจากค่าเริ่มต้นของเบราเซอร์\" และจะทำให้คุณค้นหาข้อมูลต่างๆภายในกระทู้ได้ แทนที่จะเป็นการหาแค่สิ่งที่แสดงบนหน้าจอเท่านั้น", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "หลังจากได้ทำการโพสต์ตอบกลับ ให้แสดงโพสต์ใหม่", "follow_topics_you_reply_to": "ดูกระทู้ที่คุณตอบ", "follow_topics_you_create": "ดูกระทู้ที่คุณตั้ง", diff --git a/public/language/th/users.json b/public/language/th/users.json index 0502bcb49a..3a70f2ca7c 100644 --- a/public/language/th/users.json +++ b/public/language/th/users.json @@ -11,6 +11,7 @@ "online-only": "กำลังออนไลน์เท่านั้น", "invite": "เชิญ", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "อีเมลคำเชิญถูกส่งไปยัง %1 เรียบร้อย", "user_list": "รายการผู้ใช้", "recent_topics": "กระทู้ล่าสุด", diff --git a/public/language/tr/admin/manage/privileges.json b/public/language/tr/admin/manage/privileges.json index 7f242b6951..821d8607bf 100644 --- a/public/language/tr/admin/manage/privileges.json +++ b/public/language/tr/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Dosya Yükle", "signature": "İmza", "ban": "Ban", + "invite": "Davet et", "search-content": "İçerik Arama", "search-users": "Kullanıcıları Ara", "search-tags": "Etiketleri Ara", diff --git a/public/language/tr/admin/menu.json b/public/language/tr/admin/menu.json index b6c6293d40..7ead54cb9e 100644 --- a/public/language/tr/admin/menu.json +++ b/public/language/tr/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Sayfalama", "settings/tags": "Etiketler", "settings/notifications": "Bildirimler", + "settings/api": "API Erişimi", "settings/sounds": "Sesler", "settings/social": "Sosyal", "settings/cookies": "Çerezler", @@ -70,7 +71,7 @@ "logout": "Çıkış", "view-forum": "Forumu Görüntüle", - "search.placeholder": "Press "/" to search for settings", + "search.placeholder": "Ayarları aramak için "/" işaretine tıklayın", "search.no-results": "Sonuç yok...", "search.search-forum": "Forumda ara: ", "search.keep-typing": "Sonuçları görmek için daha fazla yazın...", diff --git a/public/language/tr/admin/settings/advanced.json b/public/language/tr/admin/settings/advanced.json index 5067ca06e4..28e2766d79 100644 --- a/public/language/tr/admin/settings/advanced.json +++ b/public/language/tr/admin/settings/advanced.json @@ -37,7 +37,7 @@ "analytics.settings": "Analitik Ayarlar", "analytics.max-cache": "Analytics Cache Max Value", "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", - "compression.settings": "Compression Settings", - "compression.enable": "Enable Compression", + "compression.settings": "Sıkıştırma Ayarları", + "compression.enable": "Sıkıştırmayı Aktifleştir", "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." } \ No newline at end of file diff --git a/public/language/tr/admin/settings/api.json b/public/language/tr/admin/settings/api.json index ba7d964a04..ede02cd927 100644 --- a/public/language/tr/admin/settings/api.json +++ b/public/language/tr/admin/settings/api.json @@ -2,11 +2,11 @@ "tokens": "Tokens", "lead-text": "From this page you can configure access to the Write API in NodeBB.", "intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.", - "docs": "Click here to access the full API specification", + "docs": "Tüm API özeliklerine erişmek için buraya tıklayın. ", - "uid": "User ID", + "uid": "Kullanıcı ID", "uid-help-text": "Specify a User ID to associate with this token. If the user ID is 0, it will be considered a master token, which can assume the identity of other users based on the _uid parameter", - "description": "Description", - "no-description": "No description specified.", + "description": "Açıklama", + "no-description": "Hiçbir açıklama belirtilmemiş.", "token-on-save": "Token will be generated once form is saved" } \ No newline at end of file diff --git a/public/language/tr/admin/settings/email.json b/public/language/tr/admin/settings/email.json index 6dc0d4a7b6..73e7f67d21 100644 --- a/public/language/tr/admin/settings/email.json +++ b/public/language/tr/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Özet E-postaları", "subscriptions.disable": "Özet e-postalarını kapat", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "E-posta bildirim seçenekleri", + "notifications.remove-images": "Görselleri e-posta bildirimlerinden kaldır" } \ No newline at end of file diff --git a/public/language/tr/admin/settings/general.json b/public/language/tr/admin/settings/general.json index 176df64367..7b8e876149 100644 --- a/public/language/tr/admin/settings/general.json +++ b/public/language/tr/admin/settings/general.json @@ -27,12 +27,12 @@ "log.alt-text-placeholder": "Erişilebilirlik için alternatif metin", "favicon": "Favicon", "favicon.upload": "Yükle", - "pwa": "Progressive Web App", - "touch-icon": "Touch Icon", + "pwa": "İleri Web Uygulaması", + "touch-icon": "Dokunma Simgesi", "touch-icon.upload": "Yükle", - "touch-icon.help": "Recommended size and format: 512x512, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.", - "maskable-icon": "Maskable (Homescreen) Icon", - "maskable-icon.help": "Recommended size and format: 512x512, PNG format only. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.", + "touch-icon.help": "Önerilen Boyut: 512x512. Önerilen format: PNG. Simge belirtilmezse varsayılan olarak favicon kullanılır.", + "maskable-icon": "Maskelenebilir (Ana Ekran) Simgesi", + "maskable-icon.help": "Önerilen boyut ve format: 512x512, PNG formatı. If no maskable icon is specified, NodeBB will fall back to the Touch Icon.", "outgoing-links": "Harici Bağlantılar", "outgoing-links.warning-page": "Dışarı giden bağlantılar için uyarı sayfası kullan", "search-default-sort-by": "Aramada varsayılan sıralama", diff --git a/public/language/tr/admin/settings/guest.json b/public/language/tr/admin/settings/guest.json index 5b5a112576..1362b3affb 100644 --- a/public/language/tr/admin/settings/guest.json +++ b/public/language/tr/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Ziyaretçi Kolları", + "settings": "Ayarlar", "handles.enabled": "Misafir üyelere izin ver", "handles.enabled-help": "Bu seçenek, misafirlerin yaptıkları her gönderiyle ilişkilendirebilecekleri bir isim alanı sunar. Devre dışı bırakılırsa, gönderenin ismi basitçe \"Misafir\" olarak adlandırılacaktır.", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Ziyaretçilerin konu bakış sayısını arttırmasına izin ver", + "reply-notifications.enabled": "Ziyaretçilerin cevap bildirimleri oluşturmasına izin ver" } \ No newline at end of file diff --git a/public/language/tr/admin/settings/post.json b/public/language/tr/admin/settings/post.json index d91fbc1cb3..3f3b6734d5 100644 --- a/public/language/tr/admin/settings/post.json +++ b/public/language/tr/admin/settings/post.json @@ -35,7 +35,7 @@ "timestamp.necro-threshold": "Ardışık iletiler arasında geçen gün sayısı (Necro Sınırı)", "timestamp.necro-threshold-help": "Eğer iki ardışık ileti arasında geçen süre Necro Sınırı'ndan fazlaysa, geçen süre yazıyla belirtilecek. (Varsayılan: 7, yani bir hafta). Etkinsizleştirmek için 0 yazınız.", "timestamp.topic-views-interval": "Increment topic views interval (in minutes)", - "timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.", + "timestamp.topic-views-interval-help": "Başlıkların bakış sayısı bu ayarların belirttiği her X dakikada bir güncellenecek. ", "teaser": "Teaser İleti", "teaser.last-post": "Son – cevap yoksa orijinal gönderi de dahil olmak üzere en son gönderiyi gösterir.", "teaser.last-reply": "Son – cevap yoksa en son yanıtı veya \"Yanıt yok\" yertutucusunu gösterir.", diff --git a/public/language/tr/admin/settings/user.json b/public/language/tr/admin/settings/user.json index 3fc9d65a9c..e3f1c18353 100644 --- a/public/language/tr/admin/settings/user.json +++ b/public/language/tr/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Kayıt yok", "registration-type.help": "Normal - Kullanıcılar, kayıt sayfasından kayıt olabililrler
\nDavetiye İle - Kullanıcılar, başkalarını users sayfasından davet edebilirler.
\nYönetici Davetiyesi İle - Sadece yöneticiler başkalarını users sayfasından ve admin/manage/users sayfasından davet edebilir.
\nKayıt Yok - Yeni üye kaydı kapalı
", "registration-approval-type.help": "Normal - Kullanıcılar hemen kaydolur.
\nYönetici Onayı - Kullanıcı kayıtları, yöneticiler tarafından onaylansın diyeapproval queue sırasına konulur.
\nIP için Yönetici Onayı - Yeni Kullanıcılar için Normal Üyelik; hali hazırda kayıtlı olan IP adresleri için Yönetici Onayı
", + "registration-queue-auto-approve-time": "Otomatik onaylanma süresi", + "registration-queue-auto-approve-time-help": "Kullanıcıların otomatik onayı için geçecek süre (saat). İptal etmek için 0 yazın.", + "registration-queue-show-average-time": "Kullanıcılara ortalama üyelik onaylanma süresini göster", "registration.max-invites": "Kullanıcı Başına Maksimum Davetiye", "max-invites": "Kullanıcı Başına Maksimum Davetiye", "max-invites-help": "Kısıtlama olmaması için 0. Yöneticiler sınırsız davetiyeye sahiptir
\"Yalnızca Davet\" seçeneği için geçerlidir", @@ -62,6 +65,7 @@ "restrict-chat": "Sadece takip ettiğim kişilerden sohbetleri kabul et", "outgoing-new-tab": "Dışarı giden bağlantıları yeni sekmede aç", "topic-search": "Konu içi aramayı etkinleştir", + "update-url-with-post-index": "Sayfayı okurken URL bağlantısındaki ileti numarasını güncelle", "digest-freq": "Özet e-postalarına abone ol", "digest-freq.off": "Kapalı", "digest-freq.daily": "Günlük", diff --git a/public/language/tr/flags.json b/public/language/tr/flags.json index cbf39d5d52..a7c482eaf2 100644 --- a/public/language/tr/flags.json +++ b/public/language/tr/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "En çok artılanan", "sort-replies": "En çok cevap verilen", - "modal-title": "Uygunsuz İçeriği Rapor Et", + "modal-title": "İçeriği Şikayet Et", "modal-body": "%1 %2 için şikayet nedenini belirtiniz. Alternatif olarak hızlı rapor butonlarından birini kullanabilirsiniz.", "modal-reason-spam": "Gereksiz", "modal-reason-offensive": "Saldırgan", diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index 6e9c6e15be..5cdffb2295 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Üye Sayısı", "details.creation_date": "Oluşturulma Tarihi", "details.description": "Tanımlama", + "details.member-post-cids": "İletilerin gösterileceği kategoriler", + "details.member-post-cids-help": "Not: Hiçbir kategori belirtilmezse, tüm kategoriler dahil edilecek. Birden fazla kategori seçimi için ctrl ve shift tuşlarını kullanın. ", "details.badge_preview": "Rozet Önizlemesi", "details.change_icon": "İkonu Değiştir", "details.change_label_colour": "Etiket Rengini Değiştir", diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index 94b065cdf2..83132c1e14 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "Takip ettiğiniz bir konudaki bir ileti değiştirildiğinde", "notificationType_follow": "Biri sizi takip etmeye başlayınca", "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-request-membership": "Biri size ait bir gruba üye olmak istediğinde", "notificationType_new-register": "Biri kayıt kuyruğuna eklendiğinde", diff --git a/public/language/tr/register.json b/public/language/tr/register.json index a032e83a39..4bdfe87e1a 100644 --- a/public/language/tr/register.json +++ b/public/language/tr/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Kullanım Şartlarını Kabul Ediyorum", "terms_of_use_error": "Kullanım Şartlarını Kabul Etmeniz Gerekiyor", "registration-added-to-queue": "Kayıt olma isteğiniz kabul listesine eklenmiştir. Yönetici tarafından kabul edildiğinizde e-posta alacaksınız.", + "registration-queue-average-time": "Üyelik onayı için bekleyeceğiniz ortalama süre: %1 saat %2 dakika.", + "registration-queue-auto-approve-time": "Forum üyeliğiniz %1 saat içerisinde tamamen aktifleştirilecektir. ", "interstitial.intro": "Hesabınızı yaratmadan önce bazı ekstra bilgiler gerekiyor.", "interstitial.errors-found": "Kaydınız tamamlanamadı:", "gdpr_agree_data": "Bu web sitesinde kişisel bilgilerimin toplanmasını ve işlenmesini kabul ediyorum.", diff --git a/public/language/tr/topic.json b/public/language/tr/topic.json index 0060b36557..cb7a6e3cff 100644 --- a/public/language/tr/topic.json +++ b/public/language/tr/topic.json @@ -30,6 +30,7 @@ "locked": "Kilitli", "pinned": "Sabitlendi", "moved": "Taşındı", + "moved-from": "Şuradan taşındı: %1", "copy-ip": "IP Kopyala", "ban-ip": "IP Yasakla", "view-history": "Geçmişi Düzenle", diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 12de222a48..73cc7d081e 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Dışarı giden bağlantıları yeni sekmede aç", "enable_topic_searching": "Konu içi aramayı aktive et", "topic_search_help": "Aktive edilirse, konu içi arama tarayıcının normal arama davranışını değiştirerek tüm konuyu aramanızı sağlar", + "update_url_with_post_index": "Sayfayı okurken URL bağlantısındaki ileti numarasını güncelle", "scroll_to_my_post": "Cevap yazdıktan sonra yeni iletiyi göster", "follow_topics_you_reply_to": "Cevap verdiğim başlıkları takip et", "follow_topics_you_create": "Oluşturduğum başlıkları takip et", diff --git a/public/language/tr/users.json b/public/language/tr/users.json index 0c53f06001..fb539f9bdf 100644 --- a/public/language/tr/users.json +++ b/public/language/tr/users.json @@ -11,6 +11,7 @@ "online-only": "Sadece çevrimiçi", "invite": "Davet et", "prompt-email": "Eposta:", + "groups-to-join": "Davet kabul edildiğinde katılacağınız gruplar:", "invitation-email-sent": "%1'e bir davet e-posta'sı gönderildi", "user_list": "Kullanıcı Listesi", "recent_topics": "Güncel Konular", diff --git a/public/language/uk/admin/manage/privileges.json b/public/language/uk/admin/manage/privileges.json index 0ef6d52b5f..08558a58bd 100644 --- a/public/language/uk/admin/manage/privileges.json +++ b/public/language/uk/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Завантаження Файлів", "signature": "Підпис", "ban": "Бан", + "invite": "Invite", "search-content": "Шукати Зміст", "search-users": "Шукати Користувачів", "search-tags": "Шукати Теги", diff --git a/public/language/uk/admin/menu.json b/public/language/uk/admin/menu.json index 768cc2cb5e..a35ee7b508 100644 --- a/public/language/uk/admin/menu.json +++ b/public/language/uk/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Пагінація", "settings/tags": "Теги", "settings/notifications": "Сповіщення", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Куки", diff --git a/public/language/uk/admin/settings/email.json b/public/language/uk/admin/settings/email.json index bd74d9d519..e8171e17e0 100644 --- a/public/language/uk/admin/settings/email.json +++ b/public/language/uk/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "Отримувачі будуть бачити цю адресу в полях \"From\" та \"Reply To\".", "from": "Ім'я відправника", "from-help": "Ім'я відправника, що буде показано в електронних листах", - + "smtp-transport": "Протокол SMTP", "smtp-transport.enabled": "Використовувати зовнішній поштовий сервер для відправлення повідомлень", "smtp-transport-help": "Ви можете обрати поштовий сервіс зі списку або використати ваш власний сервіс.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Година дайджесту", - "subscriptions.hour-help": "Вкажіть, будь ласка, годину о котрій кожного дня буде надсилатися дайджест (наприклад 0 — це північ, а 17 — п'ята година вечора). Зверніть увагу, що година визначається згідно налаштувань сервера і може не співпадати з часом вашого комп'ютера.
Приблизний час сервера:
Наступний дайджест заплановано до відправки " + "subscriptions.hour-help": "Вкажіть, будь ласка, годину о котрій кожного дня буде надсилатися дайджест (наприклад 0 — це північ, а 17 — п'ята година вечора). Зверніть увагу, що година визначається згідно налаштувань сервера і може не співпадати з часом вашого комп'ютера.
Приблизний час сервера:
Наступний дайджест заплановано до відправки ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/uk/admin/settings/guest.json b/public/language/uk/admin/settings/guest.json index 8d54dcfa67..1e439e53a6 100644 --- a/public/language/uk/admin/settings/guest.json +++ b/public/language/uk/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Гостьові імена", + "settings": "Settings", "handles.enabled": "Дозволити гостьові імена", "handles.enabled-help": "Ця опція надає додаткове поле, що дозволяє гостям обрати собі ім'я для кожного посту. Якщо вимкнено, вони будуть просто зватися \"Гість\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/uk/admin/settings/user.json b/public/language/uk/admin/settings/user.json index a4d69987fd..8d4cca735a 100644 --- a/public/language/uk/admin/settings/user.json +++ b/public/language/uk/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "Без реєстрації", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Кількість запрошень на користувача", "max-invites": "Кількість запрошень на користувача", "max-invites-help": "0 — без обмежень. Адміни отримуют необмежену кількість.
Працює лише з типом реєстрації \"По запрошенню\".", @@ -62,6 +65,7 @@ "restrict-chat": "Дозволяти чат повідомлення лише від користувачів за якими я стежу", "outgoing-new-tab": "Відкривати зовнішні посилання у новій вкладці", "topic-search": "Увімкнути пошук у темах", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Підписатися на дайджест", "digest-freq.off": "Ніколи", "digest-freq.daily": "Щоденно", diff --git a/public/language/uk/groups.json b/public/language/uk/groups.json index 2254fbac27..9d6a75c26e 100644 --- a/public/language/uk/groups.json +++ b/public/language/uk/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Кількість учасників", "details.creation_date": "Дата створення", "details.description": "Опис", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Попередній перегляд бейджа", "details.change_icon": "Змінити іконку", "details.change_label_colour": "Змінити колір позначки", diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json index eef2ab42a1..7656fcbb5e 100644 --- a/public/language/uk/notifications.json +++ b/public/language/uk/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Коли хтось починає слідкувати за вами", "notificationType_new-chat": "Коли ви отримуєте повідомлення чату", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "Коли ви отримуєте запрошення до групи", "notificationType_group-request-membership": "Коли хтось подає запит на приєднання до групи, якою ви володієте", "notificationType_new-register": "Коли когось додано до черги на реєстрацію", diff --git a/public/language/uk/register.json b/public/language/uk/register.json index 14a7b4e355..7f2b443c1d 100644 --- a/public/language/uk/register.json +++ b/public/language/uk/register.json @@ -18,6 +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.", "interstitial.intro": "Нам потрібна додаткова інформація, перш ніж ми створимо ваш обліковий запис.", "interstitial.errors-found": "Нам не вдалося вас зареєструвати:", "gdpr_agree_data": "Я надаю згоду на збір та обробку моїх особистих даних на цьому веб-сайті.", diff --git a/public/language/uk/topic.json b/public/language/uk/topic.json index 6176fa87ba..bc5f78287f 100644 --- a/public/language/uk/topic.json +++ b/public/language/uk/topic.json @@ -30,6 +30,7 @@ "locked": "Заблокована", "pinned": "Закріплена", "moved": "Переміщена", + "moved-from": "Moved from %1", "copy-ip": "Копіювати IP", "ban-ip": "Заблокувати IP", "view-history": "Редагувати історію", diff --git a/public/language/uk/user.json b/public/language/uk/user.json index 798f299749..9363a6b4a4 100644 --- a/public/language/uk/user.json +++ b/public/language/uk/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Відкривати зовнішні посилання у новій вкладці", "enable_topic_searching": "Увімкнути пошук у темах", "topic_search_help": "Будучи увімкненою, ця функція перевизначає вбудований пошук браузера і дозволяє шукати по всій темі, а не лише по змісту, що показаний на екрані.", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Після відправки відповіді, показувати новий пост", "follow_topics_you_reply_to": "Підписуватися на теми в котрих ви відповідаєте", "follow_topics_you_create": "Підписуватися на теми які ви створюєте", diff --git a/public/language/uk/users.json b/public/language/uk/users.json index c87acf2d44..01951b7753 100644 --- a/public/language/uk/users.json +++ b/public/language/uk/users.json @@ -11,6 +11,7 @@ "online-only": "Лише в мережі", "invite": "Запросити", "prompt-email": "Емейли:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Лист із запрошенням відправлено %1", "user_list": "Список користувачів", "recent_topics": "Нещодавні теми", diff --git a/public/language/vi/admin/manage/privileges.json b/public/language/vi/admin/manage/privileges.json index ac83a28a93..3b24b1cc3e 100644 --- a/public/language/vi/admin/manage/privileges.json +++ b/public/language/vi/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "Upload Files", "signature": "Signature", "ban": "Ban", + "invite": "Invite", "search-content": "Search Content", "search-users": "Search Users", "search-tags": "Search Tags", diff --git a/public/language/vi/admin/menu.json b/public/language/vi/admin/menu.json index 98aa86175c..09ae2b4cdc 100644 --- a/public/language/vi/admin/menu.json +++ b/public/language/vi/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "Phân trang", "settings/tags": "Thẻ", "settings/notifications": "Thông báo", + "settings/api": "API Access", "settings/sounds": "Sounds", "settings/social": "Social", "settings/cookies": "Cookies", diff --git a/public/language/vi/admin/settings/email.json b/public/language/vi/admin/settings/email.json index 8b127a6afc..26481a209a 100644 --- a/public/language/vi/admin/settings/email.json +++ b/public/language/vi/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - + "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", @@ -35,5 +35,7 @@ "subscriptions": "Email Digests", "subscriptions.disable": "Disable email digests", "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent ", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/vi/admin/settings/guest.json b/public/language/vi/admin/settings/guest.json index 3ba81aa778..75d44f37e4 100644 --- a/public/language/vi/admin/settings/guest.json +++ b/public/language/vi/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "Guest Handles", + "settings": "Settings", "handles.enabled": "Allow guest handles", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/vi/admin/settings/user.json b/public/language/vi/admin/settings/user.json index b94dc98870..e05aa5e3ed 100644 --- a/public/language/vi/admin/settings/user.json +++ b/public/language/vi/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "No registration", "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "Maximum Invitations per User", "max-invites": "Maximum Invitations per User", "max-invites-help": "0 for no restriction. Admins get infinite invitations
Only applicable for \"Invite Only\"", @@ -62,6 +65,7 @@ "restrict-chat": "Only allow chat messages from users I follow", "outgoing-new-tab": "Open outgoing links in new tab", "topic-search": "Enable In-Topic Searching", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "Subscribe to Digest", "digest-freq.off": "Off", "digest-freq.daily": "Daily", diff --git a/public/language/vi/flags.json b/public/language/vi/flags.json index 10698842cc..13b3567bc9 100644 --- a/public/language/vi/flags.json +++ b/public/language/vi/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "Report Inappropriate Content", + "modal-title": "Report Content", "modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.", "modal-reason-spam": "Spam", "modal-reason-offensive": "Offensive", diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index 8e69824345..88f53aab9c 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -35,6 +35,8 @@ "details.member_count": "Số thành viên", "details.creation_date": "Ngày mở nhóm", "details.description": "Miêu tả", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "Xem thử huy hiệu", "details.change_icon": "Đổi icon", "details.change_label_colour": "Change Label Colour", diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json index cbc6e98906..2f1a7e6048 100644 --- a/public/language/vi/notifications.json +++ b/public/language/vi/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "When a post is edited in a topic you are watching", "notificationType_follow": "Khi ai đó theo dõi bạn", "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-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ý", diff --git a/public/language/vi/register.json b/public/language/vi/register.json index 67bbb6e0e0..9413ed9a4e 100644 --- a/public/language/vi/register.json +++ b/public/language/vi/register.json @@ -18,6 +18,8 @@ "agree_to_terms_of_use": "Tôi đồng ý với các điều khoản sử dụng", "terms_of_use_error": "Bạn phải đồng ý với các điều khoản sử dụng", "registration-added-to-queue": "Yêu cầu đăng ký của bạn đang chờ được chấp thuận. Bạn sẽ nhận được email khi tài khoản của bạn đã được chấp thuận bởi quản trị viên.", + "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.", "interstitial.intro": "Chúng tôi cần thêm một số thông tin trước khi bạn có thể tạo tài khoản.", "interstitial.errors-found": "Chúng tôi không thể hoàn thành đăng ký của bạn:", "gdpr_agree_data": "Tôi đồng ý với việc thu thập và xử lý thông tin cá nhân của tôi trên trang web này.", diff --git a/public/language/vi/topic.json b/public/language/vi/topic.json index 0fc45e0e13..65998bedc5 100644 --- a/public/language/vi/topic.json +++ b/public/language/vi/topic.json @@ -30,6 +30,7 @@ "locked": "Khóa", "pinned": "Đã ghim", "moved": "Chuyển đi", + "moved-from": "Moved from %1", "copy-ip": "Sao chép IP", "ban-ip": "Cấm IP", "view-history": "Lịch sử chỉnh sửa", diff --git a/public/language/vi/user.json b/public/language/vi/user.json index d09d60108a..17efa58246 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "Mở link trong tab mới.", "enable_topic_searching": "Bật tìm kiếm trong chủ đề", "topic_search_help": "Nếu bật, tìm kiếm trong chủ đề sẽ thay thế tính năng tính năng tìm kiếm của trình duyệt và cho phép bạn tìm kiếm trong toàn bộ chủ đề, thay vì chỉ tìm kiếm nội dung đang hiện thị trên màn hình", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "Sau khi đăng một trả lời thì hiển thị bài viết mới", "follow_topics_you_reply_to": "Những chủ đề bạn quan tâm và từng bình luận", "follow_topics_you_create": "Theo dõi chủ đề bạn tạo", diff --git a/public/language/vi/users.json b/public/language/vi/users.json index 454faefe32..b22a529974 100644 --- a/public/language/vi/users.json +++ b/public/language/vi/users.json @@ -11,6 +11,7 @@ "online-only": "Đang online", "invite": "Mời", "prompt-email": "Emails:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "Email mời đã được gửi tới %1", "user_list": "Danh sách thành viên", "recent_topics": "Chủ đề mới", diff --git a/public/language/zh-CN/admin/manage/privileges.json b/public/language/zh-CN/admin/manage/privileges.json index 370fee92f5..d48c61b0e9 100644 --- a/public/language/zh-CN/admin/manage/privileges.json +++ b/public/language/zh-CN/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "上传文件", "signature": "签名档", "ban": "封禁", + "invite": "Invite", "search-content": "搜索内容", "search-users": "搜索用户", "search-tags": "搜索话题", diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index f100672a6f..d5c8036246 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "分页", "settings/tags": "话题", "settings/notifications": "通知", + "settings/api": "API Access", "settings/sounds": "铃声", "settings/social": "社交", "settings/cookies": "Cookies", diff --git a/public/language/zh-CN/admin/settings/email.json b/public/language/zh-CN/admin/settings/email.json index a465b8900c..64b034879c 100644 --- a/public/language/zh-CN/admin/settings/email.json +++ b/public/language/zh-CN/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "下面的电子邮件地址代表收件人在“发件人”和“回复”中所看到的地址。", "from": "发送者", "from-help": "用于邮件中显示的发送者", - + "smtp-transport": "SMTP 通信", "smtp-transport.enabled": "使用一个外部电子邮箱系统来发送邮件", "smtp-transport-help": "您可以从列表中选取一个已知的服务或自定义。", @@ -35,5 +35,7 @@ "subscriptions": "电子邮件摘要", "subscriptions.disable": "禁用电子邮件摘要", "subscriptions.hour": "摘要小时", - "subscriptions.hour-help": "请输入一个代表小时的数字来发送计划的电子邮件摘要 (例如,对于午夜,0,对于下午5:00,17)。 请记住,这是根据服务器本身的时间,可能与您的系统时钟不完全匹配。
服务器的大致时间为:
下一个每日摘要被计划在发送" + "subscriptions.hour-help": "请输入一个代表小时的数字来发送计划的电子邮件摘要 (例如,对于午夜,0,对于下午5:00,17)。 请记住,这是根据服务器本身的时间,可能与您的系统时钟不完全匹配。
服务器的大致时间为:
下一个每日摘要被计划在发送", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/guest.json b/public/language/zh-CN/admin/settings/guest.json index d4c98c2b26..725beaf2d1 100644 --- a/public/language/zh-CN/admin/settings/guest.json +++ b/public/language/zh-CN/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "游客用户名", + "settings": "Settings", "handles.enabled": "允许游客用户名", "handles.enabled-help": "这个选项将允许游客使用一个额外的输入框来设置发帖时的用户名,如果被禁用,仅会统一显示为“游客”", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/user.json b/public/language/zh-CN/admin/settings/user.json index 018ee60036..a6ead5ef54 100644 --- a/public/language/zh-CN/admin/settings/user.json +++ b/public/language/zh-CN/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "禁止注册", "registration-type.help": "通常 - 用户可以通过 /register页面注册
\n管理员批准 - 用户注册请求会被放入 请求队列待管理员批准。
\n邀请制 - 用户可以通过 用户 页面邀请其它用户。\n管理员邀请制 - 只有管理员可以通过 用户admin/manage/users 页面邀请其它用户。
\n无注册 - 不开放用户注册。
", "registration-approval-type.help": "通常 - 用户可以通过/register页面注册
\n管理员批准 - 用户注册请求会被放入 请求队列 待管理员批准。
\n管理员批准 IP地址 - 新用户不受影响,已存在账号的IP地址注册需要管理员批准。
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "每个用户最大邀请数", "max-invites": "每个用户最大邀请数", "max-invites-help": "无限制填 0 。管理员没有邀请限制
仅在邀请制时可用", @@ -62,6 +65,7 @@ "restrict-chat": "只允许我关注的用户给我发送聊天消息", "outgoing-new-tab": "在新标签打开外部链接", "topic-search": "启用主题内搜索", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "订阅摘要", "digest-freq.off": "关闭", "digest-freq.daily": "每日", diff --git a/public/language/zh-CN/flags.json b/public/language/zh-CN/flags.json index 99cd14b5c7..dbcc5dba94 100644 --- a/public/language/zh-CN/flags.json +++ b/public/language/zh-CN/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "最多顶", "sort-replies": "最多回复", - "modal-title": "举报不适内容", + "modal-title": "Report Content", "modal-body": "请选择或者输入您举报 %1%2 的原因以便版主进行审核。", "modal-reason-spam": "垃圾信息", "modal-reason-offensive": "人身攻击", diff --git a/public/language/zh-CN/groups.json b/public/language/zh-CN/groups.json index 43d50b8d8b..393ad49d9f 100644 --- a/public/language/zh-CN/groups.json +++ b/public/language/zh-CN/groups.json @@ -35,6 +35,8 @@ "details.member_count": "群组成员数", "details.creation_date": "创建时间", "details.description": "描述", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "徽章预览", "details.change_icon": "更改图标", "details.change_label_colour": "更改标签颜色", diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index 59ab9764a2..45bc43c3b2 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "当您关注的主题有帖子被编辑时", "notificationType_follow": "当有人关注您时", "notificationType_new-chat": "当您收到聊天消息时", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "当您收到群组邀请时", "notificationType_group-request-membership": "当有人请求加入您拥有的用户组时", "notificationType_new-register": "当有人被添加到申请队列时", diff --git a/public/language/zh-CN/register.json b/public/language/zh-CN/register.json index e3a048661a..45d711f669 100644 --- a/public/language/zh-CN/register.json +++ b/public/language/zh-CN/register.json @@ -18,6 +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.", "interstitial.intro": "在创建您的账户前我们需要一些额外信息。", "interstitial.errors-found": "我们无法完成您的注册:", "gdpr_agree_data": "我同意此网站对我个人信息的收集与处理。", diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index 0effe4205f..fccddf200c 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -30,6 +30,7 @@ "locked": "已锁定", "pinned": "已固定", "moved": "已移动", + "moved-from": "Moved from %1", "copy-ip": "复制IP", "ban-ip": "封禁IP", "view-history": "编辑历史", diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 035ed5ed0e..3a3feea59c 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "在新标签打开外部链接", "enable_topic_searching": "启用主题内搜索", "topic_search_help": "如果启用此项,主题内搜索会替代浏览器默认的页面搜索,您将可以在整个主题内搜索,而不仅仅只搜索页面上展现的内容。", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "在提交回复之后显示新回复", "follow_topics_you_reply_to": "关注您回复过的主题", "follow_topics_you_create": "关注您创建的主题", diff --git a/public/language/zh-CN/users.json b/public/language/zh-CN/users.json index 06fa81bce2..6cdac0c1cc 100644 --- a/public/language/zh-CN/users.json +++ b/public/language/zh-CN/users.json @@ -11,6 +11,7 @@ "online-only": "只看在线", "invite": "邀请注册", "prompt-email": "邮件:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "已发送邀请给 %1", "user_list": "用户列表", "recent_topics": "最新主题", diff --git a/public/language/zh-TW/admin/manage/privileges.json b/public/language/zh-TW/admin/manage/privileges.json index 395c26ff81..b80f3bf5f6 100644 --- a/public/language/zh-TW/admin/manage/privileges.json +++ b/public/language/zh-TW/admin/manage/privileges.json @@ -9,6 +9,7 @@ "upload-files": "上傳檔案", "signature": "簽名檔", "ban": "禁用", + "invite": "Invite", "search-content": "搜尋內容", "search-users": "搜尋使用者", "search-tags": "搜尋標籤", diff --git a/public/language/zh-TW/admin/menu.json b/public/language/zh-TW/admin/menu.json index fcbdd90b07..2c823e4c85 100644 --- a/public/language/zh-TW/admin/menu.json +++ b/public/language/zh-TW/admin/menu.json @@ -31,6 +31,7 @@ "settings/pagination": "分頁", "settings/tags": "標籤", "settings/notifications": "通知", + "settings/api": "API Access", "settings/sounds": "聲音", "settings/social": "社交", "settings/cookies": "Cookies", diff --git a/public/language/zh-TW/admin/settings/email.json b/public/language/zh-TW/admin/settings/email.json index 43eb05afe9..987aef7c09 100644 --- a/public/language/zh-TW/admin/settings/email.json +++ b/public/language/zh-TW/admin/settings/email.json @@ -4,7 +4,7 @@ "address-help": "下面的電子郵件地址代表收件人在“發送人”和“回覆”中所看到的地址。", "from": "發送人", "from-help": "用於郵件中顯示的發送人", - + "smtp-transport": "SMTP 通信", "smtp-transport.enabled": "使用一個外部電子郵件系統來發送郵件", "smtp-transport-help": "您可以從列表中選取一個已知的服務或自訂。", @@ -35,5 +35,7 @@ "subscriptions": "電子郵件摘要", "subscriptions.disable": "禁用電子郵件摘要", "subscriptions.hour": "摘要小時", - "subscriptions.hour-help": "請輸入一個代表小時的數字來發送排程的電子郵件摘要 (例如,對於午夜,0,對於下午5:00,17)。 請記住,這是根據伺服器本身的時間,可能與您的系統時鐘不完全符合。
伺服器的大致時間為:
下一個每日摘要被排程在發送" + "subscriptions.hour-help": "請輸入一個代表小時的數字來發送排程的電子郵件摘要 (例如,對於午夜,0,對於下午5:00,17)。 請記住,這是根據伺服器本身的時間,可能與您的系統時鐘不完全符合。
伺服器的大致時間為:
下一個每日摘要被排程在發送", + "notifications.settings": "Email notification settings", + "notifications.remove-images": "Remove images from email notifications" } \ No newline at end of file diff --git a/public/language/zh-TW/admin/settings/guest.json b/public/language/zh-TW/admin/settings/guest.json index 777b254aaf..a46b34a3f9 100644 --- a/public/language/zh-TW/admin/settings/guest.json +++ b/public/language/zh-TW/admin/settings/guest.json @@ -1,7 +1,7 @@ { - "handles": "訪客使用者名", + "settings": "Settings", "handles.enabled": "允許訪客使用者名", "handles.enabled-help": "這個選項將允許訪客使用一個額外的輸入框來設置發文時的使用者名,如果被禁用,僅會統一顯示為“訪客”", - "topic-views": "Topic views", - "topic-views.enabled": "Allow guests to increase topic view counts" + "topic-views.enabled": "Allow guests to increase topic view counts", + "reply-notifications.enabled": "Allow guests to generate reply notifications" } \ No newline at end of file diff --git a/public/language/zh-TW/admin/settings/user.json b/public/language/zh-TW/admin/settings/user.json index 173d7f6e5d..93e87c1fe0 100644 --- a/public/language/zh-TW/admin/settings/user.json +++ b/public/language/zh-TW/admin/settings/user.json @@ -43,6 +43,9 @@ "registration-type.disabled": "停用註冊", "registration-type.help": "一般 - 使用者可以通過 /register頁面註冊
\n管理員批准 - 使用者註冊請求會被放入 請求佇列待管理員批准。
\n邀請制 - 使用者可以通過 使用者 頁面邀請其他使用者。\n管理員邀請制 - 只有管理員可以通過 使用者admin/manage/users 頁面邀請其他使用者。
\n停用註冊 - 不開放用戶註冊。
", "registration-approval-type.help": "通常 - 用戶可以通過/register頁面註冊
\n管理員批准 - 用戶註冊請求會被放入 請求隊列 待管理員批准。
\n管理員批准 IP地址 - 新用戶不受影響,已存在賬號的IP地址註冊需要管理員批准。
", + "registration-queue-auto-approve-time": "Automatic Approval Time", + "registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.", + "registration-queue-show-average-time": "Show users average time it takes to approve a new user", "registration.max-invites": "每個使用者最大邀請數", "max-invites": "每個使用者最大邀請數", "max-invites-help": "無限制填 0 。管理員沒有邀請限制
僅在邀請制時可用", @@ -62,6 +65,7 @@ "restrict-chat": "只允許我追隨的使用者給我發送聊天訊息", "outgoing-new-tab": "在新頁籤打開外部連結", "topic-search": "啟用主題內搜尋", + "update-url-with-post-index": "Update url with post index while browsing topics", "digest-freq": "訂閱摘要", "digest-freq.off": "關閉", "digest-freq.daily": "每日", diff --git a/public/language/zh-TW/flags.json b/public/language/zh-TW/flags.json index 0b0fa9c3d3..883891eda6 100644 --- a/public/language/zh-TW/flags.json +++ b/public/language/zh-TW/flags.json @@ -67,7 +67,7 @@ "sort-upvotes": "Most upvotes", "sort-replies": "Most replies", - "modal-title": "舉報不適內容", + "modal-title": "Report Content", "modal-body": "請選擇或者輸入您舉報 %1%2 的原因以便版主進行審核。", "modal-reason-spam": "垃圾訊息", "modal-reason-offensive": "人身攻擊", diff --git a/public/language/zh-TW/groups.json b/public/language/zh-TW/groups.json index 9681dfeb14..d09a7d1739 100644 --- a/public/language/zh-TW/groups.json +++ b/public/language/zh-TW/groups.json @@ -35,6 +35,8 @@ "details.member_count": "群組成員數", "details.creation_date": "建立時間", "details.description": "描述", + "details.member-post-cids": "Categories to display posts from", + "details.member-post-cids-help": "Note: Selecting no categories will assume all categories are included. Use ctrl and shift to select multiple options.", "details.badge_preview": "徽章預覽", "details.change_icon": "更改圖示", "details.change_label_colour": "更改標籤顏色", diff --git a/public/language/zh-TW/notifications.json b/public/language/zh-TW/notifications.json index 129454c339..9a982f8970 100644 --- a/public/language/zh-TW/notifications.json +++ b/public/language/zh-TW/notifications.json @@ -60,6 +60,7 @@ "notificationType_post-edit": "當您關注中的主題有貼文被編輯時", "notificationType_follow": "當有人追隨您時", "notificationType_new-chat": "當您收到聊天訊息時", + "notificationType_new-group-chat": "When you receive a group chat message", "notificationType_group-invite": "當您收到群組邀請時", "notificationType_group-request-membership": "當有人請求加入您擁有的群組時", "notificationType_new-register": "當有註冊申請待審核時", diff --git a/public/language/zh-TW/register.json b/public/language/zh-TW/register.json index 67d7cd198e..7e1aa8da12 100644 --- a/public/language/zh-TW/register.json +++ b/public/language/zh-TW/register.json @@ -18,6 +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.", "interstitial.intro": "在建立您的帳戶前我們需要一些額外資訊。", "interstitial.errors-found": "我們無法完成您的註冊:", "gdpr_agree_data": "我同意此網站對我個人資料的收集與處理。", diff --git a/public/language/zh-TW/topic.json b/public/language/zh-TW/topic.json index b4defa47a0..b50e287032 100644 --- a/public/language/zh-TW/topic.json +++ b/public/language/zh-TW/topic.json @@ -30,6 +30,7 @@ "locked": "已鎖定", "pinned": "已置頂", "moved": "已移動", + "moved-from": "Moved from %1", "copy-ip": "複製IP", "ban-ip": "禁用IP", "view-history": "編輯歷史", diff --git a/public/language/zh-TW/user.json b/public/language/zh-TW/user.json index 47890607a8..409a2342ac 100644 --- a/public/language/zh-TW/user.json +++ b/public/language/zh-TW/user.json @@ -123,6 +123,7 @@ "open_links_in_new_tab": "在新頁籤打開外部連結", "enable_topic_searching": "啟用主題內搜索", "topic_search_help": "如果啟用此項,主題內搜索會替代瀏覽器預設的頁面搜索,您將可以在整個主題內搜索,而不僅僅只搜索頁面上展現的內容。", + "update_url_with_post_index": "Update url with post index while browsing topics", "scroll_to_my_post": "在提交回覆之後顯示新回覆", "follow_topics_you_reply_to": "關注您回覆過的主題", "follow_topics_you_create": "關注您建立的主題", diff --git a/public/language/zh-TW/users.json b/public/language/zh-TW/users.json index b150cb7d42..07e076f86c 100644 --- a/public/language/zh-TW/users.json +++ b/public/language/zh-TW/users.json @@ -11,6 +11,7 @@ "online-only": "只看在線", "invite": "邀請註冊", "prompt-email": "郵件:", + "groups-to-join": "Groups to be joined when invite is accepted:", "invitation-email-sent": "已發送邀請給 %1", "user_list": "使用者列表", "recent_topics": "最新主題", diff --git a/public/openapi/components/schemas/GroupObject.yaml b/public/openapi/components/schemas/GroupObject.yaml index e9802cdf7e..dbef43abc3 100644 --- a/public/openapi/components/schemas/GroupObject.yaml +++ b/public/openapi/components/schemas/GroupObject.yaml @@ -42,6 +42,11 @@ GroupFullObject: textColor: type: string description: A six-character hexadecimal colour code + memberPostCids: + type: array + items: + type: number + example: [1, 2, 3] icon: type: string description: A FontAwesome icon string @@ -56,6 +61,32 @@ GroupFullObject: type: string descriptionParsed: type: string + categories: + type: array + items: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + level: + type: string + icon: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + color: + type: string + bgColor: + type: string + selected: + type: boolean + imageClass: + type: string members: type: array items: @@ -130,4 +161,9 @@ GroupDataObject: type: string description: "`createtime` rendered as an ISO 8601 format" cover:position: - type: string \ No newline at end of file + type: string + memberPostCids: + type: array + items: + type: number + example: [1, 2, 3] \ No newline at end of file diff --git a/public/openapi/components/schemas/SettingsObj.yaml b/public/openapi/components/schemas/SettingsObj.yaml index 3b674996aa..a0d53b5bcb 100644 --- a/public/openapi/components/schemas/SettingsObj.yaml +++ b/public/openapi/components/schemas/SettingsObj.yaml @@ -37,6 +37,9 @@ Settings: topicSearchEnabled: type: boolean description: Enable keyword searching within topics + updateUrlWithPostIndex: + type: boolean + description: Update url with post index while browsing topics categoryTopicSort: type: string description: Default sorting strategy of the topics in a category @@ -55,6 +58,9 @@ Settings: notificationType_new-chat: type: string description: Notification type for new chat messages + notificationType_new-group-chat: + type: string + description: Notification type for new group chat messages notificationType_new-reply: type: string description: Notification type for new topic replies diff --git a/public/openapi/read/admin/advanced/cache.yaml b/public/openapi/read/admin/advanced/cache.yaml index e642ed0071..06d7890971 100644 --- a/public/openapi/read/admin/advanced/cache.yaml +++ b/public/openapi/read/admin/advanced/cache.yaml @@ -88,28 +88,8 @@ get: type: string enabled: type: boolean - headerFooterCache: - type: object - properties: - length: - type: number - max: - type: number - itemCount: - type: number - percentFull: - type: number - hits: - type: string - misses: - type: string - hitRatio: - type: string - enabled: - type: boolean required: - postCache - groupCache - localCache - - headerFooterCache - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/groups.yaml b/public/openapi/read/admin/manage/groups.yaml index 649147348c..7b7ae1db46 100644 --- a/public/openapi/read/admin/manage/groups.yaml +++ b/public/openapi/read/admin/manage/groups.yaml @@ -64,6 +64,11 @@ get: type: string ownerUid: type: number + memberPostCids: + type: array + items: + type: number + example: [1, 2, 3] required: - name - description diff --git a/public/openapi/read/admin/manage/users.yaml b/public/openapi/read/admin/manage/users.yaml index 4b47e5f112..c3278c007b 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 + showInviteButton: + type: boolean inviteOnly: type: boolean adminInviteOnly: diff --git a/public/openapi/read/groups.yaml b/public/openapi/read/groups.yaml index 90a8c31d1d..a73b29864f 100644 --- a/public/openapi/read/groups.yaml +++ b/public/openapi/read/groups.yaml @@ -58,6 +58,11 @@ get: type: string cover:position: type: string + memberPostCids: + type: array + items: + type: number + example: [1, 2, 3] members: type: array items: diff --git a/public/openapi/read/topic/topic_id/slug/post_index.yaml b/public/openapi/read/topic/topic_id/slug/post_index.yaml index 514f3065e5..47e0a60d2e 100644 --- a/public/openapi/read/topic/topic_id/slug/post_index.yaml +++ b/public/openapi/read/topic/topic_id/slug/post_index.yaml @@ -388,6 +388,8 @@ get: type: number scrollToMyPost: type: boolean + updateUrlWithPostIndex: + type: boolean allowMultipleBadges: type: boolean privateUploads: diff --git a/public/openapi/write.yaml b/public/openapi/write.yaml index 35fed4b3fe..1739a58880 100644 --- a/public/openapi/write.yaml +++ b/public/openapi/write.yaml @@ -32,6 +32,10 @@ paths: $ref: 'write/users.yaml' /users/{uid}: $ref: 'write/users/uid.yaml' + /users/{uid}/content: + $ref: 'write/users/uid/content.yaml' + /users/{uid}/account: + $ref: 'write/users/uid/account.yaml' /users/{uid}/settings: $ref: 'write/users/uid/settings.yaml' /users/{uid}/password: @@ -42,6 +46,12 @@ paths: $ref: 'write/users/uid/ban.yaml' /users/{uid}/tokens/{token}: $ref: 'write/users/uid/tokens/token.yaml' + /users/{uid}/sessions/{uuid}: + $ref: 'write/users/uid/sessions/uuid.yaml' + /users/{uid}/invites: + $ref: 'write/users/uid/invites.yaml' + /users/{uid}/invites/groups: + $ref: 'write/users/uid/invites/groups.yaml' /categories/: $ref: 'write/categories.yaml' /groups/: diff --git a/public/openapi/write/admin/settings/setting.yaml b/public/openapi/write/admin/settings/setting.yaml index dcd85aed56..009f478b81 100644 --- a/public/openapi/write/admin/settings/setting.yaml +++ b/public/openapi/write/admin/settings/setting.yaml @@ -11,13 +11,6 @@ put: required: true description: backend id of the setting to update example: maximumRelatedTopics - - in: path - name: value - schema: - type: string - required: true - description: the value of the new setting - example: 2 requestBody: required: true content: diff --git a/public/openapi/write/groups.yaml b/public/openapi/write/groups.yaml index 8ae4d703f8..8d325c758e 100644 --- a/public/openapi/write/groups.yaml +++ b/public/openapi/write/groups.yaml @@ -37,6 +37,11 @@ post: enum: [0, 1] createtime: type: number + memberPostCids: + type: array + items: + type: number + example: [1, 2, 3] required: - name responses: diff --git a/public/openapi/write/groups/slug.yaml b/public/openapi/write/groups/slug.yaml index eb867a6897..28077e290c 100644 --- a/public/openapi/write/groups/slug.yaml +++ b/public/openapi/write/groups/slug.yaml @@ -1,3 +1,20 @@ +head: + tags: + - groups + summary: check if a group exists + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: group slug (that also acts as its identifier) to check + example: my-test-group + responses: + '200': + description: group found + '404': + description: group not found delete: tags: - groups diff --git a/public/openapi/write/users/uid.yaml b/public/openapi/write/users/uid.yaml index f615c105a8..1e2878364a 100644 --- a/public/openapi/write/users/uid.yaml +++ b/public/openapi/write/users/uid.yaml @@ -1,3 +1,20 @@ +head: + tags: + - users + summary: check if a user exists + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to check + example: 3 + responses: + '200': + description: user found + '404': + description: user not found delete: tags: - users diff --git a/public/openapi/write/users/uid/account.yaml b/public/openapi/write/users/uid/account.yaml new file mode 100644 index 0000000000..51c149e5e6 --- /dev/null +++ b/public/openapi/write/users/uid/account.yaml @@ -0,0 +1,25 @@ +delete: + tags: + - users + summary: delete a single user account (preserve content) + description: This route deletes a single user's account, but preserves the content (posts, bookmarks, etc.) + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to delete + example: 7 + responses: + '200': + description: user account deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/content.yaml b/public/openapi/write/users/uid/content.yaml new file mode 100644 index 0000000000..7b5cd0f641 --- /dev/null +++ b/public/openapi/write/users/uid/content.yaml @@ -0,0 +1,25 @@ +delete: + tags: + - users + summary: delete a single user account's content (preserve account) + description: This route deletes a single user's account content (posts, bookmarks, etc.) but preserves the account itself + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user's content to delete + example: 7 + responses: + '200': + description: user account content deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/invites.yaml b/public/openapi/write/users/uid/invites.yaml new file mode 100644 index 0000000000..9fd3596296 --- /dev/null +++ b/public/openapi/write/users/uid/invites.yaml @@ -0,0 +1,48 @@ +post: + tags: + - users + summary: invite users with email by email + description: This operation sends an invitation email to the given addresses, with an option to join selected groups on acceptance + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user sending invitations + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + emails: + type: string + description: A single or list of comma separated email addresses + example: friend01@example.com,friend02@example.com + groupsToJoin: + type: array + description: A collection of group names + example: ['administrators'] + required: + - emails + responses: + '200': + description: invitation email(s) sent + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + '400': + $ref: ../../../components/responses/400.yaml#/400 + '401': + $ref: ../../../components/responses/401.yaml#/401 + '403': + $ref: ../../../components/responses/403.yaml#/403 \ No newline at end of file diff --git a/public/openapi/write/users/uid/invites/groups.yaml b/public/openapi/write/users/uid/invites/groups.yaml new file mode 100644 index 0000000000..5683db658d --- /dev/null +++ b/public/openapi/write/users/uid/invites/groups.yaml @@ -0,0 +1,23 @@ +get: + tags: + - users + summary: Get group names that the user can invite + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to make the query for + example: 1 + responses: + '200': + description: A collection of group names returned + content: + application/json: + schema: + type: array + items: + type: string + '401': + $ref: ../../../../components/responses/401.yaml#/401 \ No newline at end of file diff --git a/public/openapi/write/users/uid/sessions/uuid.yaml b/public/openapi/write/users/uid/sessions/uuid.yaml new file mode 100644 index 0000000000..4b01dee1e0 --- /dev/null +++ b/public/openapi/write/users/uid/sessions/uuid.yaml @@ -0,0 +1,31 @@ +delete: + tags: + - users + summary: revoke a user session + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user's session + example: 3 + - in: path + name: uuid + schema: + type: string + required: true + description: uuid of the user's session + example: 7c1a66b3-90e1-41f4-9f74-2b2edaebf917 + responses: + '200': + description: user session revoked + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object \ No newline at end of file diff --git a/public/src/admin/manage/group.js b/public/src/admin/manage/group.js index 0d2ff00403..a64a8d88c5 100644 --- a/public/src/admin/manage/group.js +++ b/public/src/admin/manage/group.js @@ -80,6 +80,7 @@ define('admin/manage/group', [ userTitleEnabled: $('#group-userTitleEnabled').is(':checked'), private: $('#group-private').is(':checked'), hidden: $('#group-hidden').is(':checked'), + memberPostCids: $('#memberPostCids').val(), disableJoinRequests: $('#group-disableJoinRequests').is(':checked'), disableLeave: $('#group-disableLeave').is(':checked'), }, diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index fbdd42f846..bba44bf21d 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -1,8 +1,8 @@ 'use strict'; define('admin/manage/users', [ - 'translator', 'benchpress', 'autocomplete', 'api', 'slugify', -], function (translator, Benchpress, autocomplete, api, slugify) { + 'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'accounts/invite', +], function (translator, Benchpress, autocomplete, api, slugify, bootbox, AccountInvite) { var Users = {}; Users.init = function () { @@ -36,8 +36,12 @@ define('admin/manage/users', [ $('.users-table [component="user/select/all"]').prop('checked', false); } - function removeSelected() { - $('.users-table [component="user/select/single"]:checked').parents('.user-row').remove(); + function removeRow(uid) { + const checkboxEl = document.querySelector(`.users-table [component="user/select/single"][data-uid="${uid}"]`); + if (checkboxEl) { + const rowEl = checkboxEl.closest('.user-row'); + rowEl.parentNode.removeChild(rowEl); + } } // use onSuccess instead @@ -253,71 +257,46 @@ define('admin/manage/users', [ }); }); - $('.delete-user').on('click', function () { + $('.delete-user').on('click', () => { + handleDelete('[[admin/manage/users:alerts.confirm-delete]]', '/account'); + }); + + $('.delete-user-content').on('click', () => { + handleDelete('[[admin/manage/users:alerts.confirm-delete-content]]', '/content'); + }); + + $('.delete-user-and-content').on('click', () => { + handleDelete('[[admin/manage/users:alerts.confirm-purge]]', ''); + }); + + function handleDelete(confirmMsg, path) { var uids = getSelectedUids(); if (!uids.length) { return; } - bootbox.confirm('[[admin/manage/users:alerts.confirm-delete]]', function (confirm) { + bootbox.confirm(confirmMsg, function (confirm) { if (confirm) { - socket.emit('admin.user.deleteUsers', uids, function (err) { - if (err) { - return app.alertError(err.message); + Promise.all(uids.map(uid => api.del(`/users/${uid}${path}`, {}) + .then(() => { + if (path !== '/content') { + removeRow(uid); + } + }) + )).then(() => { + if (path !== '/content') { + app.alertSuccess('[[admin/manage/users:alerts.delete-success]]'); + } else { + app.alertSuccess('[[admin/manage/users:alerts.delete-content-success]]'); } - - app.alertSuccess('[[admin/manage/users:alerts.delete-success]]'); - removeSelected(); unselectAll(); if (!$('.users-table [component="user/select/single"]').length) { ajaxify.refresh(); } - }); + }).catch(app.alertError); } }); - }); - - $('.delete-user-content').on('click', function () { - var uids = getSelectedUids(); - if (!uids.length) { - return; - } - - bootbox.confirm('[[admin/manage/users:alerts.confirm-delete-content]]', function (confirm) { - if (confirm) { - socket.emit('admin.user.deleteUsersContent', uids, function (err) { - if (err) { - return app.alertError(err.message); - } - - app.alertSuccess('[[admin/manage/users:alerts.delete-content-success]]'); - }); - } - }); - }); - - $('.delete-user-and-content').on('click', function () { - var uids = getSelectedUids(); - if (!uids.length) { - return; - } - bootbox.confirm('[[admin/manage/users:alerts.confirm-purge]]', function (confirm) { - if (confirm) { - socket.emit('admin.user.deleteUsersAndContent', uids, function (err) { - if (err) { - return app.alertError(err.message); - } - - app.alertSuccess('[[admin/manage/users:alerts.delete-success]]'); - removeSelected(); - unselectAll(); - if (!$('.users-table [component="user/select/single"]').length) { - ajaxify.refresh(); - } - }); - } - }); - }); + } function handleUserCreate() { $('[data-action="create"]').on('click', function () { @@ -380,13 +359,10 @@ define('admin/manage/users', [ } handleSearch(); - handleUserCreate(); - - handleInvite(); - handleSort(); handleFilter(); + AccountInvite.handle(); }; function handleSearch() { @@ -453,24 +429,6 @@ define('admin/manage/users', [ }); } - function handleInvite() { - $('[component="user/invite"]').on('click', function () { - bootbox.prompt('[[admin/manage/users:alerts.prompt-email]]', function (email) { - if (!email) { - return; - } - - socket.emit('user.invite', email, function (err) { - if (err) { - return app.alertError(err.message); - } - app.alertSuccess('[[admin/manage/users:alerts.email-sent-to, ' + email + ']]'); - }); - }); - return false; - }); - } - function buildSearchQuery(params) { if ($('#user-search').val()) { params.query = $('#user-search').val(); diff --git a/public/src/app.js b/public/src/app.js index b8ae62ac7b..14a3593917 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -244,7 +244,10 @@ app.cacheBuster = null; $('#main-nav li') .removeClass('active') .find('a') - .filter(function (i, x) { return window.location.pathname.startsWith(x.getAttribute('href')); }) + .filter(function (i, x) { + return window.location.pathname === x.pathname || + window.location.pathname.startsWith(x.pathname + '/'); + }) .parent() .addClass('active'); } diff --git a/public/src/client/topic.js b/public/src/client/topic.js index b193b8cc9e..c54c631c5a 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -227,7 +227,7 @@ define('forum/topic', [ updateUserBookmark(index); Topic.replaceURLTimeout = 0; - if (history.replaceState) { + if (ajaxify.data.updateUrlWithPostIndex && history.replaceState) { var search = window.location.search || ''; if (!config.usePagination) { search = (search && !/^\?page=\d+$/.test(search) ? search : ''); diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index 6db44e7050..bb42e1e026 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -96,7 +96,7 @@ define('forum/topic/events', [ } function onPostEdited(data) { - if (!data || !data.post) { + if (!data || !data.post || parseInt(data.post.tid, 10) !== parseInt(ajaxify.data.tid, 10)) { return; } var editedPostEl = components.get('post/content', data.post.pid).filter(function (index, el) { @@ -174,6 +174,9 @@ define('forum/topic/events', [ } function onPostPurged(postData) { + if (!postData || parseInt(postData.tid, 10) !== parseInt(ajaxify.data.tid, 10)) { + return; + } components.get('post', 'pid', postData.pid).fadeOut(500, function () { $(this).remove(); posts.showBottomPostBar(); diff --git a/public/src/client/users.js b/public/src/client/users.js index 859d0e686b..50ecab2ac1 100644 --- a/public/src/client/users.js +++ b/public/src/client/users.js @@ -2,8 +2,8 @@ define('forum/users', [ - 'translator', 'benchpress', 'api', -], function (translator, Benchpress, api) { + 'translator', 'benchpress', 'api', 'accounts/invite', +], function (translator, Benchpress, api, AccountInvite) { var Users = {}; var searchTimeoutID = 0; @@ -25,7 +25,7 @@ define('forum/users', [ Users.handleSearch(); - handleInvite(); + AccountInvite.handle(); socket.removeListener('event:user_status_change', onUserStatusChange); socket.on('event:user_status_change', onUserStatusChange); @@ -135,22 +135,5 @@ define('forum/users', [ return utils.params().section || ''; } - function handleInvite() { - $('[component="user/invite"]').on('click', function () { - bootbox.prompt('[[users:prompt-email]]', function (email) { - if (!email) { - return; - } - - socket.emit('user.invite', email, function (err) { - if (err) { - return app.alertError(err.message); - } - app.alertSuccess('[[users:invitation-email-sent, ' + email + ']]'); - }); - }); - }); - } - return Users; }); diff --git a/public/src/modules/accounts/delete.js b/public/src/modules/accounts/delete.js index 06a9003c79..3be11dd4a1 100644 --- a/public/src/modules/accounts/delete.js +++ b/public/src/modules/accounts/delete.js @@ -1,13 +1,13 @@ 'use strict'; -define('accounts/delete', [], function () { +define('accounts/delete', ['api', 'bootbox'], function (api) { var Delete = {}; Delete.account = function (uid, callback) { executeAction( uid, '[[user:delete_this_account_confirm]]', - 'admin.user.deleteUsers', + '/account', '[[user:account-deleted]]', callback ); @@ -17,7 +17,7 @@ define('accounts/delete', [], function () { executeAction( uid, '[[user:delete_account_content_confirm]]', - 'admin.user.deleteUsersContent', + '/content', '[[user:account-content-deleted]]', callback ); @@ -27,22 +27,19 @@ define('accounts/delete', [], function () { executeAction( uid, '[[user:delete_all_confirm]]', - 'admin.user.deleteUsersAndContent', + '', '[[user:account-deleted]]', callback ); }; - function executeAction(uid, confirmText, action, successText, callback) { + function executeAction(uid, confirmText, path, successText, callback) { bootbox.confirm(confirmText, function (confirm) { if (!confirm) { return; } - socket.emit(action, [uid], function (err) { - if (err) { - return app.alertError(err.message); - } + api.del(`/users/${uid}${path}`, {}).then(() => { app.alertSuccess(successText); if (typeof callback === 'function') { diff --git a/public/src/modules/accounts/invite.js b/public/src/modules/accounts/invite.js new file mode 100644 index 0000000000..621c84bcba --- /dev/null +++ b/public/src/modules/accounts/invite.js @@ -0,0 +1,64 @@ +'use strict'; + +define('accounts/invite', ['api', 'benchpress', 'bootbox'], function (api, Benchpress, bootbox) { + const Invite = {}; + + function isACP() { + return ajaxify.data.template.name.startsWith('admin/'); + } + + Invite.handle = function () { + $('[component="user/invite"]').on('click', function (e) { + e.preventDefault(); + api.get(`/api/v3/users/${app.user.uid}/invites/groups`, {}).then((groups) => { + Benchpress.parse('modals/invite', { groups: groups }, function (html) { + bootbox.dialog({ + message: html, + title: `[[${isACP ? 'admin/manage/users:invite' : 'users:invite'}]]`, + onEscape: true, + buttons: { + cancel: { + label: `[[${isACP ? 'admin/manage/users:alerts.button-cancel' : 'modules:bootbox.cancel'}]]`, + className: 'btn-default', + }, + invite: { + label: `[[${isACP ? 'admin/manage/users:invite' : 'users:invite'}]]`, + className: 'btn-primary', + callback: Invite.send, + }, + }, + }); + }); + }).catch((err) => { + app.alertError(err.message); + }); + }); + }; + + Invite.send = function () { + var $emails = $('#invite-modal-emails'); + var $groups = $('#invite-modal-groups'); + + var data = { + emails: $emails.val() + .split(',') + .map(m => m.trim()) + .filter(Boolean) + .filter((m, i, arr) => i === arr.indexOf(m)) + .join(','), + groupsToJoin: $groups.val(), + }; + + if (!data.emails) { + return; + } + + api.post(`/users/${app.user.uid}/invites`, data).then(() => { + app.alertSuccess(`[[${isACP ? 'admin/manage/users:alerts.email-sent-to' : 'users:invitation-email-sent'}, ${data.emails.replace(/,/g, ', ')}]]`); + }).catch((err) => { + app.alertError(err.message); + }); + }; + + return Invite; +}); diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index be9e89fa41..2fd50d5703 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -311,7 +311,28 @@ if (key) { return translation.then(function (x) { - return x[key]; + if (typeof x[key] === 'string') return x[key]; + const keyParts = key.split('.'); + for (let i = 0; i <= keyParts.length; i++) { + if (i === keyParts.length) { + // default to trying to find key with the same name as parent or equal to empty string + return x[keyParts[i - 1]] !== undefined ? x[keyParts[i - 1]] : x['']; + } + switch (typeof x[keyParts[i]]) { + case 'object': + x = x[keyParts[i]]; + break; + case 'string': + if (i === keyParts.length - 1) { + return x[keyParts[i]]; + } + + return false; + + default: + return false; + } + } }); } return translation; diff --git a/src/api/users.js b/src/api/users.js index e9cd6dea2c..d83d740371 100644 --- a/src/api/users.js +++ b/src/api/users.js @@ -81,13 +81,21 @@ usersAPI.update = async function (caller, data) { return userData; }; -usersAPI.delete = async function (caller, data) { - processDeletion(data.uid, caller); +usersAPI.delete = async function (caller, { uid, password }) { + processDeletion({ uid: uid, method: 'delete', password, caller }); +}; + +usersAPI.deleteContent = async function (caller, { uid, password }) { + processDeletion({ uid, method: 'deleteContent', password, caller }); +}; + +usersAPI.deleteAccount = async function (caller, { uid, password }) { + processDeletion({ uid, method: 'deleteAccount', password, caller }); }; usersAPI.deleteMany = async function (caller, data) { if (await canDeleteUids(data.uids)) { - await Promise.all(data.uids.map(uid => processDeletion(uid, caller))); + await Promise.all(data.uids.map(uid => processDeletion({ uid, method: 'delete', caller }))); } }; @@ -229,22 +237,56 @@ async function isPrivilegedOrSelfAndPasswordMatch(caller, data) { } } -async function processDeletion(uid, caller) { +async function processDeletion({ uid, method, password, caller }) { const isTargetAdmin = await user.isAdministrator(uid); const isSelf = parseInt(uid, 10) === caller.uid; const isAdmin = await user.isAdministrator(caller.uid); - if (!isSelf && !isAdmin) { + if (meta.config.allowAccountDelete !== 1) { throw new Error('[[error:no-privileges]]'); - } else if (!isSelf && isTargetAdmin) { + } else if (!isSelf && !isAdmin) { + throw new Error('[[error:no-privileges]]'); + } else if (isTargetAdmin) { throw new Error('[[error:cant-delete-other-admins]]'); } + // Privilege checks -- only deleteAccount is available for non-admins + const hasAdminPrivilege = await privileges.admin.can('admin:users', caller.uid); + if (!hasAdminPrivilege && ['delete', 'deleteContent'].includes(method)) { + throw new Error('[[error:no-privileges]]'); + } + + // Self-deletions require a password + const hasPassword = await user.hasPassword(uid); + if (isSelf && hasPassword) { + const ok = await user.isPasswordCorrect(uid, password, caller.ip); + if (!ok) { + throw new Error('[[error:invalid-password]]'); + } + } + // TODO: clear user tokens for this uid await flags.resolveFlag('user', uid, caller.uid); - const userData = await user.delete(caller.uid, uid); + + let userData; + if (method === 'deleteAccount') { + userData = await user[method](uid); + } else { + userData = await user[method](caller.uid, uid); + } + userData = userData || {}; + + sockets.server.sockets.emit('event:user_status_change', { uid: caller.uid, status: 'offline' }); + + plugins.fireHook('action:user.delete', { + callerUid: caller.uid, + uid: uid, + ip: caller.ip, + user: userData, + }); + await events.log({ - type: 'user-delete', + type: `user-${method}`, uid: caller.uid, targetUid: uid, ip: caller.ip, diff --git a/src/controllers/admin/cache.js b/src/controllers/admin/cache.js index fadec76338..840ff65efa 100644 --- a/src/controllers/admin/cache.js +++ b/src/controllers/admin/cache.js @@ -9,7 +9,6 @@ cacheController.get = function (req, res) { const groupCache = require('../../groups').cache; const objectCache = require('../../database').objectCache; const localCache = require('../../cache'); - const headerFooterCache = require('../../middleware').headerFooterCache; function getInfo(cache) { return { @@ -28,7 +27,6 @@ cacheController.get = function (req, res) { postCache: getInfo(postCache), groupCache: getInfo(groupCache), localCache: getInfo(localCache), - headerFooterCache: getInfo(headerFooterCache), }; if (objectCache) { @@ -44,7 +42,6 @@ cacheController.dump = function (req, res, next) { object: require('../../database').objectCache, group: require('../../groups').cache, local: require('../../cache'), - headerfooter: require('../../middleware').headerFooterCache, }; if (!caches[req.query.name]) { return next(); diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index 3acd0cd808..99f3d4231b 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -9,6 +9,7 @@ const db = require('../../database'); const pagination = require('../../pagination'); const events = require('../../events'); const plugins = require('../../plugins'); +const privileges = require('../../privileges'); const utils = require('../../utils'); const usersController = module.exports; @@ -115,7 +116,7 @@ async function getUsers(req, res) { getUsersWithFields(set), ]); - render(req, res, { + await render(req, res, { users: users.filter(user => user && parseInt(user.uid, 10)), page: page, pageCount: Math.max(1, Math.ceil(count / resultsPerPage)), @@ -176,7 +177,7 @@ usersController.search = async function (req, res) { searchData.resultsPerPage = resultsPerPage; searchData.sortBy = req.query.sortBy; searchData.reverse = reverse; - render(req, res, searchData); + await render(req, res, searchData); }; usersController.registrationQueue = async function (req, res) { @@ -226,7 +227,7 @@ async function getInvites() { return invitations; } -function render(req, res, data) { +async function render(req, res, data) { data.pagination = pagination.create(data.page, data.pageCount, req.query); const registrationType = meta.config.registrationType; @@ -241,6 +242,13 @@ function render(req, res, data) { filterBy.forEach(function (filter) { data['filterBy_' + validator.escape(String(filter))] = true; }); + + if (data.adminInviteOnly) { + data.showInviteButton = await privileges.users.isAdministrator(req.uid); + } else { + data.showInviteButton = await privileges.users.hasInvitePrivilege(req.uid); + } + res.render('admin/manage/users', data); } diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index 2b59a835a0..7d52e76082 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -55,7 +55,11 @@ async function registerAndLoginUser(req, res, userData) { await authenticationController.doLogin(req, uid); } - user.deleteInvitationKey(userData.email); + // Distinguish registrations through invites from direct ones + if (userData.token) { + await user.joinGroupsFromInvitation(uid, userData.email); + } + await user.deleteInvitationKey(userData.email); const referrer = req.body.referrer || req.session.referrer || nconf.get('relative_path') + '/'; const complete = await plugins.fireHook('filter:register.complete', { uid: uid, referrer: referrer }); req.session.returnTo = complete.referrer; @@ -74,7 +78,7 @@ authenticationController.register = async function (req, res) { const userData = req.body; try { - if (registrationType === 'invite-only' || registrationType === 'admin-invite-only') { + if (userData.token || registrationType === 'invite-only' || registrationType === 'admin-invite-only') { await user.verifyInvitation(userData); } @@ -118,7 +122,17 @@ authenticationController.register = async function (req, res) { async function addToApprovalQueue(req, userData) { userData.ip = req.ip; await user.addToApprovalQueue(userData); - return { message: '[[register:registration-added-to-queue]]' }; + let message = '[[register:registration-added-to-queue]]'; + if (meta.config.showAverageApprovalTime) { + const average_time = await db.getObjectField('registration:queue:approval:times', 'average'); + if (average_time > 0) { + message += ` [[register:registration-queue-average-time, ${Math.floor(average_time / 60)}, ${average_time % 60}]]`; + } + } + if (meta.config.autoApproveTime > 0) { + message += ` [[register:registration-queue-auto-approve-time, ${meta.config.autoApproveTime}]]`; + } + return { message: message }; } authenticationController.registerComplete = function (req, res, next) { diff --git a/src/controllers/composer.js b/src/controllers/composer.js index 5d9e3a3260..3a30e3dab0 100644 --- a/src/controllers/composer.js +++ b/src/controllers/composer.js @@ -77,7 +77,7 @@ exports.post = async function (req, res) { throw new Error('[[error:invalid-data]]'); } if (result.queued) { - return res.redirect((nconf.get('relative_path') || '/')); + return res.redirect((nconf.get('relative_path') || '/') + '?noScriptMessage=[[success:post-queued]]'); } const uid = result.uid ? result.uid : result.topicData.uid; user.updateOnlineUsers(uid); diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index cf07d469cb..8bbe2ffe1a 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -144,7 +144,7 @@ helpers.notAllowed = async function (req, res, error) { }; helpers.redirect = function (res, url, permanent) { - if (res.locals.isAPI && !url.startsWith('/api/v3/')) { + if (res.locals.isAPI) { res.set('X-Redirect', encodeURI(url)).status(200).json(url); } else { res.redirect(permanent ? 308 : 307, relative_path + encodeURI(url)); diff --git a/src/controllers/index.js b/src/controllers/index.js index 285ac8d78b..51e866a051 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -40,7 +40,7 @@ Controllers.composer = require('./composer'); Controllers.write = require('./write'); -Controllers.reset = function (req, res, next) { +Controllers.reset = async function (req, res) { if (meta.config['password:disableEdit']) { return helpers.notAllowed(req, res); } @@ -78,14 +78,9 @@ Controllers.reset = function (req, res, next) { if (req.session.reset_code) { // Validate and save to local variable before removing from session - user.reset.validate(req.session.reset_code, function (err, valid) { - if (err) { - return next(err); - } - - renderReset(req.session.reset_code, valid); - delete req.session.reset_code; - }); + const valid = await user.reset.validate(req.session.reset_code); + renderReset(req.session.reset_code, valid); + delete req.session.reset_code; } else { res.render('reset', { code: null, @@ -97,14 +92,14 @@ Controllers.reset = function (req, res, next) { } }; -Controllers.login = function (req, res, next) { - var data = { loginFormEntry: [] }; - var loginStrategies = require('../routes/authentication').getLoginStrategies(); - var registrationType = meta.config.registrationType || 'normal'; - var allowLoginWith = (meta.config.allowLoginWith || 'username-email'); - var returnTo = (req.headers['x-return-to'] || '').replace(nconf.get('base_url') + nconf.get('relative_path'), ''); +Controllers.login = async function (req, res) { + const data = { loginFormEntry: [] }; + const loginStrategies = require('../routes/authentication').getLoginStrategies(); + const registrationType = meta.config.registrationType || 'normal'; + const allowLoginWith = (meta.config.allowLoginWith || 'username-email'); + const returnTo = (req.headers['x-return-to'] || '').replace(nconf.get('base_url') + nconf.get('relative_path'), ''); - var errorText; + let errorText; if (req.query.error === 'csrf-invalid') { errorText = '[[error:csrf-invalid]]'; } else if (req.query.error) { @@ -126,33 +121,24 @@ Controllers.login = function (req, res, next) { data.title = '[[pages:login]]'; data.allowPasswordReset = !meta.config['password:disableEdit']; - privileges.global.canGroup('local:login', 'registered-users', function (err, hasLoginPrivilege) { - if (err) { - return next(err); - } + const hasLoginPrivilege = await privileges.global.canGroup('local:login', 'registered-users'); + data.allowLocalLogin = hasLoginPrivilege || parseInt(req.query.local, 10) === 1; - 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); - } - if (req.loggedIn) { - user.getUserFields(req.uid, ['username', 'email'], function (err, user) { - if (err) { - return next(err); - } - data.username = allowLoginWith === 'email' ? user.email : user.username; - data.alternate_logins = false; - res.render('login', data); + 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, }); - } else { - res.render('login', data); } - }); + return res.redirect(nconf.get('relative_path') + data.authentication[0].url); + } + + if (req.loggedIn) { + const userData = await user.getUserFields(req.uid, ['username', 'email']); + data.username = allowLoginWith === 'email' ? userData.email : userData.username; + data.alternate_logins = false; + } + res.render('login', data); }; Controllers.register = async function (req, res, next) { @@ -246,8 +232,8 @@ Controllers.robots = function (req, res) { } }; -Controllers.manifest = function (req, res, next) { - var manifest = { +Controllers.manifest = async function (req, res) { + const manifest = { name: meta.config.title || 'NodeBB', short_name: meta.config['title:short'] || meta.config.title || 'NodeBB', start_url: nconf.get('url'), @@ -312,18 +298,21 @@ Controllers.manifest = function (req, res, next) { }); } - plugins.fireHook('filter:manifest.build', { req: req, res: res, manifest: manifest }, function (err, data) { - if (err) { - return next(err); - } - res.status(200).json(data.manifest); + const data = await plugins.fireHook('filter:manifest.build', { + req: req, + res: res, + manifest: manifest, }); + res.status(200).json(data.manifest); }; Controllers.outgoing = function (req, res, next) { - var url = req.query.url || ''; - var allowedProtocols = ['http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', 'webcal']; - var parsed = require('url').parse(url); + const url = req.query.url || ''; + const allowedProtocols = [ + 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', + 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', 'webcal', + ]; + const parsed = require('url').parse(url); if (!url || !parsed.protocol || !allowedProtocols.includes(parsed.protocol.slice(0, -1))) { return next(); diff --git a/src/controllers/topics.js b/src/controllers/topics.js index 2b40f4595b..5da598ebd2 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -5,6 +5,7 @@ const nconf = require('nconf'); const user = require('../user'); const meta = require('../meta'); const topics = require('../topics'); +const categories = require('../categories'); const posts = require('../posts'); const privileges = require('../privileges'); const helpers = require('./helpers'); @@ -81,6 +82,7 @@ topicsController.get = async function getTopic(req, res, callback) { topicData.postEditDuration = meta.config.postEditDuration; topicData.postDeleteDuration = meta.config.postDeleteDuration; topicData.scrollToMyPost = settings.scrollToMyPost; + topicData.updateUrlWithPostIndex = settings.updateUrlWithPostIndex; topicData.allowMultipleBadges = meta.config.allowMultipleBadges === 1; topicData.privateUploads = meta.config.privateUploads === 1; topicData.rssFeedUrl = relative_path + '/topic/' + topicData.tid + '.rss'; @@ -92,6 +94,7 @@ topicsController.get = async function getTopic(req, res, callback) { await Promise.all([ buildBreadcrumbs(topicData), + addOldCategory(topicData, userPrivileges), addTags(topicData, req, res), incrementViewCount(req, tid), markAsRead(req, tid), @@ -165,6 +168,14 @@ async function buildBreadcrumbs(topicData) { topicData.breadcrumbs = parentCrumbs.concat(breadcrumbs); } +async function addOldCategory(topicData, userPrivileges) { + if (userPrivileges.isAdminOrMod && topicData.oldCid) { + topicData.oldCategory = await categories.getCategoryFields( + topicData.oldCid, ['cid', 'name', 'icon', 'bgColor', 'color', 'slug'] + ); + } +} + async function addTags(topicData, req, res) { const postIndex = parseInt(req.params.post_index, 10) || 0; const postAtIndex = topicData.posts.find(p => parseInt(p.index, 10) === parseInt(Math.max(0, postIndex - 1), 10)); diff --git a/src/controllers/users.js b/src/controllers/users.js index eef5b9c0e5..17d10fd517 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -96,7 +96,7 @@ async function renderIfAdminOrGlobalMod(set, req, res) { usersController.renderUsersPage = async function (set, req, res) { const userData = await usersController.getUsers(set, req.uid, req.query); - render(req, res, userData); + await render(req, res, userData); }; usersController.getUsers = async function (set, uid, query) { @@ -171,10 +171,15 @@ async function render(req, res, data) { data.inviteOnly = registrationType === 'invite-only' || registrationType === 'admin-invite-only'; data.adminInviteOnly = registrationType === 'admin-invite-only'; data.invites = await user.getInvitesNumber(req.uid); - data.showInviteButton = req.loggedIn && ( - (registrationType === 'invite-only' && (data.isAdmin || !data.maximumInvites || data.invites < data.maximumInvites)) || - (registrationType === 'admin-invite-only' && data.isAdmin) - ); + + data.showInviteButton = false; + if (data.adminInviteOnly) { + data.showInviteButton = await privileges.users.isAdministrator(req.uid); + } else if (req.loggedIn) { + const canInvite = await privileges.users.hasInvitePrivilege(req.uid); + data.showInviteButton = canInvite && (!data.maximumInvites || data.invites < data.maximumInvites); + } + data['reputation:disabled'] = meta.config['reputation:disabled']; res.append('X-Total-Count', data.userCount); diff --git a/src/controllers/write/users.js b/src/controllers/write/users.js index 61bfc8827e..5e3c7acbc5 100644 --- a/src/controllers/write/users.js +++ b/src/controllers/write/users.js @@ -1,12 +1,14 @@ 'use strict'; const util = require('util'); +const nconf = require('nconf'); const db = require('../../database'); const api = require('../../api'); -const user = require('../../user'); +const groups = require('../../groups'); const meta = require('../../meta'); const privileges = require('../../privileges'); +const user = require('../../user'); const utils = require('../../utils'); const helpers = require('../helpers'); @@ -25,7 +27,7 @@ Users.redirectBySlug = async (req, res) => { if (uid) { const path = req.path.split('/').slice(3).join('/'); - helpers.redirect(res, `/api/v3/users/${uid}/${path}`, true); + res.redirect(308, nconf.get('relative_path') + encodeURI(`/api/v3/users/${uid}/${path}`)); } else { helpers.formatApiResponse(404, res); } @@ -47,7 +49,17 @@ Users.update = async (req, res) => { }; Users.delete = async (req, res) => { - await api.users.delete(req, req.params); + await api.users.delete(req, { ...req.params, password: req.body.password }); + helpers.formatApiResponse(200, res); +}; + +Users.deleteContent = async (req, res) => { + await api.users.deleteContent(req, { ...req.params, password: req.body.password }); + helpers.formatApiResponse(200, res); +}; + +Users.deleteAccount = async (req, res) => { + await api.users.deleteAccount(req, { ...req.params, password: req.body.password }); helpers.formatApiResponse(200, res); }; @@ -152,3 +164,60 @@ Users.revokeSession = async (req, res) => { await user.auth.revokeSession(_id, req.params.uid); helpers.formatApiResponse(200, res); }; + +Users.invite = async (req, res) => { + const { emails, groupsToJoin = [] } = req.body; + + if (!emails || !Array.isArray(groupsToJoin)) { + return helpers.formatApiResponse(400, res, new Error('[[error:invalid-data]]')); + } + + // For simplicity, this API route is restricted to self-use only. This can change if needed. + if (parseInt(req.user.uid, 10) !== parseInt(req.params.uid, 10)) { + return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]')); + } + + const canInvite = await privileges.users.hasInvitePrivilege(req.uid); + if (!canInvite) { + return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]')); + } + + const registrationType = meta.config.registrationType; + const isAdmin = await user.isAdministrator(req.uid); + if (registrationType === 'admin-invite-only' && !isAdmin) { + return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]')); + } + + const inviteGroups = await groups.getUserInviteGroups(req.uid); + const cannotInvite = groupsToJoin.some(group => !inviteGroups.includes(group)); + if (groupsToJoin.length > 0 && cannotInvite) { + return helpers.formatApiResponse(403, res, new Error('[[error:no-privileges]]')); + } + + const max = meta.config.maximumInvites; + const emailsArr = emails.split(',').map(email => email.trim()).filter(Boolean); + + for (const email of emailsArr) { + /* eslint-disable no-await-in-loop */ + let invites = 0; + if (max) { + invites = await user.getInvitesNumber(req.uid); + } + if (!isAdmin && max && invites >= max) { + return helpers.formatApiResponse(403, res, new Error('[[error:invite-maximum-met, ' + invites + ', ' + max + ']]')); + } + + await user.sendInvitationEmail(req.uid, email, groupsToJoin); + } + + return helpers.formatApiResponse(200, res); +}; + +Users.getInviteGroups = async function (req, res) { + if (parseInt(req.params.uid, 10) !== parseInt(req.user.uid, 10)) { + return helpers.formatApiResponse(401, res); + } + + const userInviteGroups = await groups.getUserInviteGroups(req.params.uid); + return helpers.formatApiResponse(200, res, userInviteGroups); +}; diff --git a/src/emailer.js b/src/emailer.js index ac8abc9a14..9a5d67e07d 100644 --- a/src/emailer.js +++ b/src/emailer.js @@ -81,9 +81,7 @@ const buildCustomTemplates = async (config) => { await Promise.all(templatesToBuild.map(async (template) => { const source = await meta.templates.processImports(paths, template.path, template.text); - const compiled = await Benchpress.precompile(source, { - minify: global.env !== 'development', - }); + const compiled = await Benchpress.precompile(source, { filename: template.path }); await fs.promises.writeFile(template.fullpath.replace(/\.tpl$/, '.js'), compiled); })); diff --git a/src/flags.js b/src/flags.js index 3292cdd946..98ecfb2251 100644 --- a/src/flags.js +++ b/src/flags.js @@ -257,6 +257,9 @@ Flags.validate = async function (payload) { throw new Error('[[error:not-enough-reputation-to-flag]]'); } } else if (payload.type === 'user') { + if (parseInt(payload.id, 10) === parseInt(payload.uid, 10)) { + throw new Error('[[error:cant-flag-self]]'); + } const editable = await privileges.users.canEdit(payload.uid, payload.id); if (!editable && !meta.config['reputation:disabled'] && reporter.reputation < meta.config['min:rep:flag']) { throw new Error('[[error:not-enough-reputation-to-flag]]'); @@ -395,7 +398,7 @@ Flags.create = async function (type, id, uid, reason, timestamp) { posts.setPostField(id, 'flagId', flagId) ); - if (targetUid) { + if (targetUid && parseInt(targetUid, 10) !== parseInt(uid, 10)) { batched.push(user.incrementUserFlagsBy(targetUid, 1)); } } else if (type === 'user') { diff --git a/src/groups/data.js b/src/groups/data.js index c866902b4c..6747fc0078 100644 --- a/src/groups/data.js +++ b/src/groups/data.js @@ -75,6 +75,7 @@ function modifyGroup(group, fields) { group.icon = validator.escape(String(group.icon || '')); group.createtimeISO = utils.toISOString(group.createtime); group.private = ([null, undefined].includes(group.private)) ? 1 : group.private; + group.memberPostCids = (group.memberPostCids || '').split(',').map(cid => parseInt(cid, 10)).filter(Boolean); group['cover:thumb:url'] = group['cover:thumb:url'] || group['cover:url']; diff --git a/src/groups/index.js b/src/groups/index.js index 4140e558f9..732f415e6b 100644 --- a/src/groups/index.js +++ b/src/groups/index.js @@ -1,6 +1,7 @@ 'use strict'; const user = require('../user'); +const categories = require('../categories'); const db = require('../database'); const plugins = require('../plugins'); const slugify = require('../slugify'); @@ -119,9 +120,10 @@ Groups.get = async function (groupName, options) { stop = (parseInt(options.userListCount, 10) || 4) - 1; } - const [groupData, members, pending, invited, isMember, isPending, isInvited, isOwner] = await Promise.all([ + const [groupData, members, selectCategories, pending, invited, isMember, isPending, isInvited, isOwner] = await Promise.all([ Groups.getGroupData(groupName), Groups.getOwnersAndMembers(groupName, options.uid, 0, stop), + categories.buildForSelect(groupName, 'topics:read', []), Groups.getUsersFromSet('group:' + groupName + ':pending', ['username', 'userslug', 'picture']), Groups.getUsersFromSet('group:' + groupName + ':invited', ['username', 'userslug', 'picture']), Groups.isMember(options.uid, groupName), @@ -135,6 +137,10 @@ Groups.get = async function (groupName, options) { } const descriptionParsed = await plugins.fireHook('filter:parse.raw', groupData.description); groupData.descriptionParsed = descriptionParsed; + groupData.categories = selectCategories.map((category) => { + category.selected = groupData.memberPostCids.includes(category.cid); + return category; + }); groupData.members = members; groupData.membersNextStart = stop + 1; groupData.pending = pending.filter(Boolean); diff --git a/src/groups/posts.js b/src/groups/posts.js index a96cd9e217..465f060b4b 100644 --- a/src/groups/posts.js +++ b/src/groups/posts.js @@ -1,6 +1,7 @@ 'use strict'; const db = require('../database'); +const groups = require('.'); const privileges = require('../privileges'); const posts = require('../posts'); @@ -13,6 +14,10 @@ module.exports = function (Groups) { let groupNames = await Groups.getUserGroupMembership('groups:visible:createtime', [postData.uid]); groupNames = groupNames[0]; + // Only process those groups that have the cid in its memberPostCids setting (or no setting at all) + const groupsCids = await groups.getGroupsFields(groupNames, ['memberPostCids']); + groupNames = groupNames.filter((groupName, idx) => !groupsCids[idx].memberPostCids.length || groupsCids[idx].memberPostCids.includes(postData.cid)); + const keys = groupNames.map(groupName => 'group:' + groupName + ':member:pids'); await db.sortedSetsAdd(keys, postData.timestamp, postData.pid); await Promise.all(groupNames.map(name => truncateMemberPosts(name))); diff --git a/src/groups/update.js b/src/groups/update.js index eb477944c5..50027fc9bd 100644 --- a/src/groups/update.js +++ b/src/groups/update.js @@ -2,6 +2,7 @@ const winston = require('winston'); +const categories = require('../categories'); const plugins = require('../plugins'); const slugify = require('../slugify'); const db = require('../database'); @@ -18,11 +19,10 @@ module.exports = function (Groups) { throw new Error('[[error:no-group]]'); } - const result = await plugins.fireHook('filter:group.update', { + ({ values } = await plugins.fireHook('filter:group.update', { groupName: groupName, values: values, - }); - values = result.values; + })); const payload = { description: values.description || '', @@ -66,6 +66,12 @@ module.exports = function (Groups) { if (values.hasOwnProperty('hidden')) { await updateVisibility(groupName, values.hidden); } + + if (values.hasOwnProperty('memberPostCids')) { + const validCids = await categories.getCidsByPrivilege('categories:cid', groupName, 'topics:read'); + payload.memberPostCids = values.memberPostCids.filter(cid => validCids.includes(cid)).join(',') || ''; + } + await db.setObject('group:' + groupName, payload); await Groups.renameGroup(groupName, values.name); diff --git a/src/groups/user.js b/src/groups/user.js index 4cb01ce9e2..5255adff1a 100644 --- a/src/groups/user.js +++ b/src/groups/user.js @@ -31,4 +31,34 @@ module.exports = function (Groups) { const isMembers = await Groups.isMemberOfGroups(uid, groupNames); return groupNames.filter((name, i) => isMembers[i]); } + + Groups.getUserInviteGroups = async function (uid) { + let allGroups = await Groups.getNonPrivilegeGroups('groups:createtime', 0, -1); + allGroups = allGroups.filter(group => !Groups.ephemeralGroups.includes(group.name)); + + const publicGroups = allGroups.filter(group => group.hidden === 0 && group.system === 0 && group.private === 0); + const adminModGroups = [{ name: 'administrators' }, { name: 'Global Moderators' }]; + // Private (but not hidden) + const privateGroups = allGroups.filter(group => group.hidden === 0 && group.system === 0 && group.private === 1); + + const [ownership, isAdmin, isGlobalMod] = await Promise.all([ + Promise.all(privateGroups.map(group => Groups.ownership.isOwner(uid, group.name))), + user.isAdministrator(uid), + user.isGlobalModerator(uid), + ]); + const ownGroups = privateGroups.filter((group, index) => ownership[index]); + + let inviteGroups = []; + if (isAdmin) { + inviteGroups = inviteGroups.concat(adminModGroups).concat(privateGroups); + } else if (isGlobalMod) { + inviteGroups = inviteGroups.concat(privateGroups); + } else { + inviteGroups = inviteGroups.concat(ownGroups); + } + + return inviteGroups + .concat(publicGroups) + .map(group => group.name); + }; }; diff --git a/src/messaging/create.js b/src/messaging/create.js index 1f8a3b48f0..2d6a10b8e8 100644 --- a/src/messaging/create.js +++ b/src/messaging/create.js @@ -22,12 +22,13 @@ module.exports = function (Messaging) { } const maximumChatMessageLength = meta.config.maximumChatMessageLength || 1000; - const data = await plugins.fireHook('filter:messaging.checkContent', { content: content }); - content = String(data.content).trim(); + content = String(content).trim(); + let length = String(content.length).trim(); + ({ content, length } = await plugins.fireHook('filter:messaging.checkContent', { content, length })); if (!content) { throw new Error('[[error:invalid-chat-message]]'); } - if (content.length > maximumChatMessageLength) { + if (length > maximumChatMessageLength) { throw new Error('[[error:chat-message-too-long, ' + maximumChatMessageLength + ']]'); } }; diff --git a/src/messaging/notifications.js b/src/messaging/notifications.js index bb735d4e31..7571187190 100644 --- a/src/messaging/notifications.js +++ b/src/messaging/notifications.js @@ -57,8 +57,9 @@ module.exports = function (Messaging) { return; } + const isGroupChat = await Messaging.isGroupChat(roomId); const notification = await notifications.create({ - type: 'new-chat', + type: isGroupChat ? 'new-group-chat' : 'new-chat', subject: '[[email:notif.chat.subject, ' + messageObj.fromUser.username + ']]', bodyShort: '[[notifications:new_message_from, ' + messageObj.fromUser.username + ']]', bodyLong: messageObj.content, diff --git a/src/messaging/rooms.js b/src/messaging/rooms.js index 0f99028cfe..87582b77d0 100644 --- a/src/messaging/rooms.js +++ b/src/messaging/rooms.js @@ -83,15 +83,7 @@ module.exports = function (Messaging) { } await db.sortedSetAdd('chat:room:' + roomId + ':uids', timestamps, uids); - const [userCount, roomData] = await Promise.all([ - db.sortedSetCard('chat:room:' + roomId + ':uids'), - db.getObject('chat:room:' + roomId), - ]); - - if (!roomData.hasOwnProperty('groupChat') && userCount > 2) { - await db.setObjectField('chat:room:' + roomId, 'groupChat', 1); - } - + await updateGroupChatField([roomId]); await Promise.all(uids.map(uid => Messaging.addSystemMessage('user-join', uid, roomId))); }; @@ -111,6 +103,20 @@ module.exports = function (Messaging) { await Messaging.leaveRoom(uids, roomId); }; + Messaging.isGroupChat = async function (roomId) { + return (await Messaging.getRoomData(roomId)).groupChat; + }; + + async function updateGroupChatField(roomIds) { + const userCounts = await db.sortedSetsCard(roomIds.map(roomId => 'chat:room:' + roomId + ':uids')); + const groupChats = roomIds.filter((roomId, index) => userCounts[index] > 2); + const privateChats = roomIds.filter((roomId, index) => userCounts[index] <= 2); + await Promise.all([ + db.setObjectField(groupChats.map(id => 'chat:room:' + id, 'groupChat', 1)), + db.setObjectField(privateChats.map(id => 'chat:room:' + id, 'groupChat', 0)), + ]); + } + Messaging.leaveRoom = async (uids, roomId) => { const isInRoom = await Promise.all(uids.map(uid => Messaging.isUserInRoom(uid, roomId))); uids = uids.filter((uid, index) => isInRoom[index]); @@ -126,6 +132,7 @@ module.exports = function (Messaging) { await Promise.all(uids.map(uid => Messaging.addSystemMessage('user-leave', uid, roomId))); await updateOwner(roomId); + await updateGroupChatField([roomId]); }; Messaging.leaveRooms = async (uid, roomIds) => { @@ -145,6 +152,7 @@ module.exports = function (Messaging) { roomIds.map(roomId => updateOwner(roomId)) .concat(roomIds.map(roomId => Messaging.addSystemMessage('user-leave', uid, roomId))) ); + await updateGroupChatField(roomIds); }; async function updateOwner(roomId) { diff --git a/src/meta/settings.js b/src/meta/settings.js index 76db1d41aa..eb8b87890a 100644 --- a/src/meta/settings.js +++ b/src/meta/settings.js @@ -85,6 +85,8 @@ Settings.set = async function (hash, values, quiet) { await db.setObject('settings:' + hash, values); } + cache.del('settings:' + hash); + plugins.fireHook('action:settings.set', { plugin: hash, settings: values, @@ -92,7 +94,6 @@ Settings.set = async function (hash, values, quiet) { pubsub.publish('action:settings.set.' + hash, values); Meta.reloadRequired = !quiet; - cache.del('settings:' + hash); }; Settings.setOne = async function (hash, field, value) { diff --git a/src/meta/templates.js b/src/meta/templates.js index 16f7f23119..3ec9e03930 100644 --- a/src/meta/templates.js +++ b/src/meta/templates.js @@ -111,9 +111,7 @@ async function compileTemplate(filename, source) { })); source = await processImports(paths, filename, source); - const compiled = await Benchpress.precompile(source, { - minify: process.env.NODE_ENV !== 'development', - }); + const compiled = await Benchpress.precompile(source, { filename }); return await fs.promises.writeFile(path.join(viewsPath, filename.replace(/\.tpl$/, '.js')), compiled); } Templates.compileTemplate = compileTemplate; @@ -136,7 +134,7 @@ async function compile() { await mkdirp(path.join(viewsPath, path.dirname(name))); await fs.promises.writeFile(path.join(viewsPath, name), imported); - const compiled = await Benchpress.precompile(imported, { minify: process.env.NODE_ENV !== 'development' }); + const compiled = await Benchpress.precompile(imported, { filename: name }); await fs.promises.writeFile(path.join(viewsPath, name.replace(/\.tpl$/, '.js')), compiled); })); diff --git a/src/middleware/header.js b/src/middleware/header.js index deb9cbce61..a5e041bc8e 100644 --- a/src/middleware/header.js +++ b/src/middleware/header.js @@ -157,6 +157,9 @@ middleware.renderHeader = async function renderHeader(req, res, data) { templateValues.defaultLang = meta.config.defaultLang || 'en-GB'; templateValues.userLang = res.locals.config.userLang; templateValues.languageDirection = results.languageDirection; + if (req.query.noScriptMessage) { + templateValues.noScriptMessage = validator.escape(String(req.query.noScriptMessage)); + } templateValues.template = { name: res.locals.template }; templateValues.template[res.locals.template] = true; diff --git a/src/middleware/render.js b/src/middleware/render.js index 05950e13c0..44a0689c0b 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -10,19 +10,10 @@ const translator = require('../translator'); const widgets = require('../widgets'); const utils = require('../utils'); const slugify = require('../slugify'); -const cacheCreate = require('../cacheCreate'); -const cache = cacheCreate({ - name: 'header-footer', - max: 1000, - maxAge: 0, - enabled: global.env === 'production', -}); const relative_path = nconf.get('relative_path'); module.exports = function (middleware) { - middleware.headerFooterCache = cache; - middleware.processRender = function processRender(req, res, next) { // res.render post-processing, modified from here: https://gist.github.com/mrlannigan/5051687 const render = res.render; @@ -104,34 +95,14 @@ module.exports = function (middleware) { async function renderHeaderFooter(method, req, res, options) { let str = ''; - const lang = getLang(req, res); - function getCacheKey() { - return [lang, method] - .concat(req.path.split('/').slice(0, 4)) - .join('/'); + if (res.locals.renderHeader) { + str = await middleware[method](req, res, options); + } else if (res.locals.renderAdminHeader) { + str = await middleware.admin[method](req, res, options); + } else { + str = ''; } - let cacheKey; - if (req.uid === 0 && res.locals.renderHeader) { - cacheKey = getCacheKey(); - str = cache.get(cacheKey); - if (str) { - return str; - } - } - if (!str) { - if (res.locals.renderHeader) { - str = await middleware[method](req, res, options); - } else if (res.locals.renderAdminHeader) { - str = await middleware.admin[method](req, res, options); - } else { - str = ''; - } - } - const translated = await translate(str, lang); - if (req.uid === 0 && res.locals.renderHeader) { - cache.set(cacheKey, translated, 300000); - } - return translated; + return await translate(str, getLang(req, res)); } function getLang(req, res) { diff --git a/src/notifications.js b/src/notifications.js index d3bcaa1ce0..72e6e7ee07 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -25,6 +25,7 @@ Notifications.baseTypes = [ 'notificationType_post-edit', 'notificationType_follow', 'notificationType_new-chat', + 'notificationType_new-group-chat', 'notificationType_group-invite', 'notificationType_group-request-membership', ]; @@ -174,6 +175,9 @@ async function pushToUids(uids, notification) { notification['cta-type'] = notification.type; } let body = notification.bodyLong || ''; + if (meta.config.removeEmailNotificationImages) { + body = body.replace(/]*>/, ''); + } body = posts.relativeToAbsolute(body, posts.urlRegex); body = posts.relativeToAbsolute(body, posts.imgRegex); await async.eachLimit(uids, 3, function (uid, next) { diff --git a/src/plugins/hooks.js b/src/plugins/hooks.js index 529cc8059d..6ce56fd988 100644 --- a/src/plugins/hooks.js +++ b/src/plugins/hooks.js @@ -6,7 +6,7 @@ const utils = require('../utils'); module.exports = function (Plugins) { Plugins.deprecatedHooks = { - + 'filter:privileges:isUserAllowedTo': 'filter:privileges:isAllowedTo', }; Plugins.internals = { diff --git a/src/privileges/admin.js b/src/privileges/admin.js index dc8ad7e343..305ea98fde 100644 --- a/src/privileges/admin.js +++ b/src/privileges/admin.js @@ -144,7 +144,7 @@ module.exports = function (privileges) { privileges.admin.get = async function (uid) { const [userPrivileges, isAdministrator] = await Promise.all([ - helpers.isUserAllowedTo(privileges.admin.userPrivilegeList, uid, 0), + helpers.isAllowedTo(privileges.admin.userPrivilegeList, uid, 0), user.isAdministrator(uid), ]); @@ -157,7 +157,7 @@ module.exports = function (privileges) { privileges.admin.can = async function (privilege, uid) { const [isUserAllowedTo, isAdministrator] = await Promise.all([ - helpers.isUserAllowedTo(privilege, uid, [0]), + helpers.isAllowedTo(privilege, uid, [0]), user.isAdministrator(uid), ]); return isAdministrator || isUserAllowedTo[0]; diff --git a/src/privileges/categories.js b/src/privileges/categories.js index d1c867e27e..b915f289da 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -46,7 +46,7 @@ module.exports = function (privileges) { const privs = ['topics:create', 'topics:read', 'topics:tag', 'read']; const [userPrivileges, isAdministrator, isModerator] = await Promise.all([ - helpers.isUserAllowedTo(privs, uid, cid), + helpers.isAllowedTo(privs, uid, cid), user.isAdministrator(uid), user.isModerator(uid, cid), ]); @@ -80,7 +80,7 @@ module.exports = function (privileges) { if (!cid) { return false; } - const results = await helpers.isUserAllowedTo(privilege, uid, Array.isArray(cid) ? cid : [cid]); + const results = await helpers.isAllowedTo(privilege, uid, Array.isArray(cid) ? cid : [cid]); if (Array.isArray(results) && results.length) { return Array.isArray(cid) ? results : results[0]; @@ -113,8 +113,8 @@ module.exports = function (privileges) { privileges.categories.getBase = async function (privilege, cids, uid) { return await utils.promiseParallel({ categories: categories.getCategoriesFields(cids, ['disabled']), - allowedTo: helpers.isUserAllowedTo(privilege, uid, cids), - view_deleted: helpers.isUserAllowedTo('posts:view_deleted', uid, cids), + allowedTo: helpers.isAllowedTo(privilege, uid, cids), + view_deleted: helpers.isAllowedTo('posts:view_deleted', uid, cids), isAdmin: user.isAdministrator(uid), }); }; diff --git a/src/privileges/global.js b/src/privileges/global.js index 7c1f3f7dcd..3585a432cc 100644 --- a/src/privileges/global.js +++ b/src/privileges/global.js @@ -18,6 +18,7 @@ module.exports = function (privileges) { { name: '[[admin/manage/privileges:upload-files]]' }, { name: '[[admin/manage/privileges:signature]]' }, { name: '[[admin/manage/privileges:ban]]' }, + { name: '[[admin/manage/privileges:invite]]' }, { name: '[[admin/manage/privileges:search-content]]' }, { name: '[[admin/manage/privileges:search-users]]' }, { name: '[[admin/manage/privileges:search-tags]]' }, @@ -35,6 +36,7 @@ module.exports = function (privileges) { 'upload:post:file', 'signature', 'ban', + 'invite', 'search:content', 'search:users', 'search:tags', @@ -75,7 +77,7 @@ module.exports = function (privileges) { privileges.global.get = async function (uid) { const [userPrivileges, isAdministrator] = await Promise.all([ - helpers.isUserAllowedTo(privileges.global.userPrivilegeList, uid, 0), + helpers.isAllowedTo(privileges.global.userPrivilegeList, uid, 0), user.isAdministrator(uid), ]); @@ -88,7 +90,7 @@ module.exports = function (privileges) { privileges.global.can = async function (privilege, uid) { const [isAdministrator, isUserAllowedTo] = await Promise.all([ user.isAdministrator(uid), - helpers.isUserAllowedTo(privilege, uid, [0]), + helpers.isAllowedTo(privilege, uid, [0]), ]); return isAdministrator || isUserAllowedTo[0]; }; diff --git a/src/privileges/helpers.js b/src/privileges/helpers.js index 9d1fb78e61..cda8eca5b9 100644 --- a/src/privileges/helpers.js +++ b/src/privileges/helpers.js @@ -26,54 +26,59 @@ helpers.isUsersAllowedTo = async function (privilege, uids, cid) { return result.allowed; }; -helpers.isUserAllowedTo = async function (privilege, uid, cid) { +helpers.isAllowedTo = async function (privilege, uidOrGroupName, cid) { let allowed; if (Array.isArray(privilege) && !Array.isArray(cid)) { - allowed = await isUserAllowedToPrivileges(privilege, uid, cid); + allowed = await isAllowedToPrivileges(privilege, uidOrGroupName, cid); } else if (Array.isArray(cid) && !Array.isArray(privilege)) { - allowed = await isUserAllowedToCids(privilege, uid, cid); + allowed = await isAllowedToCids(privilege, uidOrGroupName, cid); } if (allowed) { - const result = await plugins.fireHook('filter:privileges:isUserAllowedTo', { allowed: allowed, privilege: privilege, uid: uid, cid: cid }); - return result.allowed; + ({ allowed } = await plugins.fireHook('filter:privileges:isUserAllowedTo', { allowed: allowed, privilege: privilege, uid: uidOrGroupName, cid: cid })); + ({ allowed } = await plugins.fireHook('filter:privileges:isAllowedTo', { allowed: allowed, privilege: privilege, uid: uidOrGroupName, cid: cid })); + return allowed; } throw new Error('[[error:invalid-data]]'); }; -async function isUserAllowedToCids(privilege, uid, cids) { +async function isAllowedToCids(privilege, uidOrGroupName, cids) { if (!privilege) { return cids.map(() => false); } - if (parseInt(uid, 10) <= 0) { - return await isSystemGroupAllowedToCids(privilege, uid, cids); + + const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege); + + // Group handling + if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) { + return await checkIfAllowedGroup(uidOrGroupName, groupKeys); } - const userKeys = []; - const groupKeys = []; - cids.forEach(function (cid) { - userKeys.push('cid:' + cid + ':privileges:' + privilege); - groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege); - }); - - return await checkIfAllowed(uid, userKeys, groupKeys); -} - -async function isUserAllowedToPrivileges(privileges, uid, cid) { - if (parseInt(uid, 10) <= 0) { - return await isSystemGroupAllowedToPrivileges(privileges, uid, cid); + // User handling + if (parseInt(uidOrGroupName, 10) <= 0) { + return await isSystemGroupAllowedToCids(privilege, uidOrGroupName, cids); } - const userKeys = []; - const groupKeys = []; - privileges.forEach(function (privilege) { - userKeys.push('cid:' + cid + ':privileges:' + privilege); - groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege); - }); - - return await checkIfAllowed(uid, userKeys, groupKeys); + const userKeys = cids.map(cid => 'cid:' + cid + ':privileges:' + privilege); + return await checkIfAllowedUser(uidOrGroupName, userKeys, groupKeys); } -async function checkIfAllowed(uid, userKeys, groupKeys) { +async function isAllowedToPrivileges(privileges, uidOrGroupName, cid) { + const groupKeys = privileges.map(privilege => 'cid:' + cid + ':privileges:groups:' + privilege); + // Group handling + if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) { + return await checkIfAllowedGroup(uidOrGroupName, groupKeys); + } + + // User handling + if (parseInt(uidOrGroupName, 10) <= 0) { + return await isSystemGroupAllowedToPrivileges(privileges, uidOrGroupName, cid); + } + + const userKeys = privileges.map(privilege => 'cid:' + cid + ':privileges:' + privilege); + return await checkIfAllowedUser(uidOrGroupName, userKeys, groupKeys); +} + +async function checkIfAllowedUser(uid, userKeys, groupKeys) { const [hasUserPrivilege, hasGroupPrivilege] = await Promise.all([ groups.isMemberOfGroups(uid, userKeys), groups.isMemberOfGroupsList(uid, groupKeys), @@ -81,6 +86,14 @@ async function checkIfAllowed(uid, userKeys, groupKeys) { return userKeys.map((key, index) => hasUserPrivilege[index] || hasGroupPrivilege[index]); } +async function checkIfAllowedGroup(groupName, groupKeys) { + const sets = await Promise.all([ + groups.isMemberOfGroups(groupName, groupKeys), + groups.isMemberOfGroups('registered-users', groupKeys), + ]); + return groupKeys.map((key, index) => sets[0][index] || sets[1][index]); +} + async function isSystemGroupAllowedToCids(privilege, uid, cids) { const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege); return await groups.isMemberOfGroups(uidToSystemGroup[uid], groupKeys); diff --git a/src/privileges/posts.js b/src/privileges/posts.js index ac595c0c31..f1274b892e 100644 --- a/src/privileges/posts.js +++ b/src/privileges/posts.js @@ -25,11 +25,11 @@ module.exports = function (privileges) { isAdmin: user.isAdministrator(uid), isModerator: user.isModerator(uid, uniqueCids), isOwner: posts.isOwner(pids, uid), - 'topics:read': helpers.isUserAllowedTo('topics:read', uid, uniqueCids), - read: helpers.isUserAllowedTo('read', uid, uniqueCids), - 'posts:edit': helpers.isUserAllowedTo('posts:edit', uid, uniqueCids), - 'posts:history': helpers.isUserAllowedTo('posts:history', uid, uniqueCids), - 'posts:view_deleted': helpers.isUserAllowedTo('posts:view_deleted', uid, uniqueCids), + 'topics:read': helpers.isAllowedTo('topics:read', uid, uniqueCids), + read: helpers.isAllowedTo('read', uid, uniqueCids), + 'posts:edit': helpers.isAllowedTo('posts:edit', uid, uniqueCids), + 'posts:history': helpers.isAllowedTo('posts:history', uid, uniqueCids), + 'posts:view_deleted': helpers.isAllowedTo('posts:view_deleted', uid, uniqueCids), }); const isModerator = _.zipObject(uniqueCids, results.isModerator); diff --git a/src/privileges/topics.js b/src/privileges/topics.js index d4b34194ff..75a3e01fb3 100644 --- a/src/privileges/topics.js +++ b/src/privileges/topics.js @@ -23,7 +23,7 @@ module.exports = function (privileges) { ]; const topicData = await topics.getTopicFields(tid, ['cid', 'uid', 'locked', 'deleted']); const [userPrivileges, isAdministrator, isModerator, disabled] = await Promise.all([ - helpers.isUserAllowedTo(privs, uid, topicData.cid), + helpers.isAllowedTo(privs, uid, topicData.cid), user.isAdministrator(uid), user.isModerator(uid, topicData.cid), categories.getCategoryField(topicData.cid, 'disabled'), @@ -121,7 +121,7 @@ module.exports = function (privileges) { user.isModerator(uid, topicData.cid), user.isAdministrator(uid), topics.isOwner(tid, uid), - helpers.isUserAllowedTo('topics:delete', uid, [topicData.cid]), + helpers.isAllowedTo('topics:delete', uid, [topicData.cid]), ]); if (isAdministrator) { diff --git a/src/privileges/users.js b/src/privileges/users.js index 1cf9441aee..9a391f2f13 100644 --- a/src/privileges/users.js +++ b/src/privileges/users.js @@ -41,7 +41,7 @@ module.exports = function (privileges) { return await filterIsModerator(cids, uid, cids.map(() => true)); } const uniqueCids = _.uniq(cids); - const isAllowed = await helpers.isUserAllowedTo('moderate', uid, uniqueCids); + const isAllowed = await helpers.isAllowedTo('moderate', uid, uniqueCids); const cidToIsAllowed = _.zipObject(uniqueCids, isAllowed); const isModerator = cids.map(cid => cidToIsAllowed[cid]); @@ -107,12 +107,14 @@ module.exports = function (privileges) { return data.canBan; }; - privileges.users.hasBanPrivilege = async function (uid) { - const canBan = await privileges.global.can('ban', uid); - const data = await plugins.fireHook('filter:user.hasBanPrivilege', { - uid: uid, - canBan: canBan, - }); - return data.canBan; - }; + privileges.users.hasBanPrivilege = async uid => await hasGlobalPrivilege('ban', uid); + privileges.users.hasInvitePrivilege = async uid => await hasGlobalPrivilege('invite', uid); + + async function hasGlobalPrivilege(privilege, uid) { + const privilegeName = privilege.split('-').map(word => word.slice(0, 1).toUpperCase() + word.slice(1)).join(''); + let payload = { uid }; + payload[`can${privilegeName}`] = await privileges.global.can(privilege, uid); + payload = await plugins.fireHook(`filter:user.has${privilegeName}Privilege`, payload); + return payload[`can${privilegeName}`]; + } }; diff --git a/src/routes/feeds.js b/src/routes/feeds.js index be23cafed6..0c12af5334 100644 --- a/src/routes/feeds.js +++ b/src/routes/feeds.js @@ -53,7 +53,7 @@ async function validateTokenIfRequiresLogin(requiresLogin, cid, req, res) { await user.auth.logAttempt(uid, req.ip); return helpers.notAllowed(req, res); } - const userPrivileges = privileges.categories.get(cid, uid); + const userPrivileges = await privileges.categories.get(cid, uid); if (!userPrivileges.read) { return helpers.notAllowed(req, res); } @@ -77,7 +77,7 @@ async function generateForTopic(req, res) { } if (await validateTokenIfRequiresLogin(!userPrivileges['topics:read'], topic.cid, req, res)) { - const topicData = await topics.getTopicWithPosts(topic, 'tid:' + tid + ':posts', req.uid || req.query.uid || 0, 0, 25, false); + const topicData = await topics.getTopicWithPosts(topic, 'tid:' + tid + ':posts', req.uid || req.query.uid || 0, 0, 24, true); topics.modifyPostsByPrivilege(topicData, userPrivileges); @@ -94,8 +94,8 @@ async function generateForTopic(req, res) { if (topicData.posts.length > 0) { feed.pubDate = new Date(parseInt(topicData.posts[0].timestamp, 10)).toUTCString(); } - - topicData.posts.forEach(function (postData) { + const replies = topicData.posts.slice(1); + replies.forEach(function (postData) { if (!postData.deleted) { const dateStamp = new Date(parseInt(parseInt(postData.edited, 10) === 0 ? postData.timestamp : postData.edited, 10)).toUTCString(); diff --git a/src/routes/write/groups.js b/src/routes/write/groups.js index 1f78447170..64af35bf70 100644 --- a/src/routes/write/groups.js +++ b/src/routes/write/groups.js @@ -10,8 +10,8 @@ const setupApiRoute = routeHelpers.setupApiRoute; module.exports = function () { const middlewares = [middleware.authenticate]; - setupApiRoute(router, 'head', '/:slug', [middleware.assert.group], controllers.write.groups.exists); setupApiRoute(router, 'post', '/', [...middlewares, middleware.checkRequired.bind(null, ['name'])], controllers.write.groups.create); + setupApiRoute(router, 'head', '/:slug', [middleware.assert.group], controllers.write.groups.exists); setupApiRoute(router, 'delete', '/:slug', [...middlewares, middleware.assert.group], controllers.write.groups.delete); setupApiRoute(router, 'put', '/:slug/membership/:uid', [...middlewares, middleware.assert.group], controllers.write.groups.join); setupApiRoute(router, 'delete', '/:slug/membership/:uid', [...middlewares, middleware.assert.group], controllers.write.groups.leave); diff --git a/src/routes/write/users.js b/src/routes/write/users.js index 4edca5d4a6..94345a65ff 100644 --- a/src/routes/write/users.js +++ b/src/routes/write/users.js @@ -20,7 +20,9 @@ function authenticatedRoutes() { setupApiRoute(router, 'head', '/:uid', [middleware.assert.user], controllers.write.users.exists); setupApiRoute(router, 'put', '/:uid', [...middlewares, middleware.assert.user], controllers.write.users.update); - setupApiRoute(router, 'delete', '/:uid', [...middlewares, middleware.assert.user, middleware.exposePrivileges], controllers.write.users.delete); + setupApiRoute(router, 'delete', '/:uid', [...middlewares, middleware.assert.user], controllers.write.users.delete); + setupApiRoute(router, 'delete', '/:uid/content', [...middlewares, middleware.assert.user], controllers.write.users.deleteContent); + setupApiRoute(router, 'delete', '/:uid/account', [...middlewares, middleware.assert.user], controllers.write.users.deleteAccount); setupApiRoute(router, 'put', '/:uid/settings', [...middlewares, middleware.checkRequired.bind(null, ['settings'])], controllers.write.users.updateSettings); @@ -39,6 +41,9 @@ function authenticatedRoutes() { // Shorthand route to access user routes by userslug router.all('/+bySlug/:userslug*?', [], controllers.write.users.redirectBySlug); + + setupApiRoute(router, 'post', '/:uid/invites', middlewares, controllers.write.users.invite); + setupApiRoute(router, 'get', '/:uid/invites/groups', [...middlewares, middleware.assert.user], controllers.write.users.getInviteGroups); } module.exports = function () { diff --git a/src/socket.io/admin/cache.js b/src/socket.io/admin/cache.js index de16f8faaf..534cefeac8 100644 --- a/src/socket.io/admin/cache.js +++ b/src/socket.io/admin/cache.js @@ -11,8 +11,6 @@ SocketCache.clear = async function (socket, data) { require('../../groups').cache.reset(); } else if (data.name === 'local') { require('../../cache').reset(); - } else if (data.name === 'headerfooter') { - require('../../middleware').headerFooterCache.reset(); } }; @@ -22,7 +20,6 @@ SocketCache.toggle = async function (socket, data) { object: require('../../database').objectCache, group: require('../../groups').cache, local: require('../../cache'), - headerfooter: require('../../middleware').headerFooterCache, }; if (!caches[data.name]) { return; diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index 266e739db6..91dfb49646 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -1,7 +1,6 @@ 'use strict'; const async = require('async'); -const winston = require('winston'); const db = require('../../database'); const api = require('../../api'); @@ -9,9 +8,7 @@ const groups = require('../../groups'); const user = require('../../user'); const events = require('../../events'); const meta = require('../../meta'); -const plugins = require('../../plugins'); const translator = require('../../translator'); -const flags = require('../../flags'); const sockets = require('..'); const User = module.exports; @@ -125,16 +122,16 @@ User.forcePasswordReset = async function (socket, uids) { }; User.deleteUsers = async function (socket, uids) { - await canDeleteUids(uids); - deleteUsers(socket, uids, async function (uid) { - return await user.deleteAccount(uid); - }); + sockets.warnDeprecated(socket, 'DELETE /api/v3/users/:uid/account'); + await Promise.all(uids.map(async (uid) => { + await api.users.deleteAccount(socket, { uid }); + })); }; User.deleteUsersContent = async function (socket, uids) { - await canDeleteUids(uids); + sockets.warnDeprecated(socket, 'DELETE /api/v3/users/:uid/content'); await Promise.all(uids.map(async (uid) => { - await user.deleteContent(socket.uid, uid); + await api.users.deleteContent(socket, { uid }); })); }; @@ -143,42 +140,6 @@ User.deleteUsersAndContent = async function (socket, uids) { await api.users.deleteMany(socket, { uids }); }; -async function canDeleteUids(uids) { - if (!Array.isArray(uids)) { - throw new Error('[[error:invalid-data]]'); - } - const isMembers = await groups.isMembers(uids, 'administrators'); - if (isMembers.includes(true)) { - throw new Error('[[error:cant-delete-other-admins]]'); - } -} - -async function deleteUsers(socket, uids, method) { - async function doDelete(uid) { - await flags.resolveFlag('user', uid, socket.uid); - const userData = await method(uid); - await events.log({ - type: 'user-delete', - uid: socket.uid, - targetUid: uid, - ip: socket.ip, - username: userData.username, - email: userData.email, - }); - plugins.fireHook('action:user.delete', { - callerUid: socket.uid, - uid: uid, - ip: socket.ip, - user: userData, - }); - } - try { - await Promise.all(uids.map(uid => doDelete(uid))); - } catch (err) { - winston.error(err.stack); - } -} - User.restartJobs = async function () { user.startJobs(); }; diff --git a/src/socket.io/posts/tools.js b/src/socket.io/posts/tools.js index a0e4ae4715..b62f651e7a 100644 --- a/src/socket.io/posts/tools.js +++ b/src/socket.io/posts/tools.js @@ -42,7 +42,7 @@ module.exports = function (SocketPosts) { postData.display_edit_tools = results.canEdit.flag; postData.display_delete_tools = results.canDelete.flag; postData.display_purge_tools = results.canPurge; - postData.display_flag_tools = socket.uid && !postData.selfPost && results.canFlag.flag; + postData.display_flag_tools = socket.uid && results.canFlag.flag; postData.display_moderator_tools = postData.display_edit_tools || postData.display_delete_tools; postData.display_move_tools = results.isAdmin || results.isModerator; postData.display_change_owner_tools = results.isAdmin || results.isModerator; diff --git a/src/socket.io/user.js b/src/socket.io/user.js index cc39126d8a..bac1a08266 100644 --- a/src/socket.io/user.js +++ b/src/socket.io/user.js @@ -1,7 +1,5 @@ 'use strict'; -const async = require('async'); - const util = require('util'); const sleep = util.promisify(setTimeout); @@ -17,7 +15,6 @@ const db = require('../database'); const userController = require('../controllers/user'); const privileges = require('../privileges'); const utils = require('../utils'); -const flags = require('../flags'); const sockets = require('.'); const SocketUser = module.exports; @@ -39,37 +36,8 @@ SocketUser.exists = async function (socket, data) { }; SocketUser.deleteAccount = async function (socket, data) { - if (!socket.uid) { - throw new Error('[[error:no-privileges]]'); - } - const hasPassword = await user.hasPassword(socket.uid); - if (hasPassword) { - const ok = await user.isPasswordCorrect(socket.uid, data.password, socket.ip); - if (!ok) { - throw new Error('[[error:invalid-password]]'); - } - } - const isAdmin = await user.isAdministrator(socket.uid); - if (isAdmin) { - throw new Error('[[error:cant-delete-admin]]'); - } - if (meta.config.allowAccountDelete !== 1) { - throw new Error('[[error:no-privileges]]'); - } - - await flags.resolveFlag('user', socket.uid, socket.uid); - const userData = await user.deleteAccount(socket.uid); - - require('./index').server.sockets.emit('event:user_status_change', { uid: socket.uid, status: 'offline' }); - - await events.log({ - type: 'user-delete', - uid: socket.uid, - targetUid: socket.uid, - ip: socket.ip, - username: userData.username, - email: userData.email, - }); + sockets.warnDeprecated(socket, 'DELETE /api/v3/users/:uid/account'); + await api.users.deleteAccount(socket, data); }; SocketUser.emailExists = async function (socket, data) { @@ -223,37 +191,6 @@ SocketUser.getUnreadCounts = async function (socket) { return results; }; -SocketUser.invite = async function (socket, email) { - if (!email || !socket.uid) { - throw new Error('[[error:invalid-data]]'); - } - - const registrationType = meta.config.registrationType; - if (registrationType !== 'invite-only' && registrationType !== 'admin-invite-only') { - throw new Error('[[error:forum-not-invite-only]]'); - } - - const isAdmin = await user.isAdministrator(socket.uid); - if (registrationType === 'admin-invite-only' && !isAdmin) { - throw new Error('[[error:no-privileges]]'); - } - - const max = meta.config.maximumInvites; - email = email.split(',').map(email => email.trim()).filter(Boolean); - - await async.eachSeries(email, async function (email) { - let invites = 0; - if (max) { - invites = await user.getInvitesNumber(socket.uid); - } - if (!isAdmin && max && invites >= max) { - throw new Error('[[error:invite-maximum-met, ' + invites + ', ' + max + ']]'); - } - - await user.sendInvitationEmail(socket.uid, email); - }); -}; - SocketUser.getUserByUID = async function (socket, uid) { return await userController.getUserDataByField(socket.uid, 'uid', uid); }; diff --git a/src/topics/create.js b/src/topics/create.js index afa8498b72..ca55a8066e 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -187,12 +187,14 @@ module.exports = function (Topics) { user.setUserField(uid, 'lastonline', Date.now()); } - Topics.notifyFollowers(postData, uid, { - type: 'new-reply', - bodyShort: translator.compile('notifications:user_posted_to', postData.user.username, postData.topic.title), - nid: 'new_post:tid:' + postData.topic.tid + ':pid:' + postData.pid + ':uid:' + uid, - mergeId: 'notifications:user_posted_to|' + postData.topic.tid, - }); + if (parseInt(uid, 10) || meta.config.allowGuestReplyNotifications) { + Topics.notifyFollowers(postData, uid, { + type: 'new-reply', + bodyShort: translator.compile('notifications:user_posted_to', postData.user.username, postData.topic.title), + nid: 'new_post:tid:' + postData.topic.tid + ':pid:' + postData.pid + ':uid:' + uid, + mergeId: 'notifications:user_posted_to|' + postData.topic.tid, + }); + } analytics.increment(['posts', 'posts:byCid:' + data.cid]); plugins.fireHook('action:topic.reply', { post: _.clone(postData), data: data }); diff --git a/src/topics/index.js b/src/topics/index.js index 943930e375..372141dda5 100644 --- a/src/topics/index.js +++ b/src/topics/index.js @@ -189,18 +189,20 @@ Topics.getTopicWithPosts = async function (topicData, set, uid, start, stop, rev }; async function getMainPostAndReplies(topic, set, uid, start, stop, reverse) { + let repliesStart = start; + let repliesStop = stop; if (stop > 0) { - stop -= 1; + repliesStop -= 1; if (start > 0) { - start -= 1; + repliesStart -= 1; } } - const pids = await posts.getPidsFromSet(set, start, stop, reverse); + const pids = await posts.getPidsFromSet(set, repliesStart, repliesStop, reverse); if (!pids.length && !topic.mainPid) { return []; } - if (parseInt(topic.mainPid, 10) && start === 0) { + if (topic.mainPid && start === 0) { pids.unshift(topic.mainPid); } const postData = await posts.getPostsByPids(pids, uid); @@ -213,7 +215,7 @@ async function getMainPostAndReplies(topic, set, uid, start, stop, reverse) { replies = postData.slice(1); } - Topics.calculatePostIndices(replies, start); + Topics.calculatePostIndices(replies, repliesStart); return await Topics.addPostData(postData, uid); } diff --git a/src/user/approval.js b/src/user/approval.js index 797ef9045f..0a2c200d7c 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -1,6 +1,7 @@ 'use strict'; const validator = require('validator'); +const cronJob = require('cron').CronJob; const db = require('../database'); const meta = require('../meta'); @@ -12,6 +13,10 @@ const slugify = require('../slugify'); const plugins = require('../plugins'); module.exports = function (User) { + new cronJob('0 * * * *', function () { + User.autoApprove(); + }, null, true); + User.addToApprovalQueue = async function (userData) { userData.username = userData.username.trim(); userData.userslug = slugify(userData.username); @@ -59,7 +64,7 @@ module.exports = function (User) { if (!userData) { throw new Error('[[error:invalid-data]]'); } - + const creation_time = await db.sortedSetScore('registration:queue', username); const uid = await User.create(userData); await User.setUserField(uid, 'password', userData.hashedPassword); await removeFromQueue(username); @@ -71,6 +76,9 @@ module.exports = function (User) { template: 'registration_accepted', uid: uid, }); + const total = await db.incrObjectField('registration:queue:approval:times', 'totalTime', Math.floor((Date.now() - creation_time) / 60000)); + const counter = await db.incrObjectField('registration:queue:approval:times', 'counter', 1); + await db.setObjectField('registration:queue:approval:times', 'average', total / counter); return uid; }; @@ -140,4 +148,16 @@ module.exports = function (User) { const uids = await User.getUidsFromSet('ip:' + user.ip + ':uid', 0, -1); user.ipMatch = await User.getUsersFields(uids, ['uid', 'username', 'picture']); } + + User.autoApprove = async function () { + if (meta.config.autoApproveTime <= 0) { + return; + } + const users = await db.getSortedSetRevRangeWithScores('registration:queue', 0, -1); + const now = Date.now(); + for (const user of users.filter(user => now - user.score >= meta.config.autoApproveTime * 3600000)) { + // eslint-disable-next-line no-await-in-loop + await User.acceptRegistration(user.value); + } + }; }; diff --git a/src/user/delete.js b/src/user/delete.js index 96dd6029c8..ee58a72026 100644 --- a/src/user/delete.js +++ b/src/user/delete.js @@ -7,6 +7,7 @@ const nconf = require('nconf'); const db = require('../database'); const posts = require('../posts'); +const flags = require('../flags'); const topics = require('../topics'); const groups = require('../groups'); const messaging = require('../messaging'); @@ -149,6 +150,7 @@ module.exports = function (User) { deleteUserFromFollowers(uid), deleteImages(uid), groups.leaveAllGroups(uid), + flags.resolveFlag('user', uid, uid), ]); await db.deleteAll(['followers:' + uid, 'following:' + uid, 'user:' + uid]); delete deletesInProgress[uid]; diff --git a/src/user/invite.js b/src/user/invite.js index 82471d8b28..4c20eab70a 100644 --- a/src/user/invite.js +++ b/src/user/invite.js @@ -8,6 +8,7 @@ var validator = require('validator'); var db = require('../database'); var meta = require('../meta'); var emailer = require('../emailer'); +var groups = require('../groups'); var translator = require('../translator'); var utils = require('../utils'); @@ -36,13 +37,7 @@ module.exports = function (User) { }); }; - User.sendInvitationEmail = async function (uid, email) { - const token = utils.generateUUID(); - const registerLink = nconf.get('url') + '/register?token=' + token + '&email=' + encodeURIComponent(email); - - const expireDays = meta.config.inviteExpiration; - const expireIn = expireDays * 86400000; - + User.sendInvitationEmail = async function (uid, email, groupsToJoin) { const email_exists = await User.getUidByEmail(email); if (email_exists) { throw new Error('[[error:email-taken]]'); @@ -53,24 +48,7 @@ module.exports = function (User) { throw new Error('[[error:email-invited]]'); } - await db.setAdd('invitation:uid:' + uid, email); - await db.setAdd('invitation:uids', uid); - await db.set('invitation:email:' + email, token); - await db.pexpireAt('invitation:email:' + email, Date.now() + expireIn); - const username = await User.getUserField(uid, 'username'); - const title = meta.config.title || meta.config.browserTitle || 'NodeBB'; - const subject = await translator.translate('[[email:invite, ' + title + ']]', meta.config.defaultLang); - let data = { - site_title: title, - registerLink: registerLink, - subject: subject, - username: username, - template: 'invitation', - expireDays: expireDays, - }; - - // Append default data to this email payload - data = { ...emailer._defaultPayload, ...data }; + const data = await prepareInvitation(uid, email, groupsToJoin); await emailer.sendToEmail('invitation', email, meta.config.defaultLang, data); }; @@ -79,12 +57,28 @@ module.exports = function (User) { if (!query.token || !query.email) { throw new Error('[[error:invalid-data]]'); } - const token = await db.get('invitation:email:' + query.email); + const token = await db.getObjectField('invitation:email:' + query.email, 'token'); if (!token || token !== query.token) { throw new Error('[[error:invalid-token]]'); } }; + User.joinGroupsFromInvitation = async function (uid, email) { + let groupsToJoin = await db.getObjectField('invitation:email:' + email, 'groupsToJoin'); + + try { + groupsToJoin = JSON.parse(groupsToJoin); + } catch (e) { + return; + } + + if (!groupsToJoin || groupsToJoin.length < 1) { + return; + } + + await groups.join(groupsToJoin, uid); + }; + User.deleteInvitation = async function (invitedBy, email) { const invitedByUid = await User.getUidByUsername(invitedBy); if (!invitedByUid) { @@ -109,4 +103,34 @@ module.exports = function (User) { await db.setRemove('invitation:uids', uid); } } + + async function prepareInvitation(uid, email, groupsToJoin) { + const token = utils.generateUUID(); + const registerLink = nconf.get('url') + '/register?token=' + token + '&email=' + encodeURIComponent(email); + + const expireDays = meta.config.inviteExpiration; + const expireIn = expireDays * 86400000; + + await db.setAdd('invitation:uid:' + uid, email); + await db.setAdd('invitation:uids', uid); + await db.setObject('invitation:email:' + email, { + token, + groupsToJoin: JSON.stringify(groupsToJoin), + }); + await db.pexpireAt('invitation:email:' + email, Date.now() + expireIn); + + const username = await User.getUserField(uid, 'username'); + const title = meta.config.title || meta.config.browserTitle || 'NodeBB'; + const subject = await translator.translate('[[email:invite, ' + title + ']]', meta.config.defaultLang); + + return { + ...emailer._defaultPayload, // Append default data to this email payload + site_title: title, + registerLink: registerLink, + subject: subject, + username: username, + template: 'invitation', + expireDays: expireDays, + }; + } }; diff --git a/src/user/settings.js b/src/user/settings.js index 0f9494a1ce..ebb153852f 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -58,6 +58,7 @@ module.exports = function (User) { settings.upvoteNotifFreq = getSetting(settings, 'upvoteNotifFreq', 'all'); settings.restrictChat = parseInt(getSetting(settings, 'restrictChat', 0), 10) === 1; settings.topicSearchEnabled = parseInt(getSetting(settings, 'topicSearchEnabled', 0), 10) === 1; + settings.updateUrlWithPostIndex = parseInt(getSetting(settings, 'updateUrlWithPostIndex', 1), 10) === 1; settings.bootswatchSkin = validator.escape(String(settings.bootswatchSkin || '')); settings.homePageRoute = validator.escape(String(settings.homePageRoute || '')).replace(///g, '/'); settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) === 1; @@ -116,6 +117,7 @@ module.exports = function (User) { followTopicsOnReply: data.followTopicsOnReply, restrictChat: data.restrictChat, topicSearchEnabled: data.topicSearchEnabled, + updateUrlWithPostIndex: data.updateUrlWithPostIndex, homePageRoute: ((data.homePageRoute === 'custom' ? data.homePageCustom : data.homePageRoute) || '').replace(/^\//, ''), scrollToMyPost: data.scrollToMyPost, upvoteNotifFreq: data.upvoteNotifFreq, diff --git a/src/views/admin/advanced/cache.tpl b/src/views/admin/advanced/cache.tpl index 32b7371fdb..46205e5fef 100644 --- a/src/views/admin/advanced/cache.tpl +++ b/src/views/admin/advanced/cache.tpl @@ -2,7 +2,7 @@
-
+
[[admin/advanced/cache:post-cache]]
@@ -37,7 +37,7 @@
-
+
Object Cache
@@ -63,7 +63,7 @@
-
+
Group Cache
@@ -89,7 +89,7 @@
-
+
Local Cache
@@ -114,32 +114,6 @@
- -
-
-
Header Footer Cache
-
-
- -
- {headerFooterCache.length} / {headerFooterCache.max}
- -
-
- [[admin/advanced/cache:percent-full, {headerFooterCache.percentFull}]] -
-
- - {headerFooterCache.hits}
- {headerFooterCache.misses}
- {headerFooterCache.hitRatio}
- - -
-
-
diff --git a/src/views/admin/advanced/hooks.tpl b/src/views/admin/advanced/hooks.tpl index c948c37e3b..b9b2493b88 100644 --- a/src/views/admin/advanced/hooks.tpl +++ b/src/views/admin/advanced/hooks.tpl @@ -1,5 +1,5 @@
- + {{{ each hooks }}}
\ No newline at end of file diff --git a/src/views/admin/extend/rewards.tpl b/src/views/admin/extend/rewards.tpl index 9df8ac01d0..bd226cc39d 100644 --- a/src/views/admin/extend/rewards.tpl +++ b/src/views/admin/extend/rewards.tpl @@ -4,23 +4,23 @@
[[admin/extend/rewards:rewards]]
    - + {{{ each active }}}


  • @@ -58,7 +58,7 @@
- + {{{ end }}}
diff --git a/src/views/admin/extend/widgets.tpl b/src/views/admin/extend/widgets.tpl index 2331001c1c..25d03f9829 100644 --- a/src/views/admin/extend/widgets.tpl +++ b/src/views/admin/extend/widgets.tpl @@ -1,26 +1,26 @@
- + {{{ each templates }}}
- + {{{ each templates.areas }}}

{../name} {templates.template} / {../location}

- + {{{ end }}}
- + {{{ end }}}
diff --git a/src/views/admin/manage/admins-mods.tpl b/src/views/admin/manage/admins-mods.tpl index 4db42dc6e4..9e0ac321c1 100644 --- a/src/views/admin/manage/admins-mods.tpl +++ b/src/views/admin/manage/admins-mods.tpl @@ -38,11 +38,11 @@
- + {{{ each categories }}}

[[admin/manage/admins-mods:moderators-of-category, {categories.name}]]{{{if categories.disabled}}}[[admin/manage/admins-mods:disabled]]{{{end}}}

- + {{{ each categories.moderators }}} - + {{{ end }}}
[[admin/manage/admins-mods:no-moderators]]
@@ -60,5 +60,5 @@

- + {{{ end }}}
diff --git a/src/views/admin/manage/group.tpl b/src/views/admin/manage/group.tpl index 382a26cf8e..282d864b06 100644 --- a/src/views/admin/manage/group.tpl +++ b/src/views/admin/manage/group.tpl @@ -95,6 +95,22 @@
+
+ +
+ + +

[[groups:details.member-post-cids-help]]

+
+ +
+
diff --git a/src/views/admin/manage/registration.tpl b/src/views/admin/manage/registration.tpl index d82c40c3bc..d4effc8c5d 100644 --- a/src/views/admin/manage/registration.tpl +++ b/src/views/admin/manage/registration.tpl @@ -24,7 +24,7 @@ - + {{{ each users }}} @@ -55,7 +55,7 @@ {users.ip} - + {{{ each users.ipMatch }}}
@@ -63,29 +63,29 @@
{users.ipMatch.icon:text}
{users.ipMatch.username} - + {{{ end }}} - + {{{ each users.customRows }}} {users.customRows.value} - + {{{ end }}}
- + {{{ each users.customActions }}} - + {{{ end }}}
- + {{{ end }}}
@@ -110,8 +110,8 @@ - - + {{{ each invites }}} + {{{ each invites.invitations }}} {invites.username} @@ -122,8 +122,8 @@
- - + {{{ end }}} + {{{ end }}}
diff --git a/src/views/admin/manage/uploads.tpl b/src/views/admin/manage/uploads.tpl index 9751504b50..bec935d1af 100644 --- a/src/views/admin/manage/uploads.tpl +++ b/src/views/admin/manage/uploads.tpl @@ -30,9 +30,9 @@ - - @value - + {{{ each ../inPids }}} + {@value} + {{{ end }}} [[admin/manage/uploads:orphaned]] diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index e950ba7b40..826ed34411 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -3,9 +3,9 @@
- + - + [[admin/manage/users:download-csv]]
diff --git a/src/views/admin/partials/blacklist-validate.tpl b/src/views/admin/partials/blacklist-validate.tpl index 36c747aa9c..3d4aba6225 100644 --- a/src/views/admin/partials/blacklist-validate.tpl +++ b/src/views/admin/partials/blacklist-validate.tpl @@ -8,7 +8,7 @@

    -
  • @value
  • +
  • {@value}
\ No newline at end of file diff --git a/src/views/admin/partials/installed_plugin_item.tpl b/src/views/admin/partials/installed_plugin_item.tpl index d0855aa8b3..c3465d6585 100644 --- a/src/views/admin/partials/installed_plugin_item.tpl +++ b/src/views/admin/partials/installed_plugin_item.tpl @@ -1,5 +1,5 @@ -
  • +
  • {{{ if ../installed }}} diff --git a/src/views/admin/partials/manage_user_groups.tpl b/src/views/admin/partials/manage_user_groups.tpl index 6136f8c44c..a7599f9675 100644 --- a/src/views/admin/partials/manage_user_groups.tpl +++ b/src/views/admin/partials/manage_user_groups.tpl @@ -1,13 +1,13 @@ - +{{{ each users }}}
    {users.username}
    - + {{{ each users.groups }}} - + {{{ end }}}
    - \ No newline at end of file +{{{ end }}} \ No newline at end of file diff --git a/src/views/admin/settings/email.tpl b/src/views/admin/settings/email.tpl index 1d3c59d597..3e54b08e1f 100644 --- a/src/views/admin/settings/email.tpl +++ b/src/views/admin/settings/email.tpl @@ -54,9 +54,9 @@ - - - + {{{ each services }}} + + {{{ end }}}

    [[admin/settings/email:smtp-transport.service-help]] @@ -154,4 +154,18 @@

  • +
    +
    [[admin/settings/email:notifications.settings]]
    +
    + +
    + +
    + +
    +
    + diff --git a/src/views/admin/settings/guest.tpl b/src/views/admin/settings/guest.tpl index 368f384b79..3adaf9917c 100644 --- a/src/views/admin/settings/guest.tpl +++ b/src/views/admin/settings/guest.tpl @@ -1,7 +1,7 @@
    -
    [[admin/settings/guest:handles]]
    +
    [[admin/settings/guest:settings]]
    @@ -14,9 +14,6 @@ [[admin/settings/guest:handles.enabled-help]]

    -
    -
    [[admin/settings/guest:topic-views]]
    -
    +
    +
    + +
    +
    diff --git a/src/views/admin/settings/navigation.tpl b/src/views/admin/settings/navigation.tpl index 47d4e609e1..a8694c310c 100644 --- a/src/views/admin/settings/navigation.tpl +++ b/src/views/admin/settings/navigation.tpl @@ -15,7 +15,7 @@
      - + {{{ each enabled }}}
    • @@ -76,9 +76,9 @@ [[admin/settings/navigation:groups]]
      @@ -98,7 +98,7 @@
    • - + {{{ end }}}
    @@ -115,9 +115,9 @@ [[admin/settings/navigation:custom-route]]

    - -
  • -
    + {{{ each available }}} +
  • +

    @@ -125,7 +125,7 @@ [[admin/settings/navigation:core]] [[admin/settings/navigation:plugin]]

  • - + {{{ end }}}
    diff --git a/src/views/admin/settings/user.tpl b/src/views/admin/settings/user.tpl index 45edc8f5a5..f9f56e2eee 100644 --- a/src/views/admin/settings/user.tpl +++ b/src/views/admin/settings/user.tpl @@ -186,6 +186,19 @@ [[admin/settings/user:registration-approval-type.help, {config.relative_path}]]

    +
    + + +

    + [[admin/settings/user:registration-queue-auto-approve-time-help]] +

    +
    +
    + +
    @@ -286,6 +299,13 @@
    +
    + +
    +
    - + {{{ end }}}
    - + {{{ end }}}
    \ No newline at end of file diff --git a/src/views/modals/invite.tpl b/src/views/modals/invite.tpl new file mode 100644 index 0000000000..8184bf8c23 --- /dev/null +++ b/src/views/modals/invite.tpl @@ -0,0 +1,12 @@ +
    + + +
    +
    + + +
    \ No newline at end of file diff --git a/src/views/partials/noscript/message.tpl b/src/views/partials/noscript/message.tpl new file mode 100644 index 0000000000..8a5a1a4471 --- /dev/null +++ b/src/views/partials/noscript/message.tpl @@ -0,0 +1,9 @@ +{{{ if noScriptMessage }}} + +{{{ end }}} \ No newline at end of file diff --git a/src/views/partials/noscript/warning.tpl b/src/views/partials/noscript/warning.tpl new file mode 100644 index 0000000000..3d4cddd205 --- /dev/null +++ b/src/views/partials/noscript/warning.tpl @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/src/views/sitemap.tpl b/src/views/sitemap.tpl index e579ed9974..45c6b64ac6 100644 --- a/src/views/sitemap.tpl +++ b/src/views/sitemap.tpl @@ -6,9 +6,9 @@ {url}/sitemap/categories.xml - + {{{ each topics }}} - {url}/sitemap/topics.@value.xml + {url}/sitemap/topics.{@value}.xml - + {{{ end }}} \ No newline at end of file diff --git a/test/api.js b/test/api.js index 2b105d96d0..e67774f4ad 100644 --- a/test/api.js +++ b/test/api.js @@ -21,7 +21,7 @@ const flags = require('../src/flags'); const messaging = require('../src/messaging'); const utils = require('../src/utils'); -describe('Read API', async () => { +describe('API', async () => { let readApi = false; let writeApi = false; const readApiPath = path.resolve(__dirname, '../public/openapi/read.yaml'); @@ -32,6 +32,7 @@ describe('Read API', async () => { const unauthenticatedRoutes = ['/api/login', '/api/register']; // Everything else will be called with the admin user const mocks = { + head: {}, get: {}, post: {}, put: {}, @@ -48,6 +49,18 @@ describe('Read API', async () => { example: utils.generateUUID(), }, ], + '/users/{uid}/sessions/{uuid}': [ + { + in: 'path', + name: 'uid', + example: 1, + }, + { + in: 'path', + name: 'uuid', + example: '', // to be defined below... + }, + ], }, }; @@ -67,9 +80,9 @@ describe('Read API', async () => { // Create sample users const adminUid = await user.create({ username: 'admin', password: '123456', email: 'test@example.org' }); const unprivUid = await user.create({ username: 'unpriv', password: '123456', email: 'unpriv@example.org' }); - for (let x = 0; x < 3; x++) { + for (let x = 0; x < 4; x++) { // eslint-disable-next-line no-await-in-loop - await user.create({ username: 'deleteme', password: '123456' }); // for testing of user deletion routes (uids 4-6) + await user.create({ username: 'deleteme', password: '123456' }); // for testing of DELETE /users (uids 5, 6) and DELETE /user/:uid/account (uid 7) } await groups.join('administrators', adminUid); @@ -82,7 +95,7 @@ describe('Read API', async () => { tokens: [{ token: mocks.delete['/users/{uid}/tokens/{token}'][1].example, uid: 1, - description: 'for testing of token deletion rotue', + description: 'for testing of token deletion route', timestamp: Date.now(), }], }); @@ -171,8 +184,17 @@ describe('Read API', async () => { return; } - it('should have examples when parameters are present', () => { + it('should have each path parameter defined in its context', () => { method = _method; + if (!context[method].parameters) { + return; + } + + const names = (path.match(/{[\w\-_]+}?/g) || []).map(match => match.slice(1, -1)); + assert(context[method].parameters.map(param => (param.in === 'path' ? param.name : null)).filter(Boolean).every(name => names.includes(name)), `${method.toUpperCase()} ${path} has parameter(s) in path that are not defined in schema`); + }); + + it('should have examples when parameters are present', () => { let parameters = context[method].parameters; let testPath = path; @@ -200,7 +222,7 @@ describe('Read API', async () => { url = nconf.get('url') + (prefix || '') + testPath; }); - it('may contain a request body with application/json type if POST/PUT/DELETE', () => { + it('should contain a valid request body (if present) with application/json type if POST/PUT/DELETE', () => { if (['post', 'put', 'delete'].includes(method) && context[method].hasOwnProperty('requestBody')) { assert(context[method].requestBody); assert(context[method].requestBody.content); @@ -254,9 +276,11 @@ describe('Read API', async () => { }); it('should successfully re-login if needed', async () => { - const reloginPaths = ['/users/{uid}/password']; - if (method === 'put' && reloginPaths.includes(path)) { + const reloginPaths = ['PUT /users/{uid}/password', 'DELETE /users/{uid}/sessions/{uuid}']; + if (reloginPaths.includes(`${method.toUpperCase()} ${path}`)) { jar = await helpers.loginUser('admin', '123456'); + const sessionUUIDs = await db.getObject('uid:1:sessionUUID:sessionId'); + mocks.delete['/users/{uid}/sessions/{uuid}'][1].example = Object.keys(sessionUUIDs).pop(); // Retrieve CSRF token using cookie, to test Write API const config = await request({ diff --git a/test/categories.js b/test/categories.js index 242abd9294..f717052b5b 100644 --- a/test/categories.js +++ b/test/categories.js @@ -763,6 +763,7 @@ describe('Categories', function () { assert.ifError(err); assert.deepEqual(data, { ban: false, + invite: false, chat: false, 'search:content': false, 'search:users': false, @@ -812,6 +813,7 @@ describe('Categories', function () { assert.ifError(err); assert.deepEqual(data, { 'groups:ban': false, + 'groups:invite': false, 'groups:chat': true, 'groups:search:content': true, 'groups:search:users': true, diff --git a/test/feeds.js b/test/feeds.js index 34bf9d3905..6f540c1c71 100644 --- a/test/feeds.js +++ b/test/feeds.js @@ -182,7 +182,7 @@ describe('feeds', function () { request(nconf.get('url') + '/category/' + cid + '.rss?uid=' + fooUid + '&token=' + rssToken, { }, function (err, res, body) { assert.ifError(err); assert.equal(res.statusCode, 200); - assert(body); + assert(body.startsWith(' { + assert.strictEqual(post.index, index); + }); + }); + + it('should return 3 posts from 1 to 3 excluding main post', async function () { + const topicData = await topics.getTopicData(tid); + const start = 1; + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, start, 3, false); + assert.strictEqual(data.posts.length, 3); + assert.strictEqual(data.posts[0].content, 'topic reply 1'); + assert.strictEqual(data.posts[1].content, 'topic reply 2'); + assert.strictEqual(data.posts[2].content, 'topic reply 3'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index + start); + }); + }); + + it('should return main post and last 2 posts', async function () { + const topicData = await topics.getTopicData(tid); + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, 0, 2, true); + assert.strictEqual(data.posts.length, 3); + assert.strictEqual(data.posts[0].content, 'main post'); + assert.strictEqual(data.posts[1].content, 'topic reply 30'); + assert.strictEqual(data.posts[2].content, 'topic reply 29'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index); + }); + }); + + it('should return last 3 posts and not main post', async function () { + const topicData = await topics.getTopicData(tid); + const start = 1; + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, start, 3, true); + assert.strictEqual(data.posts.length, 3); + assert.strictEqual(data.posts[0].content, 'topic reply 30'); + assert.strictEqual(data.posts[1].content, 'topic reply 29'); + assert.strictEqual(data.posts[2].content, 'topic reply 28'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index + start); + }); + }); + + it('should return posts 29 to 27 posts and not main post', async function () { + const topicData = await topics.getTopicData(tid); + const start = 2; + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, start, 4, true); + assert.strictEqual(data.posts.length, 3); + assert.strictEqual(data.posts[0].content, 'topic reply 29'); + assert.strictEqual(data.posts[1].content, 'topic reply 28'); + assert.strictEqual(data.posts[2].content, 'topic reply 27'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index + start); + }); + }); + + it('should return 3 posts in reverse', async function () { + const topicData = await topics.getTopicData(tid); + const start = 28; + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, start, 30, true); + assert.strictEqual(data.posts.length, 3); + assert.strictEqual(data.posts[0].content, 'topic reply 3'); + assert.strictEqual(data.posts[1].content, 'topic reply 2'); + assert.strictEqual(data.posts[2].content, 'topic reply 1'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index + start); + }); + }); + + it('should get all posts with main post at the start', async function () { + const topicData = await topics.getTopicData(tid); + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, 0, -1, false); + assert.strictEqual(data.posts.length, 31); + assert.strictEqual(data.posts[0].content, 'main post'); + assert.strictEqual(data.posts[1].content, 'topic reply 1'); + assert.strictEqual(data.posts[data.posts.length - 1].content, 'topic reply 30'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index); + }); + }); + + it('should get all posts in reverse with main post at the start followed by reply 30', async function () { + const topicData = await topics.getTopicData(tid); + const data = await topics.getTopicWithPosts(topicData, 'tid:' + tid + ':posts', topic.userId, 0, -1, true); + assert.strictEqual(data.posts.length, 31); + assert.strictEqual(data.posts[0].content, 'main post'); + assert.strictEqual(data.posts[1].content, 'topic reply 30'); + assert.strictEqual(data.posts[data.posts.length - 1].content, 'topic reply 1'); + data.posts.forEach((post, index) => { + assert.strictEqual(post.index, index); }); }); }); diff --git a/test/translator.js b/test/translator.js index 628300166d..1776c06b9b 100644 --- a/test/translator.js +++ b/test/translator.js @@ -322,4 +322,44 @@ describe('Translator static methods', function () { done(); }); }); + + describe('add translation', function () { + it('should add custom translations', async function () { + shim.addTranslation('en-GB', 'my-namespace', { foo: 'a custom translation' }); + const t = await shim.translate('this is best [[my-namespace:foo]]'); + assert.strictEqual(t, 'this is best a custom translation'); + }); + }); + + describe('translate nested keys', function () { + it('should handle nested translations', async function () { + shim.addTranslation('en-GB', 'my-namespace', { + key: { + key1: 'key1 translated', + key2: { + key3: 'key3 translated', + }, + }, + }); + const t1 = await shim.translate('this is best [[my-namespace:key.key1]]'); + const t2 = await shim.translate('this is best [[my-namespace:key.key2.key3]]'); + assert.strictEqual(t1, 'this is best key1 translated'); + assert.strictEqual(t2, 'this is best key3 translated'); + }); + it("should try the defaults if it didn't reach a string in a nested translation", async function () { + shim.addTranslation('en-GB', 'my-namespace', { + default1: { + default1: 'default1 translated', + '': 'incorrect priority', + }, + default2: { + '': 'default2 translated', + }, + }); + const d1 = await shim.translate('this is best [[my-namespace:default1]]'); + const d2 = await shim.translate('this is best [[my-namespace:default2]]'); + assert.strictEqual(d1, 'this is best default1 translated'); + assert.strictEqual(d2, 'this is best default2 translated'); + }); + }); }); diff --git a/test/user.js b/test/user.js index 101373316c..02e3d010f8 100644 --- a/test/user.js +++ b/test/user.js @@ -5,6 +5,7 @@ var async = require('async'); var path = require('path'); var nconf = require('nconf'); var request = require('request'); +const requestAsync = require('request-promise-native'); var jwt = require('jsonwebtoken'); var db = require('./mocks/databasemock'); @@ -1919,160 +1920,374 @@ describe('User', function () { }); describe('invites', function () { - var socketUser = require('../src/socket.io/user'); + var notAnInviterUid; var inviterUid; var adminUid; + var PUBLIC_GROUP = 'publicGroup'; + var PRIVATE_GROUP = 'privateGroup'; + var OWN_PRIVATE_GROUP = 'ownPrivateGroup'; + var HIDDEN_GROUP = 'hiddenGroup'; + + var COMMON_PW = '123456'; + before(function (done) { async.parallel({ - inviter: async.apply(User.create, { username: 'inviter', email: 'inviter@nodebb.org' }), - admin: async.apply(User.create, { username: 'adminInvite' }), + publicGroup: async.apply(groups.create, { name: PUBLIC_GROUP, private: 0 }), + privateGroup: async.apply(groups.create, { name: PRIVATE_GROUP, private: 1 }), + hiddenGroup: async.apply(groups.create, { name: HIDDEN_GROUP, hidden: 1 }), + notAnInviter: async.apply(User.create, { username: 'notAnInviter', password: COMMON_PW, email: 'notaninviter@nodebb.org' }), + inviter: async.apply(User.create, { username: 'inviter', password: COMMON_PW, email: 'inviter@nodebb.org' }), + admin: async.apply(User.create, { username: 'adminInvite', password: COMMON_PW }), }, function (err, results) { assert.ifError(err); + notAnInviterUid = results.notAnInviter; inviterUid = results.inviter; adminUid = results.admin; - groups.join('administrators', adminUid, done); + async.parallel([ + async.apply(groups.create, { name: OWN_PRIVATE_GROUP, ownerUid: inviterUid, private: 1 }), + async.apply(groups.join, 'administrators', adminUid), + async.apply(groups.join, 'cid:0:privileges:invite', inviterUid), + ], done); }); }); - it('should error with invalid data', function (done) { - socketUser.invite({ uid: inviterUid }, null, function (err) { - assert.equal(err.message, '[[error:invalid-data]]'); - done(); - }); - }); + describe('when inviter is not an admin and does not have invite privilege', function () { + var csrf_token; + var jar; - it('should eror if forum is not invite only', function (done) { - socketUser.invite({ uid: inviterUid }, 'invite1@test.com', function (err) { - assert.equal(err.message, '[[error:forum-not-invite-only]]'); - done(); - }); - }); - - it('should error if user is not admin and type is admin-invite-only', function (done) { - meta.config.registrationType = 'admin-invite-only'; - socketUser.invite({ uid: inviterUid }, 'invite1@test.com', function (err) { - assert.equal(err.message, '[[error:no-privileges]]'); - done(); - }); - }); - - it('should send invitation email', function (done) { - meta.config.registrationType = 'invite-only'; - socketUser.invite({ uid: inviterUid }, 'invite1@test.com', function (err) { - assert.ifError(err); - done(); - }); - }); - - it('should error if ouf of invitations', function (done) { - meta.config.maximumInvites = 1; - socketUser.invite({ uid: inviterUid }, 'invite2@test.com', function (err) { - assert.equal(err.message, '[[error:invite-maximum-met, ' + 1 + ', ' + 1 + ']]'); - meta.config.maximumInvites = 5; - done(); - }); - }); - - it('should error if email exists', function (done) { - socketUser.invite({ uid: inviterUid }, 'inviter@nodebb.org', function (err) { - assert.equal(err.message, '[[error:email-taken]]'); - done(); - }); - }); - - it('should send invitation email', function (done) { - socketUser.invite({ uid: inviterUid }, 'invite2@test.com', function (err) { - assert.ifError(err); - done(); - }); - }); - - it('should get user\'s invites', function (done) { - User.getInvites(inviterUid, function (err, data) { - assert.ifError(err); - assert.notEqual(data.indexOf('invite1@test.com'), -1); - assert.notEqual(data.indexOf('invite2@test.com'), -1); - done(); - }); - }); - - it('should get all invites', function (done) { - User.getAllInvites(function (err, data) { - assert.ifError(err); - assert.equal(data[0].uid, inviterUid); - assert.notEqual(data[0].invitations.indexOf('invite1@test.com'), -1); - assert.notEqual(data[0].invitations.indexOf('invite2@test.com'), -1); - done(); - }); - }); - - it('should fail to verify invitation with invalid data', function (done) { - User.verifyInvitation({ token: '', email: '' }, function (err) { - assert.equal(err.message, '[[error:invalid-data]]'); - done(); - }); - }); - - it('should fail to verify invitation with invalid email', function (done) { - User.verifyInvitation({ token: 'test', email: 'doesnotexist@test.com' }, function (err) { - assert.equal(err.message, '[[error:invalid-token]]'); - done(); - }); - }); - - it('should verify installation with no errors', function (done) { - var email = 'invite1@test.com'; - db.get('invitation:email:' + email, function (err, token) { - assert.ifError(err); - User.verifyInvitation({ token: token, email: 'invite1@test.com' }, function (err) { + before(function (done) { + helpers.loginUser('notAnInviter', COMMON_PW, function (err, _jar) { assert.ifError(err); + jar = _jar; + + request({ + url: nconf.get('url') + '/api/config', + json: true, + jar: jar, + }, function (err, response, body) { + assert.ifError(err); + csrf_token = body.csrf_token; + done(); + }); + }); + }); + + it('should error if user does not have invite privilege', async () => { + const { res } = await helpers.invite({ emails: 'invite1@test.com', groupsToJoin: [] }, notAnInviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:no-privileges]]'); + }); + + it('should error out if user tries to use an inviter\'s uid via the API', async () => { + const { res } = await helpers.invite({ emails: 'invite1@test.com', groupsToJoin: [] }, inviterUid, jar, csrf_token); + const numInvites = await User.getInvitesNumber(inviterUid); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:no-privileges]]'); + assert.strictEqual(numInvites, 0); + }); + }); + + describe('when inviter has invite privilege', function () { + var csrf_token; + var jar; + + before(function (done) { + helpers.loginUser('inviter', COMMON_PW, function (err, _jar) { + assert.ifError(err); + jar = _jar; + + request({ + url: nconf.get('url') + '/api/config', + json: true, + jar: jar, + }, function (err, response, body) { + assert.ifError(err); + csrf_token = body.csrf_token; + done(); + }); + }); + }); + + it('should error with invalid data', async () => { + const { res } = await helpers.invite({}, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 400); + assert.strictEqual(res.body.status.message, '[[error:invalid-data]]'); + }); + + it('should error if user is not admin and type is admin-invite-only', async () => { + meta.config.registrationType = 'admin-invite-only'; + const { res } = await helpers.invite({ emails: 'invite1@test.com', groupsToJoin: [] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:no-privileges]]'); + }); + + it('should send invitation email (without groups to be joined)', async () => { + meta.config.registrationType = 'normal'; + const { res } = await helpers.invite({ emails: 'invite1@test.com', groupsToJoin: [] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 200); + }); + + it('should send multiple invitation emails (with a public group to be joined)', async () => { + const { res } = await helpers.invite({ emails: 'invite2@test.com,invite3@test.com', groupsToJoin: [PUBLIC_GROUP] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 200); + }); + + it('should error if the user has not permission to invite to the group', async () => { + const { res } = await helpers.invite({ emails: 'invite4@test.com', groupsToJoin: [PRIVATE_GROUP] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:no-privileges]]'); + }); + + it('should error if a non-admin tries to invite to the administrators group', async () => { + const { res } = await helpers.invite({ emails: 'invite4@test.com', groupsToJoin: ['administrators'] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:no-privileges]]'); + }); + + it('should to invite to own private group', async () => { + const { res } = await helpers.invite({ emails: 'invite4@test.com', groupsToJoin: [OWN_PRIVATE_GROUP] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 200); + }); + + it('should to invite to multiple groups', async () => { + const { res } = await helpers.invite({ emails: 'invite5@test.com', groupsToJoin: [PUBLIC_GROUP, OWN_PRIVATE_GROUP] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 200); + }); + + it('should error if tries to invite to hidden group', async () => { + const { res } = await helpers.invite({ emails: 'invite6@test.com', groupsToJoin: [HIDDEN_GROUP] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 403); + }); + + it('should error if ouf of invitations', async () => { + meta.config.maximumInvites = 1; + const { res } = await helpers.invite({ emails: 'invite6@test.com', groupsToJoin: [] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:invite-maximum-met, ' + 5 + ', ' + 1 + ']]'); + meta.config.maximumInvites = 10; + }); + + it('should send invitation email after maximumInvites increased', async () => { + const { res } = await helpers.invite({ emails: 'invite6@test.com', groupsToJoin: [] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 200); + }); + + it('should error if invite is sent via API with a different UID', async () => { + const { res } = await helpers.invite({ emails: 'inviter@nodebb.org', groupsToJoin: [] }, adminUid, jar, csrf_token); + const numInvites = await User.getInvitesNumber(adminUid); + assert.strictEqual(res.statusCode, 403); + assert.strictEqual(res.body.status.message, '[[error:no-privileges]]'); + assert.strictEqual(numInvites, 0); + }); + + it('should error if email exists', async () => { + const { res } = await helpers.invite({ emails: 'inviter@nodebb.org', groupsToJoin: [] }, inviterUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 400); + assert.strictEqual(res.body.status.message, '[[error:email-taken]]'); + }); + }); + + describe('when inviter is an admin', function () { + var csrf_token; + var jar; + + before(function (done) { + helpers.loginUser('adminInvite', COMMON_PW, function (err, _jar) { + assert.ifError(err); + jar = _jar; + + request({ + url: nconf.get('url') + '/api/config', + json: true, + jar: jar, + }, function (err, response, body) { + assert.ifError(err); + csrf_token = body.csrf_token; + done(); + }); + }); + }); + + it('should escape email', async () => { + await helpers.invite({ emails: '', groupsToJoin: [] }, adminUid, jar, csrf_token); + const data = await User.getInvites(adminUid); + assert.strictEqual(data[0], '<script>alert("ok");</script>'); + await User.deleteInvitationKey(''); + }); + + it('should invite to the administrators group if inviter is an admin', async () => { + const { res } = await helpers.invite({ emails: 'invite99@test.com', groupsToJoin: ['administrators'] }, adminUid, jar, csrf_token); + assert.strictEqual(res.statusCode, 200); + }); + }); + + describe('after invites checks', function () { + it('should get user\'s invites', function (done) { + User.getInvites(inviterUid, function (err, data) { + assert.ifError(err); + Array.from(Array(6)).forEach((_, i) => { + assert.notEqual(data.indexOf('invite' + (i + 1) + '@test.com'), -1); + }); done(); }); }); - }); - it('should error with invalid username', function (done) { - User.deleteInvitation('doesnotexist', 'test@test.com', function (err) { - assert.equal(err.message, '[[error:invalid-username]]'); - done(); - }); - }); - - it('should delete invitation', function (done) { - var socketUser = require('../src/socket.io/user'); - socketUser.deleteInvitation({ uid: adminUid }, { invitedBy: 'inviter', email: 'invite1@test.com' }, function (err) { - assert.ifError(err); - db.isSetMember('invitation:uid:' + inviterUid, 'invite1@test.com', function (err, isMember) { + it('should get all invites', function (done) { + User.getAllInvites(function (err, data) { assert.ifError(err); - assert.equal(isMember, false); + + var adminData = data.filter(d => parseInt(d.uid, 10) === adminUid)[0]; + assert.notEqual(adminData.invitations.indexOf('invite99@test.com'), -1); + + var inviterData = data.filter(d => parseInt(d.uid, 10) === inviterUid)[0]; + Array.from(Array(6)).forEach((_, i) => { + assert.notEqual(inviterData.invitations.indexOf('invite' + (i + 1) + '@test.com'), -1); + }); + done(); }); }); - }); - it('should delete invitation key', function (done) { - User.deleteInvitationKey('invite2@test.com', function (err) { - assert.ifError(err); - db.isSetMember('invitation:uid:' + inviterUid, 'invite2@test.com', function (err, isMember) { + it('should fail to verify invitation with invalid data', function (done) { + User.verifyInvitation({ token: '', email: '' }, function (err) { + assert.equal(err.message, '[[error:invalid-data]]'); + done(); + }); + }); + + it('should fail to verify invitation with invalid email', function (done) { + User.verifyInvitation({ token: 'test', email: 'doesnotexist@test.com' }, function (err) { + assert.equal(err.message, '[[error:invalid-token]]'); + done(); + }); + }); + + it('should verify installation with no errors', function (done) { + var email = 'invite1@test.com'; + db.getObjectField('invitation:email:' + email, 'token', function (err, token) { assert.ifError(err); - assert.equal(isMember, false); - db.isSetMember('invitation:uids', inviterUid, function (err, isMember) { + User.verifyInvitation({ token: token, email: 'invite1@test.com' }, function (err) { + assert.ifError(err); + done(); + }); + }); + }); + + it('should error with invalid username', function (done) { + User.deleteInvitation('doesnotexist', 'test@test.com', function (err) { + assert.equal(err.message, '[[error:invalid-username]]'); + done(); + }); + }); + + it('should delete invitation', function (done) { + var socketUser = require('../src/socket.io/user'); + socketUser.deleteInvitation({ uid: adminUid }, { invitedBy: 'inviter', email: 'invite1@test.com' }, function (err) { + assert.ifError(err); + db.isSetMember('invitation:uid:' + inviterUid, 'invite1@test.com', function (err, isMember) { assert.ifError(err); assert.equal(isMember, false); done(); }); }); }); + + it('should delete invitation key', function (done) { + User.deleteInvitationKey('invite99@test.com', function (err) { + assert.ifError(err); + db.isSetMember('invitation:uid:' + adminUid, 'invite99@test.com', function (err, isMember) { + assert.ifError(err); + assert.equal(isMember, false); + db.isSetMember('invitation:uids', adminUid, function (err, isMember) { + assert.ifError(err); + assert.equal(isMember, false); + done(); + }); + }); + }); + }); + + it('should joined the groups from invitation after registration', async function () { + var email = 'invite5@test.com'; + var groupsToJoin = [PUBLIC_GROUP, OWN_PRIVATE_GROUP]; + var token = await db.getObjectField('invitation:email:' + email, 'token'); + + await new Promise(function (resolve, reject) { + helpers.registerUser({ + username: 'invite5', + password: '123456', + 'password-confirm': '123456', + email: email, + gdpr_consent: true, + token: token, + }, async function (err, jar, response, body) { + if (err) { + reject(err); + } + + var memberships = await groups.isMemberOfGroups(body.uid, groupsToJoin); + var joinedToAll = memberships.filter(Boolean); + + if (joinedToAll.length !== groupsToJoin.length) { + reject(new Error('Not joined to the groups')); + } + + resolve(); + }); + }); + }); }); - it('should escape email', function (done) { - socketUser.invite({ uid: inviterUid }, '', function (err) { - assert.ifError(err); - User.getInvites(inviterUid, function (err, data) { + describe('invite groups', () => { + var csrf_token; + var jar; + + before(function (done) { + helpers.loginUser('inviter', COMMON_PW, function (err, _jar) { assert.ifError(err); - assert.equal(data[0], '<script>alert("ok");</script>'); - done(); + jar = _jar; + + request({ + url: nconf.get('url') + '/api/config', + json: true, + jar: jar, + }, function (err, response, body) { + assert.ifError(err); + csrf_token = body.csrf_token; + done(); + }); + }); + }); + + it('should show a list of groups for adding to an invite', async () => { + const body = await requestAsync({ + url: `${nconf.get('url')}/api/v3/users/${inviterUid}/invites/groups`, + json: true, + jar, + }); + + assert(Array.isArray(body.response)); + assert.strictEqual(2, body.response.length); + assert.deepStrictEqual(body.response, ['ownPrivateGroup', 'publicGroup']); + }); + + it('should error out if you request invite groups for another uid', async () => { + const res = await requestAsync({ + url: `${nconf.get('url')}/api/v3/users/${adminUid}/invites/groups`, + json: true, + jar, + simple: false, + resolveWithFullResponse: true, + }); + + assert.strictEqual(res.statusCode, 401); + assert.deepStrictEqual(res.body, { + status: { + code: 'not-authorised', + message: 'A valid login session was not found. Please log in and try again.', + }, + response: {}, }); }); });