diff --git a/public/language/en-GB/admin/admin.json b/public/language/en-GB/admin/admin.json
index a64cc856a6..9c01f56006 100644
--- a/public/language/en-GB/admin/admin.json
+++ b/public/language/en-GB/admin/admin.json
@@ -2,5 +2,6 @@
"alert.confirm-reload": "Are you sure you wish to reload NodeBB?",
"alert.confirm-restart": "Are you sure you wish to restart NodeBB?",
- "acp-title": "%1 | NodeBB Admin Control Panel"
+ "acp-title": "%1 | NodeBB Admin Control Panel",
+ "settings-header-contents": "Contents"
}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/advanced.json b/public/language/en-GB/admin/settings/advanced.json
new file mode 100644
index 0000000000..b023528d04
--- /dev/null
+++ b/public/language/en-GB/admin/settings/advanced.json
@@ -0,0 +1,19 @@
+{
+ "maintenance-mode": "Maintenance Mode",
+ "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
+ "maintenance-mode.message": "Maintenance Message",
+ "headers": "Headers",
+ "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame",
+ "headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB",
+ "headers.acao": "Access-Control-Allow-Origin",
+ "headers.acao-help": "To deny access to all sites, leave empty or set to null
",
+ "headers.acam": "Access-Control-Allow-Methods",
+ "headers.acah": "Access-Control-Allow-Headers",
+ "traffic-management": "Traffic Management",
+ "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.",
+ "traffic.enable": "Enable Traffic Management",
+ "traffic.event-lag": "Event Loop Lag Threshold (in milliseconds)",
+ "traffic.event-lag-help": "Lowering this value decreases wait times for page loads, but will also show the \"excessive load\" message to more users. (Restart required)",
+ "traffic.lag-check-interval": "Check Interval (in milliseconds)",
+ "traffic.lag-check-interval-help": "Lowering this value causes NodeBB to become more sensitive to spikes in load, but may also cause the check to become too sensitive. (Restart required)"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/chat.json b/public/language/en-GB/admin/settings/chat.json
new file mode 100644
index 0000000000..0b22127341
--- /dev/null
+++ b/public/language/en-GB/admin/settings/chat.json
@@ -0,0 +1,9 @@
+{
+ "chat-settings": "Chat Settings",
+ "disable": "Disable chat",
+ "disable-editing": "Disable chat message editing/deletion",
+ "disable-editing-help": "Administrators and global moderators are exempt from this restriction",
+ "max-length": "Maximum length of chat messages",
+ "max-room-size": "Maximum number of users in chat rooms",
+ "delay": "Time between chat messages in milliseconds"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/cookies.json b/public/language/en-GB/admin/settings/cookies.json
new file mode 100644
index 0000000000..f8b0f0538b
--- /dev/null
+++ b/public/language/en-GB/admin/settings/cookies.json
@@ -0,0 +1,11 @@
+{
+ "eu-consent": "EU Consent",
+ "consent.enabled": "Enabled",
+ "consent.message": "Notification message",
+ "consent.acceptance": "Acceptance message",
+ "consent.link-text": "Policy Link Text",
+ "consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
+ "settings": "Settings",
+ "cookie-domain": "Session cookie domain",
+ "blank-default": "Leave blank for default"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/email.json b/public/language/en-GB/admin/settings/email.json
new file mode 100644
index 0000000000..1e92c88490
--- /dev/null
+++ b/public/language/en-GB/admin/settings/email.json
@@ -0,0 +1,25 @@
+{
+ "email-settings": "Email Settings",
+ "address": "Email Address",
+ "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.",
+ "gmail-routing": "Gmail Routing",
+ "gmail-routing-help1": "There have been reports of Gmail Routing not working on accounts with heightened security. In those scenarios, you will have to configure your GMail account to allow less secure apps.",
+ "gmail-routing-help2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.",
+ "gmail-transport": "Route emails through a Gmail/Google Apps account",
+ "gmail-transport.username": "Username",
+ "gmail-transport.username-help": "Enter the full email address here, especially if you are using a Google Apps managed domain.",
+ "gmail-transport.password": "Password",
+ "template": "Edit Email Template",
+ "template.select": "Select Email Template",
+ "template.revert": "Revert to Original",
+ "testing": "Email Testing",
+ "testing.select": "Select Email Template",
+ "testing.send": "Send Test Email",
+ "testing.send-help": "The test email will be sent to the currently logged in user's email address.",
+ "subscriptions": "Email Subscriptions",
+ "subscriptions.disable": "Disable subscriber notification emails",
+ "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 "
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/general.json b/public/language/en-GB/admin/settings/general.json
new file mode 100644
index 0000000000..c26740ee4f
--- /dev/null
+++ b/public/language/en-GB/admin/settings/general.json
@@ -0,0 +1,30 @@
+{
+ "site-settings": "Site Settings",
+ "title": "Site Title",
+ "title.name": "Your Community Name",
+ "title.show-in-header": "Show Site Title in Header",
+ "browser-title": "Browser Title",
+ "browser-title-help": "If no browser title is specified, the site title will be used",
+ "title-layout": "Title Layout",
+ "title-layout-help": "Define how the browser title will be structured ie. {pageTitle} | {browserTitle}",
+ "description.placeholder": "A short description about your community",
+ "description": "Site Description",
+ "keywords": "Site Keywords",
+ "keywords-placeholder": "Keywords describing your community, comma-separated",
+ "logo": "Site Logo",
+ "logo.image": "Image",
+ "logo.image-placeholder": "Path to a logo to display on forum header",
+ "logo.upload": "Upload",
+ "logo.url": "URL",
+ "logo.url-placeholder": "The URL of the site logo",
+ "logo.url-help": "When the logo is clicked, send users to this address. If left blank, user will be sent to the forum index.",
+ "logo.alt-text": "Alt Text",
+ "log.alt-text-placeholder": "Alternative text for accessibility",
+ "favicon": "Favicon",
+ "favicon.upload": "Upload",
+ "touch-icon": "Homescreen/Touch Icon",
+ "touch-icon.upload": "Upload",
+ "touch-icon.help": "Recommended size and format: 192x192, PNG format only. If no touch icon is specified, NodeBB will fall back to using the favicon.",
+ "outgoing-links": "Outgoing Links",
+ "outgoing-links.warning-page": "Use Outgoing Links Warning Page"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/group.json b/public/language/en-GB/admin/settings/group.json
new file mode 100644
index 0000000000..1ae88c9cf5
--- /dev/null
+++ b/public/language/en-GB/admin/settings/group.json
@@ -0,0 +1,12 @@
+{
+ "general": "General",
+ "private-groups": "Private Groups",
+ "private-groups.help": "If enabled, joining of groups requires the approval of the group owner (Default: enabled)",
+ "private-groups.warning": "Beware! If this option is disabled and you have private groups, they automatically become public.",
+ "allow-creation": "Allow Group Creation",
+ "allow-creation-help": "If enabled, users can create groups (Default: disabled)",
+ "max-name-length": "Maximum Group Name Length",
+ "cover-image": "Group Cover Image",
+ "default-cover": "Default Cover Images",
+ "default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image"
+}
\ 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
new file mode 100644
index 0000000000..6b2ac2c8b2
--- /dev/null
+++ b/public/language/en-GB/admin/settings/guest.json
@@ -0,0 +1,8 @@
+{
+ "handles": "Guest Handles",
+ "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\"",
+ "privileges": "Guest Privileges",
+ "privileges.can-search": "Allow guests to search without logging in",
+ "privileges.can-search-users": "Allow guests to search users without logging in"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/notifications.json b/public/language/en-GB/admin/settings/notifications.json
new file mode 100644
index 0000000000..4eff7f341a
--- /dev/null
+++ b/public/language/en-GB/admin/settings/notifications.json
@@ -0,0 +1,5 @@
+{
+ "notifications": "Notifications",
+ "welcome-notification": "Welcome Notification",
+ "welcome-notification-link": "Welcome Notification Link"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/pagination.json b/public/language/en-GB/admin/settings/pagination.json
new file mode 100644
index 0000000000..27d71b4de5
--- /dev/null
+++ b/public/language/en-GB/admin/settings/pagination.json
@@ -0,0 +1,9 @@
+{
+ "pagination": "Pagination Settings",
+ "enable": "Paginate topics and posts instead of using infinite scroll.",
+ "topics": "Topic Pagination",
+ "posts-per-page": "Posts per Page",
+ "categories": "Category Pagination",
+ "topics-per-page": "Topics per Page",
+ "initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/post.json b/public/language/en-GB/admin/settings/post.json
new file mode 100644
index 0000000000..f8aae19628
--- /dev/null
+++ b/public/language/en-GB/admin/settings/post.json
@@ -0,0 +1,44 @@
+{
+ "sorting": "Post Sorting",
+ "sorting.post-default": "Default Post Sorting",
+ "sorting.oldest-to-newest": "Oldest to Newest",
+ "sorting.newest-to-oldest": ">Newest to Oldest",
+ "sorting.most-votes": "Most Votes",
+ "sorting.topic-default": "Default Topic Sorting",
+ "restrictions": "Posting Restrictions",
+ "restrictions.seconds-between": "Seconds between Posts",
+ "restrictions.seconds-between-new": "Seconds between Posts for New Users",
+ "restrictions.rep-threshold": "Reputation threshold before this restriction is lifted",
+ "restrictions.seconds-defore-new": "Seconds before new user can post",
+ "restrictions.seconds-edit-after": "Number of seconds users are allowed to edit posts after posting. (0 disabled)",
+ "restrictions.seconds-delete-after": "Number of seconds users are allowed to delete posts after posting. (0 disabled)",
+ "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)",
+ "restrictions.min-title-length": "Minimum Title Length",
+ "restrictions.max-title-length": "Maximum Title Length",
+ "restrictions.min-post-length": "Minimum Post Length",
+ "restrictions.max-post-length": "Maximum Post Length",
+ "restrictions.days-until-stale": "Days until Topic is considered stale",
+ "restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.",
+ "timestamp": "Timestamp",
+ "timestamp.cut-off": "Date cut-off (in days)",
+ "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30
, or one month). Set to 0 to always display dates, leave blank to always display relative times.",
+ "teaser": "Teaser Post",
+ "teaser.last-post": "Last – Show the latest post, including the original post, if no replies",
+ "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
+ "teaser.first": "First",
+ "unread": "Unread Settings",
+ "unread.cutoff": "Unread cutoff days",
+ "unread.min-track-last": "Minimum posts in topic before tracking last read",
+ "signature": "Signature Settings",
+ "signature.disable": "Disable signatures",
+ "signature.no-links": "Disable links in signatures",
+ "signature.no-images": "Disable images in signatures",
+ "signature.max-length": "Maximum Signature Length",
+ "composer": "Composer Settings",
+ "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.",
+ "composer.show-help": "Show \"Help\" tab",
+ "composer.enable-plugin-help": "Allow plugins to add content to the help tab",
+ "composer.custom-help": "Custom Help Text",
+ "ip-tracking": "IP Tracking",
+ "ip-tracking.each-post": "Track IP Address for each post"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/reputation.json b/public/language/en-GB/admin/settings/reputation.json
new file mode 100644
index 0000000000..11d6184721
--- /dev/null
+++ b/public/language/en-GB/admin/settings/reputation.json
@@ -0,0 +1,8 @@
+{
+ "reputation": "Reputation Settings",
+ "disable": "Disable Reputation System",
+ "disable-down-voting": "Disable Down Voting",
+ "thresholds": "Activity Thresholds",
+ "min-rep-downvote": "Minimum reputation to downvote posts",
+ "min-rep-flag": "Minimum reputation to flag posts"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/sockets.json b/public/language/en-GB/admin/settings/sockets.json
new file mode 100644
index 0000000000..d04ee42fcf
--- /dev/null
+++ b/public/language/en-GB/admin/settings/sockets.json
@@ -0,0 +1,6 @@
+{
+ "reconnection": "Reconnection Settings",
+ "max-attempts": "Max Reconnection Attempts",
+ "default-placeholder": "Default: %1",
+ "delay": "Reconnection Delay"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/tags.json b/public/language/en-GB/admin/settings/tags.json
new file mode 100644
index 0000000000..6f31f60ba0
--- /dev/null
+++ b/public/language/en-GB/admin/settings/tags.json
@@ -0,0 +1,12 @@
+{
+ "tag": "Tag Settings",
+ "min-per-topic": "Minimum Tags per Topic",
+ "max-per-topic": "Maximum Tags per Topic",
+ "min-length": "Minimum Tag Length",
+ "max-length": "Maximum Tag Length",
+ "goto-manage": "Click here to visit the tag management page.",
+ "privacy": "Privacy",
+ "list-private": "Make the tags list private",
+ "related-topics": "Related Topics",
+ "max-related-topics": "Maximum related topics to display (if supported by theme)"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/uploads.json b/public/language/en-GB/admin/settings/uploads.json
new file mode 100644
index 0000000000..8a56c85663
--- /dev/null
+++ b/public/language/en-GB/admin/settings/uploads.json
@@ -0,0 +1,28 @@
+{
+ "posts": "Posts",
+ "allow-files": "Allow users to upload regular files",
+ "private": "Make uploaded files private",
+ "max-image-width": "Resize images down to specified width (in pixels)",
+ "max-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)",
+ "max-file-size": "Maximum File Size (in KiB)",
+ "max-file-size-help": "(in kilobytes, default: 2048 KiB)",
+ "allow-topic-thumbnails": "Allow users to upload topic thumbnails",
+ "topic-thumb-size": "Topic Thumb Size",
+ "allowed-file-extensions": "Allowed File Extensions",
+ "allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. pdf,xls,doc
).\n\t\t\t\t\tAn empty list means all extensions are allowed.",
+ "profile-avatars": "Profile Avatars",
+ "allow-profile-image-uploads": "Allow users to upload profile images",
+ "convert-profile-image-png": "Convert profile image uploads to PNG",
+ "default-avatar": "Custom Default Avatar",
+ "upload": "Upload",
+ "profile-image-dimension": "Profile Image Dimension",
+ "profile-image-dimension-help": "(in pixels, default: 128 pixels)",
+ "max-profile-image-size": "Maximum Profile Image File Size",
+ "max-profile-image-size-help": "(in kilobytes, default: 256 KiB)",
+ "max-cover-image-size": "Maximum Cover Image File Size",
+ "max-cover-image-size-help": "(in kilobytes, default: 2,048 KiB)",
+ "keep-all-user-images": "Keep old versions of avatars and profile covers on the server",
+ "profile-covers": "Profile Covers",
+ "default-covers": "Default Cover Images",
+ "default-covers-help": "Add comma-separated default cover images for accounts that don't have an uploaded cover image"
+}
\ 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
new file mode 100644
index 0000000000..bdabb075e9
--- /dev/null
+++ b/public/language/en-GB/admin/settings/user.json
@@ -0,0 +1,59 @@
+{
+ "authentication": "Authentication",
+ "allow-local-login": "Allow local login",
+ "require-email-confirmation": "Require Email Confirmation",
+ "email-confirm-interval": "User may not resend a confirmation email until",
+ "email-confirm-email2": "minutes have elapsed",
+ "allow-login-with": "Allow login with",
+ "allow-login-with.username-email": "Username or Email",
+ "allow-login-with.username": "Username Only",
+ "allow-login-with.email": "Email Only",
+ "account-settings": "Account Settings",
+ "disable-username-changes": "Disable username changes",
+ "disable-email-changes": "Disable email changes",
+ "disable-password-changes": "Disable password changes",
+ "allow-account-deletion": "Allow account deletion",
+ "user-info-private": "Make user info private",
+ "themes": "Themes",
+ "disable-user-skins": "Prevent users from choosing a custom skin",
+ "account-protection": "Account Protection",
+ "login-attempts": "Login attempts per hour",
+ "login-attempts-help": "If login attempts to a user's account exceeds this threshold, that account will be locked for a pre-configured amount of time",
+ "lockout-duration": "Account Lockout Duration (minutes)",
+ "login-days": "Days to remember user login sessions",
+ "password-expiry-days": "Force password reset after a set number of days",
+ "registration": "User Registration",
+ "registration-type": "Registration Type",
+ "registration-type.normal": "Normal",
+ "registration-type.admin-approval": "Admin Approval",
+ "registration-type.admin-approval-ip": "Admin Approval for IPs",
+ "registration-type.invite-only": "Invite Only",
+ "registration-type.admin-invite-only": "Admin Invite Only",
+ "registration-type.disabled": "No registration",
+ "registration-type.help": "Normal - Users can register from the /register page.
\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.
\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.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\"",
+ "min-username-length": "Minimum Username Length",
+ "max-username-length": "Maximum Username Length",
+ "min-password-length": "Minimum Password Length",
+ "max-about-me-length": "Maximum About Me Length",
+ "terms-of-use": "Forum Terms of Use (Leave blank to disable)",
+ "user-search": "User Search",
+ "user-search-results-per-page": "Number of results to display",
+ "default-user-settings": "Default User Settings",
+ "show-email": "Show email",
+ "show-fullname": "Show fullname",
+ "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",
+ "digest-freq": "Subscribe to Digest",
+ "digest-freq.off": "Off",
+ "digest-freq.daily": "Daily",
+ "digest-freq.weekly": "Weekly",
+ "digest-freq.monthly": "Monthly",
+ "email-chat-notifs": "Send an email if a new chat message arrives and I am not online",
+ "email-post-notif": "Send an email when replies are made to topics I am subscribed to",
+ "follow-created-topics": "Follow topics you create",
+ "follow-replied-topics": "Follow topics that you reply to"
+}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/settings/web-crawler.json b/public/language/en-GB/admin/settings/web-crawler.json
new file mode 100644
index 0000000000..2e0d31d12b
--- /dev/null
+++ b/public/language/en-GB/admin/settings/web-crawler.json
@@ -0,0 +1,10 @@
+{
+ "crawlability-settings": "Crawlability Settings",
+ "robots-txt": "Custom Robots.txt Leave blank for default",
+ "sitemap-feed-settings": "Sitemap & Feed Settings",
+ "disable-rss-feeds": "Disable RSS Feeds",
+ "disable-sitemap-xml": "Disable Sitemap.xml",
+ "sitemap-topics": "Number of Topics to display in the Sitemap",
+ "clear-sitemap-cache": "Clear Sitemap Cache",
+ "view-sitemap": "View Sitemap"
+}
\ No newline at end of file
diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl
index ea481dcfb8..9ab06ed811 100644
--- a/src/views/admin/partials/menu.tpl
+++ b/src/views/admin/partials/menu.tpl
@@ -148,7 +148,7 @@