diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 476c80778f..fda479175b 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -30,7 +30,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Login to Docker Hub + - name: Login to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io @@ -45,7 +45,8 @@ jobs: tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} - type=raw,value=latest + type=semver,pattern={{major}}.x + type=raw,value=latest,enable={{is_default_branch}} - name: Build and push Docker images uses: docker/build-push-action@v4 @@ -54,3 +55,6 @@ jobs: file: ./Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} + platforms: linux/amd64,linux/arm64,linux/arm/v7 + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.tx/config b/.tx/config index 59c7f74acc..7c8a5f5a8a 100644 --- a/.tx/config +++ b/.tx/config @@ -2445,6 +2445,110 @@ trans.bn = public/language/bn/admin/settings/web-crawler.json trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json trans.sc = public/language/sc/admin/settings/web-crawler.json +[o:nodebb:p:nodebb:r:themes-harmony] +file_filter = public/language//themes/harmony.json +source_file = public/language/en-GB/themes/harmony.json +source_lang = en_GB +type = KEYVALUEJSON +trans.th = public/language/th/themes/harmony.json +trans.bg = public/language/bg/themes/harmony.json +trans.hr = public/language/hr/themes/harmony.json +trans.hy = public/language/hy/themes/harmony.json +trans.sk = public/language/sk/themes/harmony.json +trans.sl = public/language/sl/themes/harmony.json +trans.sq_AL = public/language/sq-AL/themes/harmony.json +trans.sv = public/language/sv/themes/harmony.json +trans.vi = public/language/vi/themes/harmony.json +trans.da = public/language/da/themes/harmony.json +trans.en_US = public/language/en-US/themes/harmony.json +trans.gl = public/language/gl/themes/harmony.json +trans.ko = public/language/ko/themes/harmony.json +trans.lt = public/language/lt/themes/harmony.json +trans.pt_BR = public/language/pt-BR/themes/harmony.json +trans.hu = public/language/hu/themes/harmony.json +trans.lv = public/language/lv/themes/harmony.json +trans.ro = public/language/ro/themes/harmony.json +trans.ru = public/language/ru/themes/harmony.json +trans.sr = public/language/sr/themes/harmony.json +trans.bn = public/language/bn/themes/harmony.json +trans.he = public/language/he/themes/harmony.json +trans.nl = public/language/nl/themes/harmony.json +trans.sc = public/language/sc/themes/harmony.json +trans.zh_CN = public/language/zh-CN/themes/harmony.json +trans.fi = public/language/fi/themes/harmony.json +trans.ja = public/language/ja/themes/harmony.json +trans.nb = public/language/nb/themes/harmony.json +trans.pl = public/language/pl/themes/harmony.json +trans.zh_TW = public/language/zh-TW/themes/harmony.json +trans.ar = public/language/ar/themes/harmony.json +trans.cs = public/language/cs/themes/harmony.json +trans.fa_IR = public/language/fa-IR/themes/harmony.json +trans.ms = public/language/ms/themes/harmony.json +trans.pt_PT = public/language/pt-PT/themes/harmony.json +trans.tr = public/language/tr/themes/harmony.json +trans.en@pirate = public/language/en-x-pirate/themes/harmony.json +trans.fr = public/language/fr/themes/harmony.json +trans.id = public/language/id/themes/harmony.json +trans.uk = public/language/uk/themes/harmony.json +trans.de = public/language/de/themes/harmony.json +trans.el = public/language/el/themes/harmony.json +trans.es = public/language/es/themes/harmony.json +trans.et = public/language/et/themes/harmony.json +trans.it = public/language/it/themes/harmony.json +trans.rw = public/language/rw/themes/harmony.json + +[o:nodebb:p:nodebb:r:themes-persona] +file_filter = public/language//themes/persona.json +source_file = public/language/en-GB/themes/persona.json +source_lang = en_GB +type = KEYVALUEJSON +trans.th = public/language/th/themes/persona.json +trans.bg = public/language/bg/themes/persona.json +trans.hr = public/language/hr/themes/persona.json +trans.hy = public/language/hy/themes/persona.json +trans.sk = public/language/sk/themes/persona.json +trans.sl = public/language/sl/themes/persona.json +trans.sq_AL = public/language/sq-AL/themes/persona.json +trans.sv = public/language/sv/themes/persona.json +trans.vi = public/language/vi/themes/persona.json +trans.da = public/language/da/themes/persona.json +trans.en_US = public/language/en-US/themes/persona.json +trans.gl = public/language/gl/themes/persona.json +trans.ko = public/language/ko/themes/persona.json +trans.lt = public/language/lt/themes/persona.json +trans.pt_BR = public/language/pt-BR/themes/persona.json +trans.hu = public/language/hu/themes/persona.json +trans.lv = public/language/lv/themes/persona.json +trans.ro = public/language/ro/themes/persona.json +trans.ru = public/language/ru/themes/persona.json +trans.sr = public/language/sr/themes/persona.json +trans.bn = public/language/bn/themes/persona.json +trans.he = public/language/he/themes/persona.json +trans.nl = public/language/nl/themes/persona.json +trans.sc = public/language/sc/themes/persona.json +trans.zh_CN = public/language/zh-CN/themes/persona.json +trans.fi = public/language/fi/themes/persona.json +trans.ja = public/language/ja/themes/persona.json +trans.nb = public/language/nb/themes/persona.json +trans.pl = public/language/pl/themes/persona.json +trans.zh_TW = public/language/zh-TW/themes/persona.json +trans.ar = public/language/ar/themes/persona.json +trans.cs = public/language/cs/themes/persona.json +trans.fa_IR = public/language/fa-IR/themes/persona.json +trans.ms = public/language/ms/themes/persona.json +trans.pt_PT = public/language/pt-PT/themes/persona.json +trans.tr = public/language/tr/themes/persona.json +trans.en@pirate = public/language/en-x-pirate/themes/persona.json +trans.fr = public/language/fr/themes/persona.json +trans.id = public/language/id/themes/persona.json +trans.uk = public/language/uk/themes/persona.json +trans.de = public/language/de/themes/persona.json +trans.el = public/language/el/themes/persona.json +trans.es = public/language/es/themes/persona.json +trans.et = public/language/et/themes/persona.json +trans.it = public/language/it/themes/persona.json +trans.rw = public/language/rw/themes/persona.json + [o:nodebb:p:nodebb:r:category] file_filter = public/language//category.json source_file = public/language/en-GB/category.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b4c382222..98ea864ec5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +#### v3.0.1 (2023-05-02) + +##### Chores + +* incrementing version number - v3.0.0 (224e08cd) +* update changelog for v3.0.0 (56ad381f) + +##### Bug Fixes + +* #11554, email requirement bypass by sending in whitespace (2b8dd3d2) +* update openapi spec to specify optional `expiry` argument available to be passed in via request body. (b3787bd5) +* #11545, wrong message shown to new users re: email confirmation (2b70063e) +* black on red coloration on error when a bad reset code is received (604a8f7e) +* use query param sort over user setting if it's set (9484ddc3) + #### v3.0.0 (2023-04-26) ##### Breaking Changes diff --git a/Dockerfile b/Dockerfile index 8a5b7ae9bb..d7277a3389 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,19 @@ +FROM --platform=$BUILDPLATFORM node:lts as npm + +RUN mkdir -p /usr/src/build && \ + chown -R node:node /usr/src/build +WORKDIR /usr/src/build + +ARG NODE_ENV +ENV NODE_ENV $NODE_ENV + +COPY --chown=node:node install/package.json /usr/src/build/package.json + +USER node + +RUN npm install --omit=dev + + FROM node:lts RUN mkdir -p /usr/src/app && \ @@ -7,11 +23,11 @@ WORKDIR /usr/src/app ARG NODE_ENV ENV NODE_ENV $NODE_ENV -COPY --chown=node:node install/package.json /usr/src/app/package.json +COPY --chown=node:node --from=npm /usr/src/build /usr/src/app USER node -RUN npm install --only=prod && \ +RUN npm rebuild && \ npm cache clean --force COPY --chown=node:node . /usr/src/app diff --git a/Gruntfile.js b/Gruntfile.js index f3fbe5f21c..6c02efa808 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -65,7 +65,7 @@ module.exports = function (grunt) { const templatesUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`); const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`); - + const interval = 100; grunt.config(['watch'], { styleUpdated: { files: [ @@ -73,7 +73,7 @@ module.exports = function (grunt) { ...styleUpdated_Client, ], options: { - interval: 1000, + interval: interval, }, }, clientUpdated: { @@ -84,7 +84,7 @@ module.exports = function (grunt) { 'node_modules/benchpressjs/build/benchpress.js', ], options: { - interval: 1000, + interval: interval, }, }, serverUpdated: { @@ -99,7 +99,7 @@ module.exports = function (grunt) { '!src/upgrades/**', ], options: { - interval: 1000, + interval: interval, }, }, templatesUpdated: { @@ -108,7 +108,7 @@ module.exports = function (grunt) { ...templatesUpdated, ], options: { - interval: 1000, + interval: interval, }, }, langUpdated: { @@ -118,7 +118,7 @@ module.exports = function (grunt) { ...langUpdated, ], options: { - interval: 1000, + interval: interval, }, }, }); diff --git a/install/package.json b/install/package.json index 89b92b7271..d3d25df471 100644 --- a/install/package.json +++ b/install/package.json @@ -29,9 +29,9 @@ }, "dependencies": { "@adactive/bootstrap-tagsinput": "0.8.2", - "@isaacs/ttlcache": "1.2.2", + "@isaacs/ttlcache": "1.4.0", "@popperjs/core": "2.11.7", - "ace-builds": "1.18.0", + "ace-builds": "1.19.0", "archiver": "5.3.1", "async": "3.2.4", "autoprefixer": "10.4.14", @@ -67,7 +67,7 @@ "file-loader": "6.2.0", "fs-extra": "11.1.1", "graceful-fs": "4.2.11", - "helmet": "6.1.5", + "helmet": "6.2.0", "html-to-text": "9.0.5", "ipaddr.js": "2.0.1", "jquery": "3.6.4", @@ -81,30 +81,30 @@ "less": "4.1.3", "lodash": "4.17.21", "logrotate-stream": "0.2.9", - "lru-cache": "9.0.3", + "lru-cache": "9.1.1", "material-design-lite": "1.3.0", "mime": "3.0.0", "mkdirp": "3.0.1", - "mongodb": "5.2.0", + "mongodb": "5.4.0", "morgan": "1.10.0", "mousetrap": "1.6.5", "multiparty": "4.2.3", "nconf": "0.12.0", "nodebb-plugin-2factor": "7.0.5", - "nodebb-plugin-composer-default": "10.0.48", - "nodebb-plugin-dbsearch": "6.0.0", - "nodebb-plugin-emoji": "5.0.6", + "nodebb-plugin-composer-default": "10.1.5", + "nodebb-plugin-dbsearch": "6.0.1", + "nodebb-plugin-emoji": "5.0.10", "nodebb-plugin-emoji-android": "4.0.0", - "nodebb-plugin-markdown": "12.0.2", - "nodebb-plugin-mentions": "4.1.0", + "nodebb-plugin-markdown": "12.0.3", + "nodebb-plugin-mentions": "4.1.1", "nodebb-plugin-ntfy": "1.0.15", - "nodebb-plugin-spam-be-gone": "2.0.6", + "nodebb-plugin-spam-be-gone": "2.0.7", "nodebb-rewards-essentials": "0.2.3", - "nodebb-theme-harmony": "1.0.1", + "nodebb-theme-harmony": "1.0.24", "nodebb-theme-lavender": "7.0.9", - "nodebb-theme-peace": "2.0.19", - "nodebb-theme-persona": "13.0.56", - "nodebb-widget-essentials": "7.0.9", + "nodebb-theme-peace": "2.0.22", + "nodebb-theme-persona": "13.0.65", + "nodebb-widget-essentials": "7.0.12", "nodemailer": "6.9.1", "nprogress": "0.2.0", "passport": "0.6.0", @@ -123,46 +123,46 @@ "rss": "1.2.2", "rtlcss": "4.1.0", "sanitize-html": "2.10.0", - "sass": "1.62.0", + "sass": "1.62.1", "semver": "7.5.0", "serve-favicon": "2.5.0", - "sharp": "0.32.0", + "sharp": "0.32.1", "sitemap": "7.1.1", "slideout": "1.0.1", "socket.io": "4.6.1", "socket.io-client": "4.6.1", - "@socket.io/redis-adapter": "8.1.0", + "@socket.io/redis-adapter": "8.2.0", "sortablejs": "1.15.0", "spdx-license-list": "6.6.0", "spider-detector": "2.0.0", - "terser-webpack-plugin": "5.3.7", + "terser-webpack-plugin": "5.3.8", "textcomplete": "0.18.2", "textcomplete.contenteditable": "0.1.1", "timeago": "1.6.7", "tinycon": "0.6.8", "toobusy-js": "0.5.1", "validator": "13.9.0", - "webpack": "5.79.0", + "webpack": "5.82.0", "webpack-merge": "5.8.0", "winston": "3.8.2", "xml": "1.0.1", "xregexp": "5.1.1", - "yargs": "17.7.1", + "yargs": "17.7.2", "zxcvbn": "4.4.2" }, "devDependencies": { "@apidevtools/swagger-parser": "10.1.0", - "@commitlint/cli": "17.5.1", - "@commitlint/config-angular": "17.4.4", + "@commitlint/cli": "17.6.3", + "@commitlint/config-angular": "17.6.3", "coveralls": "3.1.1", - "eslint": "8.39.0", + "eslint": "8.40.0", "eslint-config-nodebb": "0.2.1", "eslint-plugin-import": "2.27.5", "grunt": "1.6.1", "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", - "jsdom": "21.1.1", - "lint-staged": "13.2.1", + "jsdom": "22.0.0", + "lint-staged": "13.2.2", "mocha": "10.2.0", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", @@ -193,4 +193,4 @@ "url": "https://github.com/barisusakli" } ] -} \ No newline at end of file +} diff --git a/public/language/ar/admin/extend/widgets.json b/public/language/ar/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/ar/admin/extend/widgets.json +++ b/public/language/ar/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/ar/admin/settings/email.json b/public/language/ar/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/ar/admin/settings/email.json +++ b/public/language/ar/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/ar/error.json b/public/language/ar/error.json index 3856600b0b..38cd0a8b7c 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/ar/global.json b/public/language/ar/global.json index c8e13d0ef5..2eb1f69a8a 100644 --- a/public/language/ar/global.json +++ b/public/language/ar/global.json @@ -6,11 +6,11 @@ "403.message": "يبدو أنك قد تعثرت على صفحة لا تمتلك الصلاحية للدخول إليها", "403.login": "Perhaps you should try logging in?", "404.title": "لم يتم العثور", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "خطأ داخلي", "500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!", "400.title": "طلب سيئ", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "تسجيل", "login": "دخول", "please_log_in": "الرجاء تسجيل الدخول", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "تم سجيل الدخول بنجاح", "save_changes": "حفظ التغييرات", "save": "حفظ", + "cancel": "Cancel", "close": "أغلق", "pagination": "الصفحات", "pagination.out_of": "%1 من %2", @@ -60,6 +61,7 @@ "posts": "المشاركات", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "الأفضل", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "حُرِر", "disabled": "معطل", "select": "تحديد", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/ar/groups.json b/public/language/ar/groups.json index c16569c2fc..bf72cb5a57 100644 --- a/public/language/ar/groups.json +++ b/public/language/ar/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "المجموعات", "members": "Members", "view_group": "معاينة المجموعة", diff --git a/public/language/ar/modules.json b/public/language/ar/modules.json index 30f4741012..79049a59b5 100644 --- a/public/language/ar/modules.json +++ b/public/language/ar/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/ar/pages.json b/public/language/ar/pages.json index 90174cb6d9..9ef026bec3 100644 --- a/public/language/ar/pages.json +++ b/public/language/ar/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "تم التحقق من عنوان البريد الإلكتروني", - "maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/ar/tags.json b/public/language/ar/tags.json index ed9b42d0c0..635e3249f5 100644 --- a/public/language/ar/tags.json +++ b/public/language/ar/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "أدخل الكلمات الدلالية...", "no_tags": "لا يوجد كلمات دلالية بعد.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/ar/themes/harmony.json b/public/language/ar/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/ar/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/ar/themes/persona.json b/public/language/ar/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/ar/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/ar/topic.json b/public/language/ar/topic.json index ffddcd11b0..727bc49107 100644 --- a/public/language/ar/topic.json +++ b/public/language/ar/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "منقول", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "إنشاء فرع الموضوع", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "حذف الموضوع", "thread_tools.delete-posts": "مشاركات محذوفة", "thread_tools.delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الموضوع؟", diff --git a/public/language/ar/user.json b/public/language/ar/user.json index 17b7ea8b18..bf39948bc2 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/bg/admin/extend/widgets.json b/public/language/bg/admin/extend/widgets.json index 3e5e9667ec..aeee1b766c 100644 --- a/public/language/bg/admin/extend/widgets.json +++ b/public/language/bg/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Завлачете и пуснете контейнер или въведете HTML тук.", "show-to-groups": "Показване на групите", "hide-from-groups": "Скриване от групите", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Скриване на мобилни устройства" } \ No newline at end of file diff --git a/public/language/bg/admin/settings/email.json b/public/language/bg/admin/settings/email.json index ccf78aba43..3149061d11 100644 --- a/public/language/bg/admin/settings/email.json +++ b/public/language/bg/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. 0 за полунощ, 17 за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.
Приблизителното време на сървъра е:
Изпращането на следващия ежедневен бюлетин е планирано за ", "notifications.remove-images": "Премахване на изображенията от известията по е-поща", "require-email-address": "Новите потребители задължително трябва да предоставят е-поща", - "require-email-address-warning": "По подразбиране потребителите могат да не въвеждат адрес на е-поща, като оставят полето празно. Ако включите това, те задължително ще трябва да предоставят е-поща, за да могат да се регистрират. Това не означава, че потребителят ще въведе съществуваща е-поща, нито че тя ще е негова.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Изпращане на е-писма за потвърждение, когато бъде добавена или променена е-поща", "include-unverified-emails": "Изпращане на е-писма към получатели, които не са потвърдили изрично е-пощата си", "include-unverified-warning": "За потребителите, които имат свързана е-поща с регистрацията си, тя се смята за потвърдена. Но има ситуации, в които това не е така (например при ползване на регистрация от друга система, но и в други случаи), Включете тази настройка на собствен риск – изпращането на е-писма към непотвърдени адреси може да нарушава определени местни закони против нежеланата поща.", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 526fa4e1d4..21a242cec0 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -92,6 +92,7 @@ "already-posting": "В момента публикувате", "tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)", "tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)", "too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)", "cant-use-system-tag": "Не можете да използвате този системен етикет.", diff --git a/public/language/bg/global.json b/public/language/bg/global.json index e3fb074f00..cf7421f876 100644 --- a/public/language/bg/global.json +++ b/public/language/bg/global.json @@ -6,11 +6,11 @@ "403.message": "Изглежда сте посетили страница, до която нямате достъп.", "403.login": "Може би трябва да опитате да се впишете?", "404.title": "Не е намерена", - "404.message": "Изглежда сте се опитали да посетите страница, която не съществува. Върнете се към началната страница.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Вътрешна грешка.", "500.message": "Опа! Изглежда нещо се обърка!", "400.title": "Грешна заявка.", - "400.message": "Тази връзка изглежда повредена. Моля, проверете я и опитайте отново. В противен случай се върнете на началната страница.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Регистрация", "login": "Вписване", "please_log_in": "Моля, впишете се", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Вие влязохте успешно", "save_changes": "Запазване на промените", "save": "Запазване", + "cancel": "Cancel", "close": "Затваряне", "pagination": "Странициране", "pagination.out_of": "%1 от %2", @@ -60,6 +61,7 @@ "posts": "Публ.", "x-posts": "%1 публикации", "x-topics": "%1 теми", + "x-reputation": "%1 reputation", "best": "Най-добри", "controversial": "Противоречиви", "votes": "Гласове", @@ -130,7 +132,9 @@ "edited": "Редактирано", "disabled": "Изключено", "select": "Избиране", + "copied": "Copied", "user-search-prompt": "Започнете да пишете, за да потърсите потребител…", "hidden": "Скрито", - "sort": "Подреждане" + "sort": "Подреждане", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/bg/groups.json b/public/language/bg/groups.json index e9a44c421f..a0f1ef3d51 100644 --- a/public/language/bg/groups.json +++ b/public/language/bg/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Групи", "members": "Членове", "view_group": "Преглед на групата", diff --git a/public/language/bg/modules.json b/public/language/bg/modules.json index c94b62f4af..9b5640d517 100644 --- a/public/language/bg/modules.json +++ b/public/language/bg/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Дата", "composer.schedule-time": "Час", "composer.cancel-scheduling": "Отмяна на насрочването", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Задаване на дата", "composer.discard-all-drafts": "Изтриване на всички чернови", "composer.no-drafts": "Нямате никакви чернови", diff --git a/public/language/bg/pages.json b/public/language/bg/pages.json index 73147462d0..f32a67895a 100644 --- a/public/language/bg/pages.json +++ b/public/language/bg/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Качвания от %1", "account/sessions": "Сесии на вписване", "confirm": "Е-пощата е потвърдена", - "maintenance.text": "%1 в момента е в профилактика. Моля, върнете се по-късно.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "В допълнение, администраторът е оставил това съобщение:", "throttled.text": "%1 в момента е недостъпен, поради прекомерно натоварване. Моля, върнете се отново по-късно." } \ No newline at end of file diff --git a/public/language/bg/tags.json b/public/language/bg/tags.json index 51caa0b6f7..349e1436d1 100644 --- a/public/language/bg/tags.json +++ b/public/language/bg/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Тук въведете етикети, всеки между %1 и %2 знака.", "enter_tags_here_short": "Въведете етикети...", "no_tags": "Все още няма етикети.", - "select_tags": "Изберете етикети" + "select_tags": "Изберете етикети", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/bg/themes/harmony.json b/public/language/bg/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/bg/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/bg/themes/persona.json b/public/language/bg/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/bg/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/bg/topic.json b/public/language/bg/topic.json index 325d119139..16db258366 100644 --- a/public/language/bg/topic.json +++ b/public/language/bg/topic.json @@ -36,6 +36,7 @@ "scheduled": "Насрочена", "moved": "Преместена", "moved-from": "Преместена от %1", + "copy-code": "Копиране на кода", "copy-ip": "Копиране на IP адреса", "ban-ip": "Блокиране на IP адреса", "view-history": "История на редакциите", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Промяна на собственика", "thread_tools.select_category": "Избиране на категория", "thread_tools.fork": "Разделяне на темата", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Изтриване на темата", "thread_tools.delete-posts": "Изтриване на публикациите", "thread_tools.delete_confirm": "Наистина ли искате да изтриете тази тема?", diff --git a/public/language/bg/user.json b/public/language/bg/user.json index a5330617e3..ad54c4fdcc 100644 --- a/public/language/bg/user.json +++ b/public/language/bg/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Това поле не е задължително. Не сте длъжен/на да предоставяте адрес на е-поща, но без проверена е-поща, няма да можете да възстановите акаунта си в случай на проблем, нито ще можете да се вписвате с е-пощата си.", "emailUpdate.required": "Това поле е задължително.", "emailUpdate.change-instructions": "Ще Ви изпратим е-писмо за потвърждение на посочената е-поща, което ще съдържа уникална връзка. Щом последвате тази връзка, притежанието Ви на тази е-поща ще бъде потвърдено и тя ще бъде свързана с акаунта Ви. Ще можете да промените тази е-поща по всяко време, от страницата на акаунта си.", - "emailUpdate.password-challenge": "Въведете паролата си, за да потвърдите, че акаунтът е Ваш." + "emailUpdate.password-challenge": "Въведете паролата си, за да потвърдите, че акаунтът е Ваш.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/bn/admin/extend/widgets.json b/public/language/bn/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/bn/admin/extend/widgets.json +++ b/public/language/bn/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/bn/admin/settings/email.json b/public/language/bn/admin/settings/email.json index cacfb095b9..a973cde4bf 100644 --- a/public/language/bn/admin/settings/email.json +++ b/public/language/bn/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/bn/error.json b/public/language/bn/error.json index c79898df70..e0624cc446 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/bn/global.json b/public/language/bn/global.json index 17d6ea3423..fcc3985623 100644 --- a/public/language/bn/global.json +++ b/public/language/bn/global.json @@ -6,11 +6,11 @@ "403.message": "আপনি এমন জায়গাতে যেতে চাচ্ছেন যেখানে আপনার প্রবেশাধিকার নেই।", "403.login": "Perhaps you should try logging in?", "404.title": "পাওয়া যায়নি", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "ওহো! কিছু ভুল হয়েছে মনে হচ্ছে!", "400.title": "ভুল ঠিকানা", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "নিবন্ধন", "login": "প্রবেশ", "please_log_in": "অনুগ্রহ করে প্রবেশ করুন", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "আপনি সফলভাবে প্রবেশ করেছেন", "save_changes": "পরিবর্তনগুলি সঞ্চয় করুন", "save": "Save", + "cancel": "Cancel", "close": "বন্ধ", "pagination": "পাতা নং", "pagination.out_of": "%2 এর মাঝে %1", @@ -60,6 +61,7 @@ "posts": "পোস্টগুলি", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/bn/groups.json b/public/language/bn/groups.json index 3a566346b7..89c21c1762 100644 --- a/public/language/bn/groups.json +++ b/public/language/bn/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "গ্রুপসমূহ", "members": "Members", "view_group": "গ্রুপ দেখুন", diff --git a/public/language/bn/modules.json b/public/language/bn/modules.json index e8243e5156..ec7daca716 100644 --- a/public/language/bn/modules.json +++ b/public/language/bn/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/bn/pages.json b/public/language/bn/pages.json index f6f981fd76..744312ddce 100644 --- a/public/language/bn/pages.json +++ b/public/language/bn/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/bn/tags.json b/public/language/bn/tags.json index d8bf39ce14..af42dd9385 100644 --- a/public/language/bn/tags.json +++ b/public/language/bn/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "ট্যাগ বসান", "no_tags": "এখন পর্যন্ত কোন ট্যাগ নেই", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/bn/themes/harmony.json b/public/language/bn/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/bn/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/bn/themes/persona.json b/public/language/bn/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/bn/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/bn/topic.json b/public/language/bn/topic.json index 6d1767fc2e..4f1a9c39ce 100644 --- a/public/language/bn/topic.json +++ b/public/language/bn/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "টপিক ফর্ক করুন", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "টপিক মুছে ফেলুন", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "আপনি নিশ্চিত যে আপনি এই টপিকটি মুছে ফেলতে চান?", diff --git a/public/language/bn/user.json b/public/language/bn/user.json index df37d13fff..7529a51029 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/cs/admin/extend/widgets.json b/public/language/cs/admin/extend/widgets.json index 69d5be5a73..9fcc0a83cf 100644 --- a/public/language/cs/admin/extend/widgets.json +++ b/public/language/cs/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Přesuňte sem kontejner nebo zadejte HTML", "show-to-groups": "Zobrazit ve skupinách", "hide-from-groups": "Skrýt ve skupinách", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Skrýt na mobilu" } \ No newline at end of file diff --git a/public/language/cs/admin/settings/email.json b/public/language/cs/admin/settings/email.json index fadb159ee1..8d816213b2 100644 --- a/public/language/cs/admin/settings/email.json +++ b/public/language/cs/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 0bc850e901..cd5b45fd4c 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Zadejte delší značku. Značky by měli mít alespoň %1 znaků", "tag-too-long": "Zadejte kratší značku. Značky nesmí být delší než %1 znaků", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Málo značek. Téma musí obsahovat alespoň %1 značek", "too-many-tags": "Příliš mnoho značek. Téma nesmí mít více než %1 značek", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/cs/global.json b/public/language/cs/global.json index 17c97bef2c..497ec6a8d9 100644 --- a/public/language/cs/global.json +++ b/public/language/cs/global.json @@ -6,11 +6,11 @@ "403.message": "Zdá se, že jste narazil/a na stránky na které nemáte přístup.", "403.login": "Perhaps you should try logging in?", "404.title": "Stránka nenalezena", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Interní chyba", "500.message": "Jejda, vypadá to, že se něco pokazilo.", "400.title": "Špatný požadavek.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrovat", "login": "Přihlásit se", "please_log_in": "Přihlašte se, prosím", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Vaše přihlášení proběhlo úspěšně", "save_changes": "Uložit změny", "save": "Uložit", + "cancel": "Cancel", "close": "Zrušit", "pagination": "Stránkování", "pagination.out_of": "%1 z %2", @@ -60,6 +61,7 @@ "posts": "Příspěvky", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Nejlepší", "controversial": "Kontroverzní", "votes": "Počet hlasů", @@ -130,7 +132,9 @@ "edited": "Upraveno", "disabled": "Nepovoleno", "select": "Vyberte", + "copied": "Copied", "user-search-prompt": "Pro hledání uživatelů, zde pište...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/cs/groups.json b/public/language/cs/groups.json index 74db551ff1..4e5be081cf 100644 --- a/public/language/cs/groups.json +++ b/public/language/cs/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Skupiny", "members": "Members", "view_group": "Zobrazit skupinu", diff --git a/public/language/cs/modules.json b/public/language/cs/modules.json index 848c65c4a6..d6ff70be6d 100644 --- a/public/language/cs/modules.json +++ b/public/language/cs/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/cs/pages.json b/public/language/cs/pages.json index 207babc277..d33088bf00 100644 --- a/public/language/cs/pages.json +++ b/public/language/cs/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Nahráno od %1", "account/sessions": "Relace s přihlášením", "confirm": "E-mail potvrzen", - "maintenance.text": "%1 momentálně prochází údržbou. Vraťte se později.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Správce zanechal tuto zprávu:", "throttled.text": "%1 je v současnou chvíli nedostupný pro velkou zátěž. Zkuste to později." } \ No newline at end of file diff --git a/public/language/cs/tags.json b/public/language/cs/tags.json index 2633161f8f..756a1a1be4 100644 --- a/public/language/cs/tags.json +++ b/public/language/cs/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Zde vložte označení, každé o délce %1 až %2 znaků.", "enter_tags_here_short": "Zadejte označení…", "no_tags": "Zatím tu není žádné označení.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/cs/themes/harmony.json b/public/language/cs/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/cs/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/cs/themes/persona.json b/public/language/cs/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/cs/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json index dcfb25431a..32c0849d9f 100644 --- a/public/language/cs/topic.json +++ b/public/language/cs/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Přesunuto", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopírovat IP", "ban-ip": "Zakázat IP", "view-history": "Upravit historii", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Změnit vlastníka", "thread_tools.select_category": "Vybrat kategorii", "thread_tools.fork": "Větvit téma", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Odstranit téma", "thread_tools.delete-posts": "Odstranit přispěvky", "thread_tools.delete_confirm": "Jste si jist/a, že chcete toto téma smazat.", diff --git a/public/language/cs/user.json b/public/language/cs/user.json index 9023bf8e7e..81d5c30fb3 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "Potvrzovací email s unikátním odkazem bude odeslán na poskytnutou emailovou adresu. Rozkliknutím tohoto odkazu potvrdíte vlastnictví emailové adresy a ta se stane aktivní na Vašem účtě. Kdykoliv můžete emailovou adresu změnit z vašeho profilu.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/da/admin/extend/widgets.json b/public/language/da/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/da/admin/extend/widgets.json +++ b/public/language/da/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/da/admin/settings/email.json b/public/language/da/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/da/admin/settings/email.json +++ b/public/language/da/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/da/error.json b/public/language/da/error.json index 85983de47a..754aea4013 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Indtast et længere tag. Tags skal indeholde mindst %1 karakter(er).", "tag-too-long": "Indtast et længere tag. Tags kan ikke være længere end %1 karakter(er).", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Ikke nok tags. Tråde skal have mindst %1 tag(s)", "too-many-tags": "For mange tags. Tråde kan ikke have mere end %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/da/global.json b/public/language/da/global.json index 2d54e5512d..b3b5b81c72 100644 --- a/public/language/da/global.json +++ b/public/language/da/global.json @@ -6,11 +6,11 @@ "403.message": "Det ser ud til du er stødt på en side du ikke har adgang til.", "403.login": "Perhaps you should try logging in?", "404.title": "Ikke fundet", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Ups! Ser ud til at noget gik galt!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Tilmeld", "login": "Log ind", "please_log_in": "Venligst log ind", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Du er nu logget ind", "save_changes": "Gem ændringer", "save": "Save", + "cancel": "Cancel", "close": "Luk", "pagination": "Sidetal", "pagination.out_of": "%1 ud af %2", @@ -60,6 +61,7 @@ "posts": "Indlæg", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Bedste", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/da/groups.json b/public/language/da/groups.json index 0ea88c3e45..5e9d0d6bc8 100644 --- a/public/language/da/groups.json +++ b/public/language/da/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "grupper", "members": "Members", "view_group": "se gruppe", diff --git a/public/language/da/modules.json b/public/language/da/modules.json index 7336fa8a1a..fef29dd369 100644 --- a/public/language/da/modules.json +++ b/public/language/da/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/da/pages.json b/public/language/da/pages.json index 97098e5989..bd0de7a853 100644 --- a/public/language/da/pages.json +++ b/public/language/da/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Bekræftet", - "maintenance.text": "%1 er under vedligeholdelse. Kom venligst tilbage senere.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Administratoren har yderligere vedlagt denne besked:", "throttled.text": "%1 er ikke tilgængelig på grund af overbelastning. Venligst kom tilbage senere." } \ No newline at end of file diff --git a/public/language/da/tags.json b/public/language/da/tags.json index f8721eb5e9..b72f18ad8c 100644 --- a/public/language/da/tags.json +++ b/public/language/da/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Indsæt tags her, hver på mellem %1 og %2 karakterer.", "enter_tags_here_short": "Skriv tags", "no_tags": "Der er ingen tags endnu.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/da/themes/harmony.json b/public/language/da/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/da/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/da/themes/persona.json b/public/language/da/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/da/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/da/topic.json b/public/language/da/topic.json index 425f042f14..45cca5b8d0 100644 --- a/public/language/da/topic.json +++ b/public/language/da/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Flyttet", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Fraskil tråd", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Slet tråd", "thread_tools.delete-posts": "Slet Indlæg", "thread_tools.delete_confirm": "Er du sikker på at du vil slette dette emne?", diff --git a/public/language/da/user.json b/public/language/da/user.json index 3bdc20da6f..ae7827778b 100644 --- a/public/language/da/user.json +++ b/public/language/da/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/de/admin/extend/widgets.json b/public/language/de/admin/extend/widgets.json index 4bcbc0b094..5fa9e5fe7b 100644 --- a/public/language/de/admin/extend/widgets.json +++ b/public/language/de/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Ziehe einen Container per Drag-and-Drop oder gebe hier HTML ein.", "show-to-groups": "Gruppen anzeigen", "hide-from-groups": "Vor Gruppen verstecken", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Auf dem Handy verstecken" } \ No newline at end of file diff --git a/public/language/de/admin/settings/email.json b/public/language/de/admin/settings/email.json index db1e0d1de4..9c6e6c9bb0 100644 --- a/public/language/de/admin/settings/email.json +++ b/public/language/de/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Bilder aus E-Mail-Benachrichtigungen entfernen", "require-email-address": "Neue Benutzer auffordern, eine E-Mail-Adresse anzugeben", - "require-email-address-warning": "Standardmäßig können Benutzer die Eingabe einer E-Mail-Adresse ablehnen, indem sie das Feld leer lassen. Wenn Du diese Option aktivierst, musst Du eine E-Mail-Adresse eingeben, um mit der Registrierung fortzufahren.Es stellt nicht sicher, dass der Benutzer eine echte E-Mail-Adresse eingibt, noch nicht einmal eine Adresse, die ihm gehört.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Validierungs-E-Mails senden, wenn eine E-Mail hinzugefügt oder geändert wird", "include-unverified-emails": "E-Mails an Empfänger senden, die ihre E-Mails nicht explizit bestätigt haben", "include-unverified-warning": "Standardmäßig wurden Benutzer mit E-Mail-Adressen, die mit ihrem Konto verknüpft sind, bereits verifiziert, aber es existieren Situationen, in denen dies nicht der Fall ist (z. B. SSO-Anmeldungen, Großvater-Benutzer usw.). Aktiviere diese Einstellung auf eigenes Risiko – Das Senden von E-Mails an nicht verifizierte Adressen kann einen Verstoß gegen regionale Anti-Spam-Gesetze darstellen.", diff --git a/public/language/de/error.json b/public/language/de/error.json index 74a38ba1b9..7c01d08052 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Bitte gebe ein längeres Schlagwort ein. Schlagworte sollten mindestens %1 Zeichen enthalten.", "tag-too-long": "Bitte gebe ein kürzeres Schlagwort ein. Schlagworte können nicht länger als %1 Zeichen sein.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Nicht genügend Schlagworte. Themen müssen mindestens %1 Schlagwort(e) enthalten", "too-many-tags": "Zu viele Schlagworte. Themen dürfen nicht mehr als %1 Schlagwort(e) enthalten", "cant-use-system-tag": "Sie können dieses System-Tag nicht verwenden.", diff --git a/public/language/de/global.json b/public/language/de/global.json index 493bc5cdcd..85a6c060ff 100644 --- a/public/language/de/global.json +++ b/public/language/de/global.json @@ -6,11 +6,11 @@ "403.message": "Du hast keine Zugriffsberechtigung für diese Seite.", "403.login": "Perhaps you should try logging in?", "404.title": " Nicht Gefunden", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Interner Fehler.", "500.message": "Ups! Scheint als wäre etwas schief gelaufen!", "400.title": "Ungültige Anforderung", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrieren", "login": "Anmelden", "please_log_in": "Bitte anmelden", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Du hast dich erfolgreich angemeldet", "save_changes": "Änderungen speichern", "save": "Speichern", + "cancel": "Cancel", "close": "Schließen", "pagination": "Seitennummerierung", "pagination.out_of": "%1 von %2", @@ -60,6 +61,7 @@ "posts": "Beiträge", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Bestbewertet", "controversial": "Umstritten", "votes": "Stimmen", @@ -130,7 +132,9 @@ "edited": "Bearbeitet", "disabled": "Deaktiviert", "select": "Auswählen", + "copied": "Copied", "user-search-prompt": "Gib hier etwas ein um Benutzer zu finden...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/de/groups.json b/public/language/de/groups.json index 75b7cf487f..5c192ff8ac 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Gruppen", "members": "Members", "view_group": "Gruppe zeigen", diff --git a/public/language/de/modules.json b/public/language/de/modules.json index d141ec1dd2..9ee3c23608 100644 --- a/public/language/de/modules.json +++ b/public/language/de/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Datum", "composer.schedule-time": "Zeit", "composer.cancel-scheduling": "Planung abbrechen", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Datum einstellen", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/de/pages.json b/public/language/de/pages.json index 0ed2786f38..e49f87a4aa 100644 --- a/public/language/de/pages.json +++ b/public/language/de/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads von %1", "account/sessions": "Login-Sitzungen", "confirm": "E-Mail bestätigt", - "maintenance.text": "%1 befindet sich derzeit in der Wartung. Bitte komm später wieder.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Zusätzlich hat der Administrator diese Nachricht hinterlassen:", "throttled.text": "%1 ist momentan aufgrund von Überlastung nicht verfügbar. Bitte komm später wieder." } \ No newline at end of file diff --git a/public/language/de/tags.json b/public/language/de/tags.json index 7a2e8a43c8..d7b9423646 100644 --- a/public/language/de/tags.json +++ b/public/language/de/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Hier Schlagworte eingeben. Jeweils %1 bis %2 Zeichen.", "enter_tags_here_short": "Schlagworte eingeben...", "no_tags": "Es gibt noch keine Schlagworte.", - "select_tags": "Schlagworte auswählen" + "select_tags": "Schlagworte auswählen", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/de/themes/harmony.json b/public/language/de/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/de/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/de/themes/persona.json b/public/language/de/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/de/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/de/topic.json b/public/language/de/topic.json index f56f2c66bd..656c2f8e6c 100644 --- a/public/language/de/topic.json +++ b/public/language/de/topic.json @@ -36,6 +36,7 @@ "scheduled": "Geplant", "moved": "Verschoben", "moved-from": "Verschoben von %1", + "copy-code": "Copy Code", "copy-ip": "IP-Adresse Kopieren", "ban-ip": "IP-Adresse bannen", "view-history": "Verlauf bearbeiten", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Besitzer ändern", "thread_tools.select_category": "Kategorie auswählen", "thread_tools.fork": "Thema aufspalten", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Thema löschen", "thread_tools.delete-posts": "Beiträge entfernen", "thread_tools.delete_confirm": "Bist du sicher, dass du dieses Thema löschen möchtest?", diff --git a/public/language/de/user.json b/public/language/de/user.json index eec5b5f916..bbe001a6f6 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Dieses Feld ist optional. Du bist nicht verpflichtet, deine E-Mail-Adresse anzugeben, doch ohne eine validierte E-Mail-Adresse kannst du dein Konto nicht wiederherstellen oder dich mit deiner E-Mail-Adresse anmelden.", "emailUpdate.required": "Dieses Feld ist erforderlich.", "emailUpdate.change-instructions": "An die eingegebene E-Mail-Adresse wird eine Bestätigungs-E-Mail mit einem eindeutigen Link gesendet. Durch den Zugriff auf diesen Link wird dein Eigentum an der E-Mail-Adresse bestätigt und diese wird in deinem Konto aktiv. Du kannst deine E-Mail-Adresse jederzeit auf deiner Kontoseite aktualisieren.", - "emailUpdate.password-challenge": "Bitte gib dein Passwort ein, um dein Konto zu verifizieren." + "emailUpdate.password-challenge": "Bitte gib dein Passwort ein, um dein Konto zu verifizieren.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/el/admin/extend/widgets.json b/public/language/el/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/el/admin/extend/widgets.json +++ b/public/language/el/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/el/admin/settings/email.json b/public/language/el/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/el/admin/settings/email.json +++ b/public/language/el/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/el/error.json b/public/language/el/error.json index 9c13bc5291..266edbd814 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/el/global.json b/public/language/el/global.json index a030d136a0..5c479578d8 100644 --- a/public/language/el/global.json +++ b/public/language/el/global.json @@ -6,11 +6,11 @@ "403.message": "Φαίνεται πως βρέθηκες σε κάποια σελίδα στην οποία δεν έχεις πρόσβαση.", "403.login": "Perhaps you should try logging in?", "404.title": "Δεν βρέθηκε", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Εσωτερικό Σφάλμα.", "500.message": "Ουπς! Φαίνεται πως κάτι πήγε στραβά!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Εγγραφή", "login": "Σύνδεση", "please_log_in": "Παρακαλώ Συνδέσου", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Συνδέθηκες με επιτυχία", "save_changes": "Αποθήκευση Αλλαγών", "save": "Αποθήκευση", + "cancel": "Cancel", "close": "Κλείσιμο", "pagination": "Σελιδοποίηση", "pagination.out_of": "%1 από %2", @@ -60,6 +61,7 @@ "posts": "Δημοσιεύσεις", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/el/groups.json b/public/language/el/groups.json index e374554715..7542b5a303 100644 --- a/public/language/el/groups.json +++ b/public/language/el/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Ομάδες", "members": "Members", "view_group": "Προβολή Ομάδας", diff --git a/public/language/el/modules.json b/public/language/el/modules.json index c66ec7ed21..85e2568287 100644 --- a/public/language/el/modules.json +++ b/public/language/el/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/el/pages.json b/public/language/el/pages.json index b1c4ae9de4..441e9272ec 100644 --- a/public/language/el/pages.json +++ b/public/language/el/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "Το %1 αυτή την στιγμή συντηρείται. Παρακαλώ έλα αργότερα.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/el/tags.json b/public/language/el/tags.json index 36f908f894..70140a814d 100644 --- a/public/language/el/tags.json +++ b/public/language/el/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Εισαγωγή ετικετών...", "no_tags": "Δεν υπάρχουν ακόμα ετικέτες.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/el/themes/harmony.json b/public/language/el/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/el/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/el/themes/persona.json b/public/language/el/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/el/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/el/topic.json b/public/language/el/topic.json index 9a63f18f8a..5b415a6019 100644 --- a/public/language/el/topic.json +++ b/public/language/el/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Διαχωρισμός Θέματος", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Διαγραφή Θέματος", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Είσαι σίγουρος/η πως θέλεις να διαγράψεις αυτό το θέμα;", diff --git a/public/language/el/user.json b/public/language/el/user.json index dfee994ad3..5ca5c72819 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/en-GB/admin/extend/widgets.json b/public/language/en-GB/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/en-GB/admin/extend/widgets.json +++ b/public/language/en-GB/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ 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 index 35e713adc0..a3f49a0416 100644 --- a/public/language/en-GB/admin/settings/email.json +++ b/public/language/en-GB/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/en-GB/error.json b/public/language/en-GB/error.json index eb7dfd4b33..fa9fa6e319 100644 --- a/public/language/en-GB/error.json +++ b/public/language/en-GB/error.json @@ -105,6 +105,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/en-GB/global.json b/public/language/en-GB/global.json index aa448cc4e3..09a90dea4c 100644 --- a/public/language/en-GB/global.json +++ b/public/language/en-GB/global.json @@ -6,11 +6,11 @@ "403.message": "You seem to have stumbled upon a page that you do not have access to.", "403.login": "Perhaps you should try logging in?", "404.title": "Not Found", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Oops! Looks like something went wrong!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Register", "login": "Login", @@ -24,6 +24,7 @@ "save_changes": "Save Changes", "save": "Save", + "cancel": "Cancel", "close": "Close", "pagination": "Pagination", @@ -74,6 +75,7 @@ "posts": "Posts", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -158,8 +160,10 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } diff --git a/public/language/en-GB/groups.json b/public/language/en-GB/groups.json index 0ae14255f5..09b105abda 100644 --- a/public/language/en-GB/groups.json +++ b/public/language/en-GB/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Groups", "members": "Members", "view_group": "View Group", diff --git a/public/language/en-GB/modules.json b/public/language/en-GB/modules.json index 0ed339723a..3bb92ebe57 100644 --- a/public/language/en-GB/modules.json +++ b/public/language/en-GB/modules.json @@ -71,6 +71,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/en-GB/pages.json b/public/language/en-GB/pages.json index 060156a76b..3f1863fd32 100644 --- a/public/language/en-GB/pages.json +++ b/public/language/en-GB/pages.json @@ -68,7 +68,7 @@ "confirm": "Email Confirmed", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." diff --git a/public/language/en-GB/tags.json b/public/language/en-GB/tags.json index f126a70e6b..7159d4f542 100644 --- a/public/language/en-GB/tags.json +++ b/public/language/en-GB/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/en-GB/themes/harmony.json b/public/language/en-GB/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/en-GB/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/en-GB/themes/persona.json b/public/language/en-GB/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/en-GB/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/en-GB/topic.json b/public/language/en-GB/topic.json index a3191cfdfd..7cda91c8a3 100644 --- a/public/language/en-GB/topic.json +++ b/public/language/en-GB/topic.json @@ -39,6 +39,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -114,6 +115,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Fork Topic", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Delete Topic", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", diff --git a/public/language/en-GB/user.json b/public/language/en-GB/user.json index 31df96fb8c..6fd7f11675 100644 --- a/public/language/en-GB/user.json +++ b/public/language/en-GB/user.json @@ -223,5 +223,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } diff --git a/public/language/en-US/admin/extend/widgets.json b/public/language/en-US/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/en-US/admin/extend/widgets.json +++ b/public/language/en-US/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/en-US/admin/settings/email.json b/public/language/en-US/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/en-US/admin/settings/email.json +++ b/public/language/en-US/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index 268aa0a786..8184b0b80a 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/en-US/global.json b/public/language/en-US/global.json index 629311b495..3fd311d535 100644 --- a/public/language/en-US/global.json +++ b/public/language/en-US/global.json @@ -6,11 +6,11 @@ "403.message": "You seem to have stumbled upon a page that you do not have access to.", "403.login": "Perhaps you should try logging in?", "404.title": "Not Found", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Oops! Looks like something went wrong!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Register", "login": "Login", "please_log_in": "Please Log In", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "You have successfully logged in", "save_changes": "Save Changes", "save": "Save", + "cancel": "Cancel", "close": "Close", "pagination": "Pagination", "pagination.out_of": "%1 out of %2", @@ -60,6 +61,7 @@ "posts": "Posts", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/en-US/groups.json b/public/language/en-US/groups.json index f6160d20c9..94902e965d 100644 --- a/public/language/en-US/groups.json +++ b/public/language/en-US/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Groups", "members": "Members", "view_group": "View Group", diff --git a/public/language/en-US/modules.json b/public/language/en-US/modules.json index c66ec7ed21..85e2568287 100644 --- a/public/language/en-US/modules.json +++ b/public/language/en-US/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/en-US/pages.json b/public/language/en-US/pages.json index 03da2d7610..6a73d4b365 100644 --- a/public/language/en-US/pages.json +++ b/public/language/en-US/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/en-US/tags.json b/public/language/en-US/tags.json index 4aace7f79f..9412cca1b4 100644 --- a/public/language/en-US/tags.json +++ b/public/language/en-US/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/en-US/themes/harmony.json b/public/language/en-US/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/en-US/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/en-US/themes/persona.json b/public/language/en-US/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/en-US/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/en-US/topic.json b/public/language/en-US/topic.json index 92455af015..ed3d7cc11c 100644 --- a/public/language/en-US/topic.json +++ b/public/language/en-US/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Fork Topic", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Delete Topic", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", diff --git a/public/language/en-US/user.json b/public/language/en-US/user.json index ac50881e42..2c25b61497 100644 --- a/public/language/en-US/user.json +++ b/public/language/en-US/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/en-x-pirate/admin/extend/widgets.json b/public/language/en-x-pirate/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/en-x-pirate/admin/extend/widgets.json +++ b/public/language/en-x-pirate/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/en-x-pirate/admin/settings/email.json b/public/language/en-x-pirate/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/en-x-pirate/admin/settings/email.json +++ b/public/language/en-x-pirate/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json index 268aa0a786..8184b0b80a 100644 --- a/public/language/en-x-pirate/error.json +++ b/public/language/en-x-pirate/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/en-x-pirate/global.json b/public/language/en-x-pirate/global.json index cd31d32e95..cd748f88a1 100644 --- a/public/language/en-x-pirate/global.json +++ b/public/language/en-x-pirate/global.json @@ -6,11 +6,11 @@ "403.message": "You seem to have stumbled upon a page that you do not have access to.", "403.login": "Perhaps you should try logging in?", "404.title": "T'ere be nut'in 'ere", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Looks like we've got somethin' in th' sails.", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Register", "login": "Login", "please_log_in": "Please Log In", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Ye have successfully logged in", "save_changes": "Save yer Changes", "save": "Save", + "cancel": "Cancel", "close": "Shoot down", "pagination": "Pagination", "pagination.out_of": "%1 out of %2", @@ -60,6 +61,7 @@ "posts": "Messages", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/en-x-pirate/groups.json b/public/language/en-x-pirate/groups.json index f6160d20c9..94902e965d 100644 --- a/public/language/en-x-pirate/groups.json +++ b/public/language/en-x-pirate/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Groups", "members": "Members", "view_group": "View Group", diff --git a/public/language/en-x-pirate/modules.json b/public/language/en-x-pirate/modules.json index f95b54c21e..ff4a4a94ef 100644 --- a/public/language/en-x-pirate/modules.json +++ b/public/language/en-x-pirate/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/en-x-pirate/pages.json b/public/language/en-x-pirate/pages.json index 03da2d7610..6a73d4b365 100644 --- a/public/language/en-x-pirate/pages.json +++ b/public/language/en-x-pirate/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/en-x-pirate/tags.json b/public/language/en-x-pirate/tags.json index 4aace7f79f..9412cca1b4 100644 --- a/public/language/en-x-pirate/tags.json +++ b/public/language/en-x-pirate/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/en-x-pirate/themes/harmony.json b/public/language/en-x-pirate/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/en-x-pirate/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/en-x-pirate/themes/persona.json b/public/language/en-x-pirate/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/en-x-pirate/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/en-x-pirate/topic.json b/public/language/en-x-pirate/topic.json index 92455af015..ed3d7cc11c 100644 --- a/public/language/en-x-pirate/topic.json +++ b/public/language/en-x-pirate/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Fork Topic", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Delete Topic", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", diff --git a/public/language/en-x-pirate/user.json b/public/language/en-x-pirate/user.json index 611a06becd..0eaa8f3171 100644 --- a/public/language/en-x-pirate/user.json +++ b/public/language/en-x-pirate/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/es/admin/extend/widgets.json b/public/language/es/admin/extend/widgets.json index 3dd06fbcef..88b823a724 100644 --- a/public/language/es/admin/extend/widgets.json +++ b/public/language/es/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Ocultar en móviles" } \ No newline at end of file diff --git a/public/language/es/admin/settings/email.json b/public/language/es/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/es/admin/settings/email.json +++ b/public/language/es/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/es/error.json b/public/language/es/error.json index cd58d4ea65..ae4e9ff46e 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Por favor introduce una etiqueta más larga. Las etiquetas deben contener por lo menos %1 caractere(s)", "tag-too-long": "Por favor introduce una etiqueta más corta. Las etiquetas no pueden exceder los %1 caractere(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Etiquetas insuficientes. El tema debe tener al menos %1 etiqueta(s).", "too-many-tags": "Demasiadas etiquetas. El tema no puede tener mas de %1 etiqueta(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/es/global.json b/public/language/es/global.json index b4589b7558..30b52fbbd5 100644 --- a/public/language/es/global.json +++ b/public/language/es/global.json @@ -6,11 +6,11 @@ "403.message": "Al parecer has llegado a una página a la cual no tienes permisos para acceder.", "403.login": "Perhaps you should try logging in?", "404.title": "No encontrado", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Error interno.", "500.message": "¡Ooops! ¡Parece que algo salió mal! No te preocupes, ¡nuestros simios hiperinteligentes lo solucionarán!", "400.title": "Petición incorrecta.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrarse", "login": "Conectarse", "please_log_in": "Por favor, identifíquese.", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Identificado satisfactoriamente", "save_changes": "Guardar cambios", "save": "Guardar", + "cancel": "Cancel", "close": "Cerrar", "pagination": "Paginación", "pagination.out_of": "%1 de %2", @@ -60,6 +61,7 @@ "posts": "Mensajes", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Mejor valorados", "controversial": "Controversial", "votes": "Votos", @@ -130,7 +132,9 @@ "edited": "Editado", "disabled": "Desahabilitado", "select": "Seleccionar", + "copied": "Copied", "user-search-prompt": "Escriba algo aquí para encontrar usuarios...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/es/groups.json b/public/language/es/groups.json index 941c448732..75a2d878f6 100644 --- a/public/language/es/groups.json +++ b/public/language/es/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupos", "members": "Members", "view_group": "Ver Grupo", diff --git a/public/language/es/modules.json b/public/language/es/modules.json index 23f4d5c73d..0f021e46d4 100644 --- a/public/language/es/modules.json +++ b/public/language/es/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/es/pages.json b/public/language/es/pages.json index b20394a9c4..c17edf04cd 100644 --- a/public/language/es/pages.json +++ b/public/language/es/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Subidas por %1", "account/sessions": "Login Sessions", "confirm": "Correo electrónico confirmado", - "maintenance.text": "%1 está en mantenimiento actualmente. Por favor vuelva en otro momento.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Además, la administración ha dejado este mensaje:", "throttled.text": "%1 no está disponible debido a una carga excesiva. Por favor vuelva en otro momento" } \ No newline at end of file diff --git a/public/language/es/tags.json b/public/language/es/tags.json index 7248696672..bc28f0381a 100644 --- a/public/language/es/tags.json +++ b/public/language/es/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Introduce aquí las etiquetas, entre %1 y %2 caracteres cada una.", "enter_tags_here_short": "Introduzca las etiquetas...", "no_tags": "Aún no hay etiquetas.", - "select_tags": "Seleccionar Etiquetas" + "select_tags": "Seleccionar Etiquetas", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/es/themes/harmony.json b/public/language/es/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/es/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/es/themes/persona.json b/public/language/es/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/es/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/es/topic.json b/public/language/es/topic.json index fa39e28d40..6ebe559ec9 100644 --- a/public/language/es/topic.json +++ b/public/language/es/topic.json @@ -20,8 +20,8 @@ "login-to-view": "🔒 Inicie sesión para ver", "edit": "Editar", "delete": "Borrar", - "delete-event": "Delete Event", - "delete-event-confirm": "Are you sure you want to delete this event?", + "delete-event": "Borrar Evento", + "delete-event-confirm": "¿Estás seguro que deseas eliminar este evento?", "purge": "Purgar", "restore": "Restaurar", "move": "Mover", @@ -32,17 +32,18 @@ "tools": "Herramientas", "locked": "Cerrado", "pinned": "Fijo", - "pinned-with-expiry": "Pinned until %1", + "pinned-with-expiry": "Anclado hasta %1", "scheduled": "Programado", "moved": "Movido", - "moved-from": "Moved from %1", + "moved-from": "Movido desde %1", + "copy-code": "Copiar Codigo", "copy-ip": "Copiar IP", "ban-ip": "Banear IP", "view-history": "Editar Historial", - "wrote-ago": "wrote ", - "wrote-on": "wrote on ", - "replied-to-user-ago": "replied to %3 ", - "replied-to-user-on": "replied to %3 on ", + "wrote-ago": "escribió ", + "wrote-on": "escribió en ", + "replied-to-user-ago": "respondió a %3 ", + "replied-to-user-on": "respondió a %3 en ", "user-locked-topic-ago": "%1 locked this topic %2", "user-locked-topic-on": "%1 locked this topic on %2", "user-unlocked-topic-ago": "%1 unlocked this topic %2", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Cambiar propietario", "thread_tools.select_category": "Seleccionar categoría", "thread_tools.fork": "Dividir tema", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Borrar tema", "thread_tools.delete-posts": "Eliminar mensajes", "thread_tools.delete_confirm": "¿Estás seguro que deseas eliminar este tema?", diff --git a/public/language/es/user.json b/public/language/es/user.json index 2842d0b51a..615c42c7bb 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "Este campo es requerido.", "emailUpdate.change-instructions": "Un email de confirmación será enviado a la cuenta de email ingresada con un enlace único. Al acceder a este enlace confirmarás que eres propietario de la dirección de email y será activado en tu cuenta. En cualquier momento, puedes actualizar el email registrado desde la página de tu cuenta.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/et/admin/extend/widgets.json b/public/language/et/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/et/admin/extend/widgets.json +++ b/public/language/et/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/et/admin/settings/email.json b/public/language/et/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/et/admin/settings/email.json +++ b/public/language/et/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/et/error.json b/public/language/et/error.json index 9776936299..8820d54b23 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Palun sisestage pikem märksõna. Märksõna pikkus peab olema vähemalt %1 tähemärk(i).", "tag-too-long": "Palun sisestage lühem märksõna. Märksõna pikkus peab olema vähem kui %1 tähemärk(i).", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Liiga vähe märksõnu. Teemadel peab olemalt vähemalt %1 märksõna", "too-many-tags": "Liiga palju märksõnu. Teemadel ei tohi olla rohkem kui %1 märksõna", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/et/global.json b/public/language/et/global.json index 60ce72fa37..cc1055b63f 100644 --- a/public/language/et/global.json +++ b/public/language/et/global.json @@ -6,11 +6,11 @@ "403.message": "Tundub, et sul pole piisvalt õigusi selle lehe vaatamiseks. ", "403.login": "Perhaps you should try logging in?", "404.title": "Ei leitud", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Süsteemne error.", "500.message": "Oih! Midagi läks valesti!", "400.title": "Vigane päring.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registreeri", "login": "Logi sisse", "please_log_in": "Palun logi sisse", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Edukalt sisse logitud", "save_changes": "Salvesta muudatused", "save": "Save", + "cancel": "Cancel", "close": "Sulge", "pagination": "Lehekülgede numeratsioon", "pagination.out_of": "%1 kõigist %2-st", @@ -60,6 +61,7 @@ "posts": "Postitust", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Parim", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/et/groups.json b/public/language/et/groups.json index 30679d9c24..713769c7cb 100644 --- a/public/language/et/groups.json +++ b/public/language/et/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupid", "members": "Members", "view_group": "Vaata gruppi", diff --git a/public/language/et/modules.json b/public/language/et/modules.json index 12dee6a6b9..85928cb60b 100644 --- a/public/language/et/modules.json +++ b/public/language/et/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/et/pages.json b/public/language/et/pages.json index 268b073b38..4b581e9b84 100644 --- a/public/language/et/pages.json +++ b/public/language/et/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Emaili aadress kinnitatud", - "maintenance.text": "%1 foorumil on käimas hooldustööd. Palun külastage meid mõne aja pärast uuesti.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Administraator on jätnud ka omaltpoolt sõnumi:", "throttled.text": "%1 ei ole hetkel kättesaadav liigse koormuse tõttu. Palun tulge tagasi mõni teine kord." } \ No newline at end of file diff --git a/public/language/et/tags.json b/public/language/et/tags.json index c07f8ad32e..58f900808e 100644 --- a/public/language/et/tags.json +++ b/public/language/et/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Sisesta märksõnad siia, %1 kuni %2 tähemärki märksõna kohta.", "enter_tags_here_short": "Sisesta märksõnu...", "no_tags": "Siin ei ole veel ühtegi märksõna.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/et/themes/harmony.json b/public/language/et/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/et/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/et/themes/persona.json b/public/language/et/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/et/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/et/topic.json b/public/language/et/topic.json index 4cbeb3cbe8..ab9e1e68da 100644 --- a/public/language/et/topic.json +++ b/public/language/et/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Liigutatud", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Fork Topic", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Kustuta teema", "thread_tools.delete-posts": "Kustuta Postitusi", "thread_tools.delete_confirm": "Oled kindel, et soovid selle teema kustutada?", diff --git a/public/language/et/user.json b/public/language/et/user.json index dc09bd72d9..0cf80ec199 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/fa-IR/admin/extend/widgets.json b/public/language/fa-IR/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/fa-IR/admin/extend/widgets.json +++ b/public/language/fa-IR/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/fa-IR/admin/settings/email.json b/public/language/fa-IR/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/fa-IR/admin/settings/email.json +++ b/public/language/fa-IR/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index 3bd9c7d6a6..3a9bdae131 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "لطفا برچسب بلندتری وارد کنید. برچسبها باید حداقل %1 کاراکتر داشته باشند.", "tag-too-long": "لطفا برچسب کوتاه تری وارد کنید . برچسب ها نباید بیشتر از %1 کاراکتر داشته باشند", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "تعداد برچسب ها کافی نیست. موضوع ها یابد حداقل %1 برچسب داشته باشند", "too-many-tags": "تعداد برچسب ها بیشتر از حد مجاز است. موضوع ها نمی توانند بیشتر از %1 برچسب داشته باشند", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/fa-IR/global.json b/public/language/fa-IR/global.json index 5b07d8d744..ec6247aa9b 100644 --- a/public/language/fa-IR/global.json +++ b/public/language/fa-IR/global.json @@ -6,11 +6,11 @@ "403.message": "به نظر می رسد شما به صفحه ای برخورد کرده اید که دسترسی به آن ندارید.", "403.login": "Perhaps you should try logging in?", "404.title": "یافت نشد", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "خطای داخلی.", "500.message": "اوه! گویا اشتباهی رخ داده!", "400.title": "درخواست بد.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "نام‌نویسی", "login": "درون آمدن", "please_log_in": "لطفا به درون بیایید", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "با موفقیت درون آمده‌اید", "save_changes": "اندوختن تغییرها", "save": "ذخیره", + "cancel": "Cancel", "close": "بستن", "pagination": "صفحه‌بندی", "pagination.out_of": "%1 از %2", @@ -60,6 +61,7 @@ "posts": "دیدگاه‌ها", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "بهترین", "controversial": "Controversial", "votes": "رای ها", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "انتخاب", + "copied": "Copied", "user-search-prompt": "برای پیدا کردن کاربر اینجا چیزی بنویسید...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/fa-IR/groups.json b/public/language/fa-IR/groups.json index 5a61601146..e6be926797 100644 --- a/public/language/fa-IR/groups.json +++ b/public/language/fa-IR/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "گروه‌ها", "members": "Members", "view_group": "مشاهده گروه", diff --git a/public/language/fa-IR/modules.json b/public/language/fa-IR/modules.json index c8437026fc..d69a8e2cf5 100644 --- a/public/language/fa-IR/modules.json +++ b/public/language/fa-IR/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/fa-IR/pages.json b/public/language/fa-IR/pages.json index 4e31003af3..99829671f4 100644 --- a/public/language/fa-IR/pages.json +++ b/public/language/fa-IR/pages.json @@ -60,7 +60,7 @@ "account/uploads": "آپلود های %1", "account/sessions": "Session های ورود", "confirm": "ایمیل تایید شد", - "maintenance.text": "%1 در حال حاضر تحت تعمیر و نگهدارییست. لطفا زمان دیگری مراجعه کنید.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "علاوه بر این، مدیر این پیام را گذاشته است:", "throttled.text": "%1 به دلیل بارگذاری بیش از حد ، قابل دسترس نمی باشد. لطفا در زمان دیگری دوباره امتحان کنید" } \ No newline at end of file diff --git a/public/language/fa-IR/tags.json b/public/language/fa-IR/tags.json index bcb719efca..5aded4f114 100644 --- a/public/language/fa-IR/tags.json +++ b/public/language/fa-IR/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "برچسب‌ها را اینجا وارد کنید، هر کدام بین %1 و %2 کاراکتر.", "enter_tags_here_short": "برچسب‌ها را وارد کنید...", "no_tags": "هنوز برچسبی وجود ندارد.", - "select_tags": "انتخاب برچسب ها" + "select_tags": "انتخاب برچسب ها", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/fa-IR/themes/harmony.json b/public/language/fa-IR/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/fa-IR/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/fa-IR/themes/persona.json b/public/language/fa-IR/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/fa-IR/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/fa-IR/topic.json b/public/language/fa-IR/topic.json index 0b831c1cac..37bcf2ad8b 100644 --- a/public/language/fa-IR/topic.json +++ b/public/language/fa-IR/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "منتقل شده", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "کپی IP", "ban-ip": "مسدود کردن IP", "view-history": "تاریخچه ویرایش", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "تغییر مالک پست", "thread_tools.select_category": "انتخاب دسته", "thread_tools.fork": "شاخه ساختن از موضوع", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "پاک کردن موضوع", "thread_tools.delete-posts": "حذف پست ها", "thread_tools.delete_confirm": "آیا مطمئنید می خواهید این موضوع را حذف کنید؟", diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index 024689a38b..f78f601c74 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/fi/admin/extend/widgets.json b/public/language/fi/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/fi/admin/extend/widgets.json +++ b/public/language/fi/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/fi/admin/settings/email.json b/public/language/fi/admin/settings/email.json index 740998a605..9d06b2d76f 100644 --- a/public/language/fi/admin/settings/email.json +++ b/public/language/fi/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 4388a34bfb..c7dfb6abd0 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/fi/global.json b/public/language/fi/global.json index c910608d4f..a6be2a49a4 100644 --- a/public/language/fi/global.json +++ b/public/language/fi/global.json @@ -6,11 +6,11 @@ "403.message": "Olet päätynyt sivulle, johon sinulla ei ole tarvittavia oikeuksia.", "403.login": "Perhaps you should try logging in?", "404.title": "Ei löydy", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Palvelinvirhe", "500.message": "Oho! Jotain meni pieleen!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Rekisteröidy", "login": "Kirjaudu", "please_log_in": "Kirjaudu, ole hyvä", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Olet onnistuneesti kirjautunut sisään", "save_changes": "Tallenna muutokset", "save": "Tallenna", + "cancel": "Cancel", "close": "Sulje", "pagination": "Sivutus", "pagination.out_of": "%1/%2", @@ -60,6 +61,7 @@ "posts": "Viestit", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Paras", "controversial": "Controversial", "votes": "Ääniä", @@ -130,7 +132,9 @@ "edited": "Muokattu", "disabled": "Disabled", "select": "Valitse", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index 6e47780955..669d11f2dc 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Ryhmät", "members": "Members", "view_group": "Tarkaste ryhmää", diff --git a/public/language/fi/modules.json b/public/language/fi/modules.json index 66ae1ebbae..5223522d96 100644 --- a/public/language/fi/modules.json +++ b/public/language/fi/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/fi/pages.json b/public/language/fi/pages.json index 08339c5fe3..019213b72a 100644 --- a/public/language/fi/pages.json +++ b/public/language/fi/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 lähetykset", "account/sessions": "Login Sessions", "confirm": "Sähköposti varmistettu", - "maintenance.text": "%1 sivustoa huolletaan parhaillaan. Tarkista sivusto hetken kuluttua uudestaan.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Lisäksi ylläpitäjä on jättänyt seuraavan viestin:", "throttled.text": "%1 sivusto on tällähetkellä alhaalla johtuen liiasta kuormituksesta. Tule takaisin myöhemmin." } \ No newline at end of file diff --git a/public/language/fi/tags.json b/public/language/fi/tags.json index 90976a33c3..aa3dc2efc8 100644 --- a/public/language/fi/tags.json +++ b/public/language/fi/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Syötä tagit tähän merkkien %1 ja %2 väliin.", "enter_tags_here_short": "Syötä tagit...", "no_tags": "Ei vielä yhtään tagia.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/fi/themes/harmony.json b/public/language/fi/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/fi/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/fi/themes/persona.json b/public/language/fi/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/fi/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json index 140ba3d9c0..63630ae725 100644 --- a/public/language/fi/topic.json +++ b/public/language/fi/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Siirretty", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopioi IP", "ban-ip": "Ban IP", "view-history": "Muokkaa historiaa", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Vaihda omistaja", "thread_tools.select_category": "Valitse kategoria", "thread_tools.fork": "Haaroita aihe", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Poista aihe", "thread_tools.delete-posts": "Poista viestit", "thread_tools.delete_confirm": "Haluatko varmasti poistaa tämän aiheen?", diff --git a/public/language/fi/user.json b/public/language/fi/user.json index 16eabf1e16..037c246591 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/fr/admin/extend/widgets.json b/public/language/fr/admin/extend/widgets.json index 0d46b1e6fe..26e7d3045a 100644 --- a/public/language/fr/admin/extend/widgets.json +++ b/public/language/fr/admin/extend/widgets.json @@ -8,9 +8,9 @@ "containers.none": "Aucun", "container.well": "Well", "container.jumbotron": "Jombotron", - "container.card": "Card", - "container.card-header": "Card Header", - "container.card-body": "Card Body", + "container.card": "Carte", + "container.card-header": "En-tête", + "container.card-body": "Corps", "container.alert": "Alerte", "alert.confirm-delete": "Êtes-vous sûr de vouloir supprimer ce widget ?", @@ -26,5 +26,7 @@ "container.placeholder": "Glissez et déposez un bloc ou entrez HTML ici.", "show-to-groups": "Visible pour les groupes", "hide-from-groups": "Masquer pour les groupes", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Masquer sur mobile" } \ No newline at end of file diff --git a/public/language/fr/admin/settings/email.json b/public/language/fr/admin/settings/email.json index 42b64a4343..f44a23d0d7 100644 --- a/public/language/fr/admin/settings/email.json +++ b/public/language/fr/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Veuillez entrer un nombre représentant l'heure à laquelle envoyer les lettres d'activités (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 :
La prochaine lettre d'activités sera envoyée à ", "notifications.remove-images": "Supprimer les images des notifications par e-mail", "require-email-address": "Exiger une adresse e-mail aux nouveaux utilisateurs ", - "require-email-address-warning": "Par défaut, les utilisateurs peuvent refuser de saisir une adresse e-mail en laissant le champ vide. L'activation de cette option signifie qu'ils doivent entrer une adresse e-mail afin de procéder à l'inscription. Cela ne garantit pas que l'utilisateur entrera une adresse e-mail valide, ni même une adresse qu'il possède.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Envoyer une confirmation de validation lorsqu'un e-mail est ajouté ou modifié", "include-unverified-emails": "Envoyer des mails aux destinataires qui n'ont pas explicitement confirmé leurs mails", "include-unverified-warning": "Par défaut, les utilisateurs dont les mails sont associés à leur compte ont déjà été vérifiés, mais il existe des situations où ce n'est pas le cas (par exemple, les connexions SSO, les utilisateurs bénéficiant de droits acquis, etc.). Activez ce paramètre à vos risques et périls – l'envoi de mails à des adresses non vérifiées peut constituer une violation des lois anti-spam régionales.", diff --git a/public/language/fr/error.json b/public/language/fr/error.json index ceb21a3358..ef778977a1 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -62,7 +62,7 @@ "no-user": "Cet utilisateur n'existe pas", "no-teaser": "L’aperçu n'existe pas", "no-flag": "Le signalement n'existe pas", - "no-chat-room": "Chat room does not exist", + "no-chat-room": "Le salon de discussion n'existe pas.", "no-privileges": "Vous n'avez pas les privilèges nécessaires pour effectuer cette action.", "category-disabled": "Catégorie désactivée", "topic-locked": "Sujet verrouillé", @@ -92,6 +92,7 @@ "already-posting": "Vous pouvez poster", "tag-too-short": "Veuillez entrer un mot-clé plus long. Les mots-clés doivent contenir au moins %1 caractère(s).", "tag-too-long": "Veuillez entrer un mot-clé plus court. Les mot-clés ne peuvent excéder %1 caractère(s).", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Pas assez de mots-clés. Les sujets doivent avoir au moins %1 mots-clé(s).", "too-many-tags": "Trop de mots-clés. Les sujets ne peuvent avoir au plus que %1 mots-clé(s).", "cant-use-system-tag": "Vous ne pouvez gérer les mots-clés.", @@ -101,7 +102,7 @@ "guest-upload-disabled": "L'envoi de fichiers a été désactivé pour les invités", "cors-error": "Impossible d'envoyer l'image en raison d'une erreur de configuration CORS", "upload-ratelimit-reached": "Vous avez envoyé trop de fichiers à la fois. Veuillez réessayer plus tard.", - "upload-error-fallback": "Unable to upload image — %1", + "upload-error-fallback": "Impossible de téléverser l'image — %1", "scheduling-to-past": "Veuillez sélectionner une date ultérieure.", "invalid-schedule-date": "Veuillez saisir une date et une heure valide.", "cant-pin-scheduled": "Les sujets planifiés ne peuvent pas être (dé)épinglés.", @@ -135,8 +136,8 @@ "group-already-requested": "Votre demande d'adhésion a déjà été envoyée.", "group-join-disabled": "Vous ne pouvez pas rejoindre ce groupe pour le moment.", "group-leave-disabled": "Vous ne pouvez pas quitter ce groupe pour le moment.", - "group-user-not-pending": "User does not have a pending request to join this group.", - "gorup-user-not-invited": "User has not been invited to join this group.", + "group-user-not-pending": "L'utilisateur n'a pas de demande en attente pour rejoindre ce groupe.", + "gorup-user-not-invited": "L'utilisateur n'a pas été invité à rejoindre ce groupe.", "post-already-deleted": "Message déjà supprimé", "post-already-restored": "Message déjà restauré", "topic-already-deleted": "Sujet déjà supprimé", @@ -160,9 +161,9 @@ "chat-deleted-already": "Ce message a déjà été supprimé.", "chat-restored-already": "Ce message de discussion a déjà été restauré.", "chat-room-does-not-exist": "Le salon de discussion n'existe pas.", - "cant-add-users-to-chat-room": "Can't add users to chat room.", - "cant-remove-users-from-chat-room": "Can't remove users from chat room.", - "chat-room-name-too-long": "Chat room name too long.", + "cant-add-users-to-chat-room": "Impossible d'ajouter des utilisateurs au salon.", + "cant-remove-users-from-chat-room": "Impossible de supprimer des utilisateurs du salon.", + "chat-room-name-too-long": "Nom de salon trop long.", "already-voting-for-this-post": "Vous avez déjà voté pour ce message.", "reputation-system-disabled": "Le système de réputation est désactivé", "downvoting-disabled": "Les votes négatifs ne sont pas autorisés", @@ -228,5 +229,5 @@ "api.500": "Une erreur inattendue s'est produite lors de la tentative de traitement de votre demande.", "api.501": "L'accès n'est pas encore fonctionnel, veuillez réessayer demain", "api.503": "L'accès n'est pas disponible actuellement en raison d'une configuration de serveur", - "api.reauth-required": "The resource you are trying to access requires (re-)authentication." + "api.reauth-required": "La ressource à laquelle vous tentez d'accéder nécessite une (ré)authentification." } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index bd6d5cd2d8..b3077e7d44 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -4,13 +4,13 @@ "buttons.close": "Fermer", "403.title": "Accès refusé", "403.message": "Il semble que vous ayez atteint une page à laquelle vous n'avez pas accès.", - "403.login": "Perhaps you should try logging in?", + "403.login": "Peut-être devriez-vous essayer de vous connecter ?", "404.title": "Introuvable", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Erreur Interne.", "500.message": "Oops ! Il semblerait que quelque chose se soit mal passé !", "400.title": "Requête erronée.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "S'inscrire", "login": "Se connecter", "please_log_in": "Veuillez vous connecter", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Vous vous êtes bien connecté", "save_changes": "Enregistrer les changements", "save": "Enregistrer", + "cancel": "Annuler", "close": "Fermer", "pagination": "Pagination", "pagination.out_of": "%1 sur %2", @@ -37,13 +38,13 @@ "header.notifications": "Notifications", "header.search": "Recherche", "header.profile": "Profil", - "header.account": "Account", + "header.account": "Compte", "header.navigation": "Navigation", - "header.manage": "Manage", - "header.drafts": "Drafts", + "header.manage": "Gestion", + "header.drafts": "Brouillons", "notifications.loading": "Chargement des notifications", "chats.loading": "Chargement des discussions", - "drafts.loading": "Loading Drafts", + "drafts.loading": "Chargement des brouillons", "motd.welcome": "Bienvenue sur NodeBB, la plate-forme de discussion du futur.", "previouspage": "Page précédente", "nextpage": "Page suivante", @@ -58,8 +59,9 @@ "users": "Utilisateurs", "topics": "Sujets", "posts": "Messages", - "x-posts": "%1 posts", - "x-topics": "%1 topics", + "x-posts": "%1 messages", + "x-topics": "%1 sujets", + "x-reputation": "%1 réputation", "best": "Meilleur sujets", "controversial": "Contesté", "votes": "Votes", @@ -74,7 +76,7 @@ "reputation": "Réputation", "lastpost": "Dernier message", "firstpost": "Premier message", - "about": "About", + "about": "À propos", "read_more": "En lire plus", "more": "Plus", "none": "Aucun", @@ -88,13 +90,13 @@ "user_posted_ago": "%1 a posté %2", "guest_posted_ago": "Un invité a posté %1", "last_edited_by": "dernière édition par %1", - "edited-timestamp": "Edited %1", + "edited-timestamp": "Modifié %1", "norecentposts": "Aucun message récent", "norecenttopics": "Aucun sujet récent", "recentposts": "Messages récents", "recentips": "Adresses IP récemment enregistées", "moderator_tools": "Outils de modération", - "status": "Status", + "status": "Statuts", "online": "En ligne", "away": "Absent", "dnd": "Occupé", @@ -130,7 +132,9 @@ "edited": "Modifié", "disabled": "Désactivé", "select": "Sélectionner", + "copied": "Copié", "user-search-prompt": "Écrivez ici pour rechercher des utilisateurs ...", - "hidden": "Hidden", - "sort": "Sort" + "hidden": "Masqué", + "sort": "Trier", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index d780f2b33e..8fe96b394e 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -1,6 +1,7 @@ { + "all-groups": "All groups", "groups": "Groupes", - "members": "Members", + "members": "Membres", "view_group": "Voir le groupe", "owner": "Propriétaire du groupe", "new_group": "Créer un nouveau groupe", diff --git a/public/language/fr/modules.json b/public/language/fr/modules.json index 35a91c9a28..b6ad48eba5 100644 --- a/public/language/fr/modules.json +++ b/public/language/fr/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Heure", "composer.cancel-scheduling": "Annuler la planification", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Régler la date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/fr/pages.json b/public/language/fr/pages.json index 0fb5e0ec9a..99ffb5e79b 100644 --- a/public/language/fr/pages.json +++ b/public/language/fr/pages.json @@ -49,7 +49,7 @@ "account/watched_categories": "%1's Catégories surveillées", "account/bookmarks": "Marque-pages de %1", "account/settings": "Paramètres d'utilisateur", - "account/settings-of": "Changing settings of %1", + "account/settings-of": "Modifier les paramètres de %1", "account/watched": "Sujets auxquels %1 est abonné", "account/ignored": "Sujets ignorés par %1", "account/upvoted": "Avis positifs de %1", @@ -60,7 +60,7 @@ "account/uploads": "Envoyé par %1", "account/sessions": "Sessions des connexions", "confirm": "Email vérifié", - "maintenance.text": "%1 est en maintenance. Veuillez revenir un peu plus tard.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "De plus, l'administrateur a laissé ce message :", "throttled.text": "%1 est actuellement indisponible en raison d'une charge excessive. Merci de réessayer plus tard." } \ No newline at end of file diff --git a/public/language/fr/tags.json b/public/language/fr/tags.json index e8d5566405..d403127220 100644 --- a/public/language/fr/tags.json +++ b/public/language/fr/tags.json @@ -1,10 +1,11 @@ { - "all-tags": "All tags", + "all-tags": "Tous les mots-clés", "no_tag_topics": "Il n'y a aucun sujet ayant ce mot-clé", - "no-tags-found": "No tags found", + "no-tags-found": "Aucun mots-clés trouvés", "tags": "Mots-clés", "enter_tags_here": "Entrez les mots-clés ici. Chaque mot doit faire entre %1 et %2 caractères.", "enter_tags_here_short": "Entrez des mots-clés...", "no_tags": "Il n'y a pas encore de mots-clés.", - "select_tags": "Sélectionner les mots-clés" + "select_tags": "Sélectionner les mots-clés", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/fr/themes/harmony.json b/public/language/fr/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/fr/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/fr/themes/persona.json b/public/language/fr/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/fr/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/fr/topic.json b/public/language/fr/topic.json index 1252e06ae8..e6359f91a5 100644 --- a/public/language/fr/topic.json +++ b/public/language/fr/topic.json @@ -36,33 +36,34 @@ "scheduled": "Planifier", "moved": "Déplacé", "moved-from": "Déplacé de %1", + "copy-code": "Copier le code", "copy-ip": "Copier l'IP", "ban-ip": "Bannir l'IP", "view-history": "Éditer l'historique", - "wrote-ago": "wrote ", - "wrote-on": "wrote on ", - "replied-to-user-ago": "replied to %3 ", - "replied-to-user-on": "replied to %3 on ", - "user-locked-topic-ago": "%1 locked this topic %2", - "user-locked-topic-on": "%1 locked this topic on %2", - "user-unlocked-topic-ago": "%1 unlocked this topic %2", - "user-unlocked-topic-on": "%1 unlocked this topic on %2", - "user-pinned-topic-ago": "%1 pinned this topic %2", - "user-pinned-topic-on": "%1 pinned this topic on %2", - "user-unpinned-topic-ago": "%1 unpinned this topic %2", - "user-unpinned-topic-on": "%1 unpinned this topic on %2", - "user-deleted-topic-ago": "%1 deleted this topic %2", - "user-deleted-topic-on": "%1 deleted this topic on %2", - "user-restored-topic-ago": "%1 restored this topic %2", - "user-restored-topic-on": "%1 restored this topic on %2", - "user-moved-topic-from-ago": "%1 moved this topic from %2 %3", - "user-moved-topic-from-on": "%1 moved this topic from %2 on %3", - "user-queued-post-ago": "%1 queued post for approval %3", - "user-queued-post-on": "%1 queued post for approval on %3", - "user-referenced-topic-ago": "%1 referenced this topic %3", - "user-referenced-topic-on": "%1 referenced this topic on %3", - "user-forked-topic-ago": "%1 forked this topic %3", - "user-forked-topic-on": "%1 forked this topic on %3", + "wrote-ago": "écrit ", + "wrote-on": "a écrit sur ", + "replied-to-user-ago": "a répondu à %3 ", + "replied-to-user-on": "a répondu à %3 sur ", + "user-locked-topic-ago": "%1 a verrouillé ce sujet %2", + "user-locked-topic-on": "%1 a verrouillé ce sujet sur %2", + "user-unlocked-topic-ago": "%1 a déverrouillé ce sujet %2", + "user-unlocked-topic-on": "%1 a déverrouillé ce sujet sur %2", + "user-pinned-topic-ago": "%1 a épinglé ce sujet %2", + "user-pinned-topic-on": "%1 a épinglé ce sujet sur %2", + "user-unpinned-topic-ago": "%1 a désépinglé ce sujet %2", + "user-unpinned-topic-on": "%1 a désépinglé ce sujet sur %2", + "user-deleted-topic-ago": "%1 a supprimé ce sujet %2", + "user-deleted-topic-on": "%1 a supprimé ce sujet sur %2", + "user-restored-topic-ago": "%1 a restauré ce sujet %2", + "user-restored-topic-on": "%1 a restauré ce sujet sur %2", + "user-moved-topic-from-ago": "%1 a déplacé ce sujet de %2 %3", + "user-moved-topic-from-on": "%1 a déplacé ce sujet de %2 sur %3", + "user-queued-post-ago": "%1 message En attente pour approbation %3", + "user-queued-post-on": "%1 message En attente pour approbation sur %3", + "user-referenced-topic-ago": "%1 a fait référence à ce sujet %3", + "user-referenced-topic-on": "%1 a fait référence à ce sujet sur %3", + "user-forked-topic-ago": "%1 a dupliqué ce sujet %3", + "user-forked-topic-on": "%1 a dupliqué ce sujet sur %3", "bookmark_instructions": "Cliquez ici pour aller au dernier message lu de ce fil.", "flag-post": "Signaler ce message", "flag-user": "Signaler cet utilisateur", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Changer de propriétaire", "thread_tools.select_category": "Sélectionner une catégorie", "thread_tools.fork": "Scinder le sujet", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Supprimer le sujet", "thread_tools.delete-posts": "Supprimer les messages", "thread_tools.delete_confirm": "Êtes-vous sûr de bien vouloir supprimer ce sujet ?", @@ -109,7 +111,7 @@ "thread_tools.purge": "Supprimer définitivement le(s) sujet(s)", "thread_tools.purge_confirm": "Êtes-vous sûr de bien vouloir supprimer définitivement ce sujet ?", "thread_tools.merge_topics": "Fusionner les Sujets", - "thread_tools.merge": "Merge Topic", + "thread_tools.merge": "Fusionner le sujet", "topic_move_success": "Ce sujet sera bientôt déplacé vers \"%1\". Cliquez ici pour annuler.", "topic_move_multiple_success": "Ces sujets seront bientôt déplacés vers \"%1\". Cliquez ici pour annuler.", "topic_move_all_success": "Tous les sujets seront déplacés vers \"%1\". Cliquez ici pour annuler.", @@ -135,7 +137,7 @@ "post_moved": "Message déplacé !", "fork_topic": "Scinder le sujet", "enter-new-topic-title": "Entrez un nouveau titre de sujet", - "fork_topic_instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic", + "fork_topic_instruction": "Cliquez sur les messages que vous souhaitez dupliquer, entrez un titre pour le nouveau sujet et cliquez sur dupliquer", "fork_no_pids": "Aucun post sélectionné !", "no-posts-selected": "Aucun(s) message(s) sélectionné(s) !", "x-posts-selected": "%1 message(s) sélectionné(s)", @@ -150,15 +152,15 @@ "merge-new-title-for-topic": "Nouveau titre pour le sujet", "topic-id": "Sujet ID", "move_posts_instruction": "Cliquez sur les articles que vous souhaitez déplacer, puis entrez un ID de sujet ou accédez au sujet cible", - "move_topic_instruction": "Select the target category and then click move", + "move_topic_instruction": "Sélectionnez la catégorie cible, puis cliquez sur déplacer", "change_owner_instruction": "Cliquez sur les messages que vous souhaitez attribuer à un autre utilisateur.", "composer.title_placeholder": "Entrer le titre du sujet ici…", "composer.handle_placeholder": "Entrez votre nom/identifiant ici", - "composer.hide": "Hide", + "composer.hide": "Cacher", "composer.discard": "Abandonner", "composer.submit": "Envoyer", "composer.additional-options": "Options additionnelles", - "composer.post-later": "Post Later", + "composer.post-later": "Publier plus tard", "composer.schedule": "Planification", "composer.replying_to": "En réponse à %1", "composer.new_topic": "Nouveau sujet", @@ -201,7 +203,7 @@ "last-post": "Dernier message", "go-to-my-next-post": "Aller à mon prochain message", "no-more-next-post": "Vous n'avez plus de messages dans ce sujet", - "post-quick-reply": "Quick reply", - "navigator.index": "Post %1 of %2", - "navigator.unread": "%1 unread" + "post-quick-reply": "Réponse rapide", + "navigator.index": "Message %1 sur %2", + "navigator.unread": "%1 non lu" } \ No newline at end of file diff --git a/public/language/fr/user.json b/public/language/fr/user.json index 328f1524c2..73de7f3d64 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -43,7 +43,7 @@ "followers": "Abonnés", "following": "Abonnements", "blocks": "Bloqués", - "blocked-users": "Blocked users", + "blocked-users": "Utilisateurs bloqués", "block_toggle": "Débloquer", "block_user": "Bloquer l'utilisateur", "unblock_user": "Débloquer l'utilisateur", @@ -69,7 +69,7 @@ "upload_new_picture": "Envoyer une nouvelle image", "upload_new_picture_from_url": "Envoyer une nouvelle image depuis un URL", "current_password": "Mot de passe actuel", - "new_password": "New Password", + "new_password": "Nouveau mot de passe", "change_password": "Changer le mot de passe", "change_password_error": "Mot de passe invalide !", "change_password_error_wrong_current": "Votre mot de passe est incorrect !", @@ -117,8 +117,8 @@ "paginate_description": "Utiliser la pagination des sujets et des messages à la place du défilement infini", "topics_per_page": "Sujets par page", "posts_per_page": "Messages par page", - "category-topic-sort": "Category topic sort", - "topic-post-sort": "Topic post sort", + "category-topic-sort": "Tri des sujets par catégorie", + "topic-post-sort": "Tri des articles par sujet", "max_items_per_page": "Maximum %1", "acp_language": "Page de gestion des langues", "notifications": "Notifications", @@ -172,8 +172,8 @@ "info.moderation-note.success": "Note de modération enregistrée", "info.moderation-note.add": "Ajouter une note", "sessions.description": "Cette page vous permet de visualiser et de révoquer si nécessaire, toutes les sessions actives de ce forum. Vous pouvez révoquer votre propre session en vous déconnectant de votre compte.", - "revoke-session": "Revoke Session", - "browser-version-on-platform": "%1 %2 on %3", + "revoke-session": "Révoquer la session", + "browser-version-on-platform": "%1 %2 sur %3", "consent.title": "Vos données personnelles", "consent.lead": "Ce forum collecte et traite vos informations personnelles.", "consent.intro": "Nous utilisons ces informations strictement pour personnaliser votre expérience dans cette communauté, ainsi que pour associer les messages que vous publiez à votre compte utilisateur. Lors de l'étape d'enregistrement, vous avez été invité à fournir un nom d'utilisateur et une adresse e-mail. Vous pouvez également fournir des informations supplémentaires pour compléter votre profil.

Nous conservons ces informations durant la durée de vie de votre compte utilisateur. À tout moment vous pouvez supprimer votre compte. À tout moment, vous pouvez demander une copie de vos contributions, via la page de vos données personnelles.

Si vous avez des questions ou préoccupations, nous vous encourageons à contacter l'équipe d'administration de ce forum.", @@ -201,5 +201,6 @@ "emailUpdate.optional": "Ce champ est facultatif. Vous n'êtes pas obligé de fournir votre adresse e-mail, mais sans e-mail validé, vous ne pourrez pas récupérer votre compte ou vous connecter avec votre e-mail.", "emailUpdate.required": "Ce champ est requis.", "emailUpdate.change-instructions": "Un mail de confirmation sera envoyé à l'adresse mail saisie avec un lien unique. L'accès à ce lien confirmera votre propriété de mail et elle deviendra active sur votre compte. À tout moment, vous pouvez mettre à jour votre mail enregistré depuis la page de votre compte.", - "emailUpdate.password-challenge": "Veuillez entrer votre mot de passe pour confirmer la propriété du compte." + "emailUpdate.password-challenge": "Veuillez entrer votre mot de passe pour confirmer la propriété du compte.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/gl/admin/extend/widgets.json b/public/language/gl/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/gl/admin/extend/widgets.json +++ b/public/language/gl/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/gl/admin/settings/email.json b/public/language/gl/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/gl/admin/settings/email.json +++ b/public/language/gl/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/gl/error.json b/public/language/gl/error.json index c123148246..5e1674d375 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Por favor, introduce unha etiqueta máis longa. As etiquetas deben conter %1 carácter(es) como mínimo.", "tag-too-long": "Por favor, introduce unha etiqueta máis curta. As etiquetas non poden conter máis de %1 carácter(es).", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Non hai etiquetas dabondas. Os temas deben ter %1 etiqueta(s) como mínimo.", "too-many-tags": "Moitas etiquetas. Os temas non poden ter máis de %1 etiqueta(s).", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/gl/global.json b/public/language/gl/global.json index 1ff8330332..743ba0f5fe 100644 --- a/public/language/gl/global.json +++ b/public/language/gl/global.json @@ -6,11 +6,11 @@ "403.message": "Ao parecer, non tes permisos para acceder a esta páxina.", "403.login": "Perhaps you should try logging in?", "404.title": "Non Atopado", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Erro interno.", "500.message": "Ups! Parece que algo saíu mal!", "400.title": "Petición incorrecta", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Rexistrarse", "login": "Conectarse", "please_log_in": "Por favor, conéctate", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Sentidiño!", "save_changes": "Gardar Cambios", "save": "Gardar", + "cancel": "Cancel", "close": "Pechar ", "pagination": "Paxinación", "pagination.out_of": "%1 de %2", @@ -60,6 +61,7 @@ "posts": "Publicacións", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Mellor", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/gl/groups.json b/public/language/gl/groups.json index 81918bc793..9393a22b03 100644 --- a/public/language/gl/groups.json +++ b/public/language/gl/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupos", "members": "Members", "view_group": "Ver grupo", diff --git a/public/language/gl/modules.json b/public/language/gl/modules.json index a6d9f024a5..b42ae4b2f7 100644 --- a/public/language/gl/modules.json +++ b/public/language/gl/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/gl/pages.json b/public/language/gl/pages.json index 2ee82c35e0..d7955f4d17 100644 --- a/public/language/gl/pages.json +++ b/public/language/gl/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Enderezo electrónico confirmado", - "maintenance.text": "%1 está baixo mantemento. Por favor, volve máis tarde.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "A máis, o administrador deixou esta mensaxe: ", "throttled.text": "&1 non está dispoñible debido a unha carga excesiva. Por favor, volva noutro momento" } \ No newline at end of file diff --git a/public/language/gl/tags.json b/public/language/gl/tags.json index 7af1f30871..83c7c74cdc 100644 --- a/public/language/gl/tags.json +++ b/public/language/gl/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Pon as etiquetas aquí, entre %1 e %2 caracteres cada unha.", "enter_tags_here_short": "Introduce as etiquetas", "no_tags": "Non hai etiquetas todavía.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/gl/themes/harmony.json b/public/language/gl/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/gl/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/gl/themes/persona.json b/public/language/gl/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/gl/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/gl/topic.json b/public/language/gl/topic.json index 5e6f25af2c..650eb18e3e 100644 --- a/public/language/gl/topic.json +++ b/public/language/gl/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Movido", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Dividir Tema", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Borrar Tema", "thread_tools.delete-posts": "Eliminar publicacións", "thread_tools.delete_confirm": "Estás seguro de que desexas eliminar este tema?", diff --git a/public/language/gl/user.json b/public/language/gl/user.json index 23ca9ba86b..4ae5febb94 100644 --- a/public/language/gl/user.json +++ b/public/language/gl/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/he/admin/extend/widgets.json b/public/language/he/admin/extend/widgets.json index 29194a4946..ff4839d98d 100644 --- a/public/language/he/admin/extend/widgets.json +++ b/public/language/he/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "גרור ושחרר גורם מכיל (container) או הזן HTML כאן.", "show-to-groups": "יוצג בקבוצות", "hide-from-groups": "יוסתר מקבוצות", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "הסתר במובייל" } \ No newline at end of file diff --git a/public/language/he/admin/settings/email.json b/public/language/he/admin/settings/email.json index 1b37b35a28..554c795ba5 100644 --- a/public/language/he/admin/settings/email.json +++ b/public/language/he/admin/settings/email.json @@ -5,8 +5,8 @@ "from": "מאת", "from-help": "השם 'מאת' יוצג בדוא\"ל.", - "confirmation-settings": "Confirmation", - "confirmation.expiry": "Hours to keep email confirmation link valid", + "confirmation-settings": "אישור", + "confirmation.expiry": "מספר שעות לשמירה על קישור אימות הדוא\"ל בתוקף", "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Enable SMTP Transport", @@ -42,7 +42,7 @@ "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.remove-images": "הסר תמונות מהודעות דוא\"ל", "require-email-address": "דרוש ממשתמשים חדשים כתובת אימייל", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "שלח דוא\"ל גם למשתמשים שלא אימתו את הכתובת שלהם", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/he/error.json b/public/language/he/error.json index 6bf8f2c7d0..dd962317e7 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "הכניסו תגית ארוכה יותר. תגיות חייבות להכיל לפחות %1 תווים", "tag-too-long": "הכניסו תגית קצרה יותר. תגיות יכולות להיות רק עד %1 תווים", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "אין מספיק תגיות. נושא חייב להכיל לפחות %1 תגיות", "too-many-tags": "יותר מדי תגיות. נושאים יכולים להכיל רק %1 תגיות", "cant-use-system-tag": "אינכם יכול להשתמש בתווית מערכת זו.", diff --git a/public/language/he/global.json b/public/language/he/global.json index 6f6d8a7aad..076cd4723c 100644 --- a/public/language/he/global.json +++ b/public/language/he/global.json @@ -6,11 +6,11 @@ "403.message": "הגעתם לעמוד שאין לכם הרשאת צפייה בו", "403.login": "Perhaps you should try logging in?", "404.title": "לא נמצא", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "שגיאה פנימית.", "500.message": "אופס! נראה שמשהו השתבש!", "400.title": "בקשה שגויה", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "הרשמה", "login": "התחברות", "please_log_in": "נא להתחבר", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "התחברתם בהצלחה", "save_changes": "שמור שינויים", "save": "שמור", + "cancel": "Cancel", "close": "סגור", "pagination": "הגדרות עמוד", "pagination.out_of": "%1 מתוך %2", @@ -60,6 +61,7 @@ "posts": "פוסטים", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "הגבוה ביותר", "controversial": "שנוי במחלוקת", "votes": "הצבעות", @@ -70,7 +72,7 @@ "downvoters": "מצביעי נגד", "downvoted": "הוצבע נגד", "views": "צפיות", - "posters": "יוצרי הפוסטים", + "posters": "כותבים", "reputation": "מוניטין", "lastpost": "פוסט אחרון", "firstpost": "פוסט ראשון", @@ -130,7 +132,9 @@ "edited": "נערך", "disabled": "מושבת", "select": "בחר", + "copied": "הועתק", "user-search-prompt": "הקלד כאן משהו על מנת למצוא משתמשים...", "hidden": "Hidden", - "sort": "Sort" + "sort": "מיון", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/he/groups.json b/public/language/he/groups.json index d21daa7751..69cb06494c 100644 --- a/public/language/he/groups.json +++ b/public/language/he/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "קבוצות", "members": "Members", "view_group": "הצג קבוצה", diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 1c81f82ce4..cd32855533 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "תאריך", "composer.schedule-time": "שעה", "composer.cancel-scheduling": "ביטול תיזמון", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "הגדרת תאריך", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/he/pages.json b/public/language/he/pages.json index 3672ef584e..a4f93e1212 100644 --- a/public/language/he/pages.json +++ b/public/language/he/pages.json @@ -60,7 +60,7 @@ "account/uploads": "העלאות של %1", "account/sessions": "סשני התחברות", "confirm": "כתובת המייל אושרה", - "maintenance.text": "%1 כרגע תחת עבודות תחזוקה. אנא חזרו במועד מאוחר יותר.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "בנוסף, המנהלים השאירו הודעה זו:", "throttled.text": "%1 לא זמין כעת עקב טעינת יתר. אנא חזרו במועד מאוחר יותר." } \ No newline at end of file diff --git a/public/language/he/tags.json b/public/language/he/tags.json index b460afe247..0a595f4c39 100644 --- a/public/language/he/tags.json +++ b/public/language/he/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "הכנס תגים כאן, כאשר כל אחד בין %1 ל%2 תווים.", "enter_tags_here_short": "הכנס תגיות", "no_tags": "אין עדיין תגיות.", - "select_tags": "בחר תגיות" + "select_tags": "בחר תגיות", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/he/themes/harmony.json b/public/language/he/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/he/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/he/themes/persona.json b/public/language/he/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/he/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/he/topic.json b/public/language/he/topic.json index dcc67ae721..2553931a44 100644 --- a/public/language/he/topic.json +++ b/public/language/he/topic.json @@ -36,6 +36,7 @@ "scheduled": "מתוזמן", "moved": "הועבר", "moved-from": "הועבר מ-%1", + "copy-code": "Copy Code", "copy-ip": "העתקת IP", "ban-ip": "הרחקת IP", "view-history": "עריכת היסטוריה", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "שינוי שם כותב הפוסט", "thread_tools.select_category": "בחירת קטגוריה", "thread_tools.fork": "פיצול נושא", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "מחיקת נושא", "thread_tools.delete-posts": "מחיקת פוסטים", "thread_tools.delete_confirm": "האם למחוק נושא זה?", diff --git a/public/language/he/user.json b/public/language/he/user.json index bcb50505e2..c532133498 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -117,8 +117,8 @@ "paginate_description": "הצגת נושאים ופוסטים בעמודים במקום כרשימת גלילה אין-סופית", "topics_per_page": "כמות נושאים בעמוד", "posts_per_page": "כמות פוסטים בעמוד", - "category-topic-sort": "Category topic sort", - "topic-post-sort": "Topic post sort", + "category-topic-sort": "מיון נושאים בקטגוריה", + "topic-post-sort": "מיון פוסטים בנושא", "max_items_per_page": "מקסימום %1", "acp_language": "שפת עמוד הניהול", "notifications": "התראות", @@ -168,12 +168,12 @@ "info.muted-no-reason": "לא סופקה סיבה.", "info.username-history": "היסטוריית שם משתמש", "info.email-history": "היסטוריית אימייל", - "info.moderation-note": "הערת מודרטור", - "info.moderation-note.success": "הערת מודרטור נשמרה", + "info.moderation-note": "הערת מנחה", + "info.moderation-note.success": "הערת מנחה נשמרה", "info.moderation-note.add": "הוסף הערה", "sessions.description": "דף זה מאפשר לך לראות את כל הסשנים הפעילים בפורום זה ולבטל אותם במידת הצורך. אתה יכול לבטל את הסשן הנוכחי שלך על ידי התנתקות מהחשבון.", "revoke-session": "נתק סשן", - "browser-version-on-platform": "%1 %2 on %3", + "browser-version-on-platform": "%1 %2 ב%3", "consent.title": "תנאי השימוש באתר", "consent.lead": "אתר זה אוסף ומעבד נתונים הכוללים בחלקם את המידע האישי שלך.", "consent.intro": "אנו משתמשים במידע שנאסף כדי להתאים אישית את החוויה שלך, וכן לקשר את ההודעות שאתה מבצע לחשבון המשתמש שלך. במהלך שלב ההרשמה התבקשת לספק שם משתמש וכתובת דוא\"ל, תוכל גם לספק מידע נוסף כדי להשלים את פרופיל המשתמש שלך באתר זה.

אנו שומרים ומעבדים מידע זה. אתה יכול לבטל את הסכמתך בכל עת על ידי מחיקת החשבון שלך. בכל עת תוכל לבקש עותק של חשבונך לאתר זה, באמצעות דף זה.

אם יש לך שאלות או חששות, אנו ממליצים לך ליצור קשר עם צוות הניהול של האתר.", @@ -181,7 +181,7 @@ "consent.digest_frequency": " אתר זה מספק עדכוני דוא\"ל בכל %1. אם תשבית את האפשרות הזאת בהגדרות המשתמש שלך לא תקבל עדכונים אלו.", "consent.digest_off": "האתר לא ישלח הודעות תקציר, אלא אם כן תשנה זאת במפורש בהגדרות המשתמש שלך.", "consent.received": "הסכמתך לאפשר לאתר לאסוף ולעבד את המידע שלך התקבלה. אין צורך בפעולה נוספת.", - "consent.not_received": "לא סיפקת אישור לאיסוף ועיבוד נתונים. בכל עת הנהלת האתר רשאית למחוק את חשבונך בכדי להתאים את עצמה בתקנה הכללית להגנת נתונים.", + "consent.not_received": "לא נתת הסכמה לאיסוף ועיבוד נתונים. בכל עת עשויה הנהלת אתר זה לבחור למחוק את חשבונך על מנת לעמוד בתקנות הגנת המידע הכלליות.", "consent.give": "הסכם", "consent.right_of_access": "זכותך לנגישות", "consent.right_of_access_description": "שמורה לך הזכות לגשת לנתונים שנאספו על ידי האתר. תוכל לאחזר עותק של נתונים אלה על ידי לחיצה על הלחצן מטה.", @@ -201,5 +201,6 @@ "emailUpdate.optional": "שדה זה הוא אופציונלי. אינך מחויב לספק את כתובת הדוא\"ל שלך, אך ללא דוא\"ל מאומת לא תוכל לשחזר את חשבונך או להתחבר באמצעות הדוא\"ל שלך.", "emailUpdate.required": "זהו שדה חובה", "emailUpdate.change-instructions": "מייל אימות יישלח לכתובת דוא\"ל שהכנסת עם קישור ייחודי. לחיצה על הקישור יאמת את בעלותך על הדוא\"ל ותקבל גישה לחשבונך. בכל זמן, תוכל לעדכן את כתובת הדוא\"ל שלך בדף החשבון שלך.", - "emailUpdate.password-challenge": "אנא הזן את הסיסמה שלך כדי לאמת את הבעלות על החשבון." + "emailUpdate.password-challenge": "אנא הזן את הסיסמה שלך כדי לאמת את הבעלות על החשבון.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/hr/admin/extend/widgets.json b/public/language/hr/admin/extend/widgets.json index 180110eb5d..23e722210b 100644 --- a/public/language/hr/admin/extend/widgets.json +++ b/public/language/hr/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/hr/admin/settings/email.json b/public/language/hr/admin/settings/email.json index 3030ec0a35..15be2a5090 100644 --- a/public/language/hr/admin/settings/email.json +++ b/public/language/hr/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/hr/error.json b/public/language/hr/error.json index 7b55f317cc..438c2e3fff 100644 --- a/public/language/hr/error.json +++ b/public/language/hr/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Unesite dužu oznaku. Oznake moraju sadržavati najmanje %1 znak(ova)", "tag-too-long": "Unesite kraću oznaku. Oznake me mogu imati više od %1 znak(ova)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Nema dovoljno oznaka. Teme moraju imate bar %1 oznaku", "too-many-tags": "Previše oznaka. Teme ne mogu imati više od %1 oznaka", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/hr/global.json b/public/language/hr/global.json index 5e30f52b77..e1d24fc211 100644 --- a/public/language/hr/global.json +++ b/public/language/hr/global.json @@ -6,11 +6,11 @@ "403.message": "Nemate pristup ovoj stranici .", "403.login": "Perhaps you should try logging in?", "404.title": "Nije pronadjeno", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Interna greška.", "500.message": "Ups! Čini se da nešto nije u redu.", "400.title": "Krivi zahtjev.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registracija", "login": "Prijava", "please_log_in": "Molimo prijavite se.", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Uspješno ste se prijavili", "save_changes": "Spremi promjene", "save": "Spremi", + "cancel": "Cancel", "close": "Zatvori", "pagination": "Stranice", "pagination.out_of": "%1 od %2", @@ -60,6 +61,7 @@ "posts": "Objave", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Najbolje", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Uređeno", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/hr/groups.json b/public/language/hr/groups.json index 60accd9bbc..b24393484d 100644 --- a/public/language/hr/groups.json +++ b/public/language/hr/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupe", "members": "Members", "view_group": "Pogledaj grupu", diff --git a/public/language/hr/modules.json b/public/language/hr/modules.json index fc3e196945..5c3182e2ff 100644 --- a/public/language/hr/modules.json +++ b/public/language/hr/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/hr/pages.json b/public/language/hr/pages.json index a86b385b36..d78c1b0908 100644 --- a/public/language/hr/pages.json +++ b/public/language/hr/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email potvrđen!", - "maintenance.text": "%1 Održavanje u toku. Posjetite nas uskoro.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Poruka administratora:", "throttled.text": "%1: Preopterećenje sustava. Pričekajte nekoliko trenutaka." } \ No newline at end of file diff --git a/public/language/hr/tags.json b/public/language/hr/tags.json index 4649c9fa63..4aa7e1d89f 100644 --- a/public/language/hr/tags.json +++ b/public/language/hr/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Unesite oznake, između %1 i %2 znaka.", "enter_tags_here_short": "Unestie oznake ...", "no_tags": "Još nema oznaka.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/hr/themes/harmony.json b/public/language/hr/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/hr/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/hr/themes/persona.json b/public/language/hr/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/hr/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/hr/topic.json b/public/language/hr/topic.json index c2fad59951..aaef591f7b 100644 --- a/public/language/hr/topic.json +++ b/public/language/hr/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Premješteno", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Dupliraj temu", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Obriši temu", "thread_tools.delete-posts": "Obriši objavu", "thread_tools.delete_confirm": "Sigurni ste da želite obrisati ovu temu?", diff --git a/public/language/hr/user.json b/public/language/hr/user.json index a20616afd2..bdb5930a41 100644 --- a/public/language/hr/user.json +++ b/public/language/hr/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/hu/admin/extend/widgets.json b/public/language/hu/admin/extend/widgets.json index aabcd83936..6f787f9483 100644 --- a/public/language/hu/admin/extend/widgets.json +++ b/public/language/hu/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Húzz ide egy konténert vagy adj meg HTML-t.", "show-to-groups": "Megjelenítés csoportoknak", "hide-from-groups": "Elrejtés csoportoknak", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Elrejtés mobilon" } \ No newline at end of file diff --git a/public/language/hu/admin/settings/email.json b/public/language/hu/admin/settings/email.json index 69386c4e7e..680b812396 100644 --- a/public/language/hu/admin/settings/email.json +++ b/public/language/hu/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Kérjük adj meg egy számot, ami azt az órát jelenti, amikor az ütemezett összefoglalókat kiküldi a rendszer (0 az éjfél, 17 a délután 5 óra). Tartsd észben, hogy ez az időpont a szerver idejét veszi figyelembe és előfordulhat, hogy nem egyezik meg a Te gépeden jelzett idővel. A becsült szerver idő jelenleg:
A következő napi összefoglalás tervezett kiküldési ideje ", "notifications.remove-images": "Képek eltávolítása az email értesítésekből", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 692e2affce..fd85b344b4 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -92,6 +92,7 @@ "already-posting": "Már írsz egy bejegyzést", "tag-too-short": "Kérlek hosszabb címkét adj meg. A címke legalább %1 karaktert kell, hogy tartalmazzon", "tag-too-long": "Kérlek rövidebb címkét adj meg. A címkék nem lehetnek hosszabbak %1 karakternél", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Nincs elég címke. A témakörnek legalább %1 címkét kell tartalmaznia", "too-many-tags": "Túl sok címke. A témakör nem tartalmazhat több címkét mint %1", "cant-use-system-tag": "Nem használhatod ezt a rendszer címkét.", diff --git a/public/language/hu/global.json b/public/language/hu/global.json index 6f6521bb18..74bd76c320 100644 --- a/public/language/hu/global.json +++ b/public/language/hu/global.json @@ -6,11 +6,11 @@ "403.message": "Úgy tűnik, hogy rábukkantál egy olyan oldalra, amihez nincs hozzáférésed.", "403.login": "Talán meg kellene próbálnod bejelentkezni?", "404.title": "Nincs találat", - "404.message": "Úgy tűnik, egy nem létező oldalra bukkantál. Vissza a kezdőlapra.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Belső hiba.", "500.message": "Hoppá! Úgy tűnik, valami hiba történt!", "400.title": "Hibás kérelem.", - "400.message": "Úgy tűnik, ez a link hibás, kérjük, ellenőrizze még egyszer, és próbálja újra. Ellenkező esetben térjen vissza a kezdőlapra.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Regisztrálás", "login": "Belépés", "please_log_in": "Jelentkezz be", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Sikeresen beléptél", "save_changes": "Változások mentése", "save": "Mentés", + "cancel": "Cancel", "close": "Bezárás", "pagination": "Lapozás", "pagination.out_of": "%1 / %2", @@ -60,6 +61,7 @@ "posts": "Hozzászólások", "x-posts": "%1 bejegyzés", "x-topics": "%1 témakör", + "x-reputation": "%1 reputation", "best": "Legjobb", "controversial": "Vitatható", "votes": "Szavazatok", @@ -130,7 +132,9 @@ "edited": "Szerkesztett", "disabled": "Letiltva", "select": "Kiválaszt", + "copied": "Copied", "user-search-prompt": "Írj be valamit, hogy felhasználókra keress...", "hidden": "Rejtve", - "sort": "Rendezés" + "sort": "Rendezés", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/hu/groups.json b/public/language/hu/groups.json index 07a37802a6..c9bcaad6bd 100644 --- a/public/language/hu/groups.json +++ b/public/language/hu/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Csoportok", "members": "Felhasználók", "view_group": "Csoport megtekintés", diff --git a/public/language/hu/modules.json b/public/language/hu/modules.json index 632ec511c0..43776a4e14 100644 --- a/public/language/hu/modules.json +++ b/public/language/hu/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Dátum", "composer.schedule-time": "Idő", "composer.cancel-scheduling": "Időzítés elvetése", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Dátum beállítása", "composer.discard-all-drafts": "Dobja el az összes piszkozatot", "composer.no-drafts": "Nincs piszkozatod", diff --git a/public/language/hu/pages.json b/public/language/hu/pages.json index 125f7089a7..3f2ded49b2 100644 --- a/public/language/hu/pages.json +++ b/public/language/hu/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 feltöltései", "account/sessions": "Belépési munkamenetek", "confirm": "E-mail megerősítve", - "maintenance.text": "%1 jelenleg karbantartás alatt van. Kérlek, nézz vissza később!", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Ezenkívúl, az adminisztrátor ezt az üzenetet hagyta:", "throttled.text": "A(z) %1 jelenleg nem érhető el túlterheltség miatt. Kérlek, nézz vissza később." } \ No newline at end of file diff --git a/public/language/hu/tags.json b/public/language/hu/tags.json index db5bc668a5..4f2af1710c 100644 --- a/public/language/hu/tags.json +++ b/public/language/hu/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "%1 és %2 karakterek között itt add meg a címkét.", "enter_tags_here_short": "Címke megadása...", "no_tags": "Még nincsenek címkék.", - "select_tags": "Címkék kiválasztása" + "select_tags": "Címkék kiválasztása", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/hu/themes/harmony.json b/public/language/hu/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/hu/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/hu/themes/persona.json b/public/language/hu/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/hu/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/hu/topic.json b/public/language/hu/topic.json index af5850fff5..03c19bd03d 100644 --- a/public/language/hu/topic.json +++ b/public/language/hu/topic.json @@ -36,6 +36,7 @@ "scheduled": "Időzített", "moved": "Áthelyezett", "moved-from": "Áthelyezés innen %1", + "copy-code": "Copy Code", "copy-ip": "IP-cím másolása", "ban-ip": "IP-cím kitiltása", "view-history": "Előzmények szerkesztése", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Tulaj megváltoztatása", "thread_tools.select_category": "Kategória kiválasztása", "thread_tools.fork": "Témakör szétszedése", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Témakör törlése", "thread_tools.delete-posts": "Hozzászólások törlése", "thread_tools.delete_confirm": "Biztos törölni akarod ezt a témakört?", diff --git a/public/language/hu/user.json b/public/language/hu/user.json index ae10a678bf..01479b9483 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Ez a mező nem kötelező. Nem köteles megadni az e-mail címét, de ellenőrzött e-mail nélkül nem tudja visszaállítani a fiókját, vagy bejelentkezni az e-mail címével.", "emailUpdate.required": "Ez a mező kötelező.", "emailUpdate.change-instructions": "A megadott e-mail címre egy visszaigazoló e-mailt küldünk egy egyedi hivatkozással. A link elérése megerősíti az e-mail cím tulajdonjogát, és az aktív lesz a fiókjában. Bármikor frissítheti e-mailjeit a fiókja oldalán.", - "emailUpdate.password-challenge": "Kérjük, adja meg jelszavát a fiók tulajdonjogának igazolásához." + "emailUpdate.password-challenge": "Kérjük, adja meg jelszavát a fiók tulajdonjogának igazolásához.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/hy/admin/extend/widgets.json b/public/language/hy/admin/extend/widgets.json index 4370b56208..ec3268ae0b 100644 --- a/public/language/hy/admin/extend/widgets.json +++ b/public/language/hy/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Քաշեք և գցեք կոնտեյներ կամ մուտքագրեք HTML այստեղ:", "show-to-groups": "Ցույց տալ խմբերին ", "hide-from-groups": "Թաքցնել խմբերից", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Թաքցնել բջջայինի վրա" } \ No newline at end of file diff --git a/public/language/hy/admin/settings/email.json b/public/language/hy/admin/settings/email.json index a1eb605c6f..44e1277b06 100644 --- a/public/language/hy/admin/settings/email.json +++ b/public/language/hy/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Խնդրում ենք մուտքագրել համարը, որը ներկայացնում է պլանավորված էլփոստի ամփոփագրեր ուղարկելու ժամը (օրինակ՝ 0 կեսգիշերին, 17-ը 17:00-ից): Հիշեք, որ սա ժամն է ըստ սերվերի, և կարող է ճիշտ չհամընկնել ձեր համակարգի ժամացույցի հետ: Սերվերի մոտավոր ժամանակը հետևյալն է. նախատեսվում է ուղարկել հաջորդ օրական ամփոփագիրը", "notifications.remove-images": "Հեռացրեք պատկերները էլփոստի ծանուցումներից", "require-email-address": "Պահանջել նոր օգտատերերից նշել էլփոստի հասցե", - "require-email-address-warning": "Հիմնականում, օգտվողները կարող են հրաժարվել էլփոստի հասցե մուտքագրելուց՝ դաշտը դատարկ թողնելով: Այս ընտրանքը միացնելը նշանակում է, որ նրանք պետք է մուտքագրեն էլփոստի հասցե՝ գրանցումը շարունակելու համար: Այն չի ապահովում, որ օգտվողը մուտքագրի իրական էլփոստի հասցե, ոչ էլ նույնիսկ իր սեփական հասցե:", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Համակարգի ընդհանուր հիշողություն", "include-unverified-emails": "Նամակներ ուղարկեք հասցեատերերին, ովքեր հստակորեն չեն հաստատել իրենց էլ.փոստը", "include-unverified-warning": "Հիմնականում, իրենց հաշվի հետ կապված էլփոստով օգտատերերն արդեն ստուգված են, սակայն կան իրավիճակներ, երբ դա այդպես չէ (օրինակ՝ SSO մուտքեր, մեծահայր օգտատերեր և այլն): Միացնել այս կարգավորումը ձեր սեփական ռիսկով – Չստուգված հասցեներով էլ-նամակներ ուղարկելը կարող է հակասպամի մասին տարածաշրջանային օրենքների խախտում լինել:", diff --git a/public/language/hy/error.json b/public/language/hy/error.json index 3e2f088022..981da1a0f0 100644 --- a/public/language/hy/error.json +++ b/public/language/hy/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Խնդրում ենք մուտքագրել ավելի երկար թեգ: Թեգերը պետք է պարունակեն առնվազն %1 նիշ(ներ)", "tag-too-long": "Խնդրում ենք մուտքագրել ավելի կարճ թեգ: Թեգերը չեն կարող ավելի երկար լինել, քան %1 նիշ(ներ)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Ոչ բավարար թեգեր: Թեմաները պետք է ունենան առնվազն %1 թեգ(ներ)", "too-many-tags": "Չափազանց շատ թեգեր: Թեմաները չեն կարող ունենալ ավելի քան %1 թեգ(ներ)", "cant-use-system-tag": "Դուք չեք կարող օգտագործել այս համակարգի պիտակը:", diff --git a/public/language/hy/global.json b/public/language/hy/global.json index 39440717b1..769d102863 100644 --- a/public/language/hy/global.json +++ b/public/language/hy/global.json @@ -6,11 +6,11 @@ "403.message": "Դուք, կարծես, պատահաբար հայտնվել եք մի էջի վրա, որը դուք մուտք չունեք:", "403.login": "Perhaps you should try logging in?", "404.title": "Գտնված չէ", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Ներքին սխալ.", "500.message": "Վա՜յ Կարծես ինչ-որ բան սխալ ստացվեց։", "400.title": "Վատ խնդրանք.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Գրանցվել", "login": "Մուտք", "please_log_in": "Խնդրում ենք մուտք գործել", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Դուք հաջողությամբ մուտք գործեցիք", "save_changes": "Պահպանել փոփոխությունները", "save": "Պահպանել", + "cancel": "Cancel", "close": "Փակել", "pagination": "Էջադրում", "pagination.out_of": "%1 %2-ից", @@ -60,6 +61,7 @@ "posts": "Գրառումներ", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Լավագույնը", "controversial": "Հակասական", "votes": "Ձայներ ", @@ -130,7 +132,9 @@ "edited": "Խմբագրված", "disabled": "Անջատված", "select": "Ընտրել", + "copied": "Copied", "user-search-prompt": "Մուտքագրեք ինչ-որ բան այստեղ՝ օգտատերեր գտնելու համար...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/hy/groups.json b/public/language/hy/groups.json index 2cd215e75c..f0f313e710 100644 --- a/public/language/hy/groups.json +++ b/public/language/hy/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Խմբեր", "members": "Members", "view_group": "Դիտել խումբը", diff --git a/public/language/hy/modules.json b/public/language/hy/modules.json index 963d85e051..fc11d5f148 100644 --- a/public/language/hy/modules.json +++ b/public/language/hy/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Ամսաթիվ", "composer.schedule-time": "Ժամանակ", "composer.cancel-scheduling": "Չեղարկել ժամանակացույցը", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Սահմանել ամսաթիվը", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/hy/pages.json b/public/language/hy/pages.json index b9656c8113..5b3d919304 100644 --- a/public/language/hy/pages.json +++ b/public/language/hy/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Վերբեռնումներ % 1-ով", "account/sessions": "Մուտք գործելու սեանս", "confirm": "Էլ. փոստը հաստատված է", - "maintenance.text": "%1-ը ներկայումս սպասարկում է անցնում: Խնդրում եմ վերադարձեք մեկ այլ անգամ:", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Ի հավելումն, ադմինիստրատորը լքել է այս հաղորդագրությունը", "throttled.text": "%1-ը ներկայումս անհասանելի է չափազանց ծանրաբեռնվածության պատճառով: Խնդրում ենք վերադարձեք մեկ այլ անգամ:" } \ No newline at end of file diff --git a/public/language/hy/tags.json b/public/language/hy/tags.json index a369fce44d..4c1c35e063 100644 --- a/public/language/hy/tags.json +++ b/public/language/hy/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Մուտքագրեք թեգերն այստեղ՝ %1 և %2 քանակությամբ նշանների միջակայքում", "enter_tags_here_short": "Մուտքագրեք թեգերը...", "no_tags": "Դեռևս թեգեր չկան", - "select_tags": "Ընտրել թեգեր" + "select_tags": "Ընտրել թեգեր", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/hy/themes/harmony.json b/public/language/hy/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/hy/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/hy/themes/persona.json b/public/language/hy/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/hy/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/hy/topic.json b/public/language/hy/topic.json index 09870a693c..e67a806183 100644 --- a/public/language/hy/topic.json +++ b/public/language/hy/topic.json @@ -36,6 +36,7 @@ "scheduled": "Պլանավորված", "moved": "Տեղափոխվել է", "moved-from": "Տեղափոխվել է %1-ից", + "copy-code": "Copy Code", "copy-ip": "Պատճենել IP", "ban-ip": "Արգելել IP-ն", "view-history": "Խմբագրել պատմությունը", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Փոխել սեփականատիրոջը", "thread_tools.select_category": "Ընտրել կատեգորիա", "thread_tools.fork": "Մասնատել թեման", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Ջնջել թեման", "thread_tools.delete-posts": "Ջնջել գրառումները", "thread_tools.delete_confirm": "Վստա՞հ եք, որ ուզում եք ջնջել այս թեման։", diff --git a/public/language/hy/user.json b/public/language/hy/user.json index 526ddd5a92..5fc0b36fd4 100644 --- a/public/language/hy/user.json +++ b/public/language/hy/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Այս դաշտը պարտադիր չէ: Դուք պարտավոր չեք տրամադրել ձեր էլ.փոստի հասցեն, սակայն առանց վավերացված էլ.փոստի դուք չեք կարողանա վերականգնել ձեր հաշիվը կամ մուտք գործել ձեր էլ.", "emailUpdate.required": "Այս դաշտը պարտադիր է:", "emailUpdate.change-instructions": "Մուտքագրված էլ. հասցեին կուղարկվի հաստատման նամակ՝ եզակի հղումով: Այդ հղումը մուտք գործելը կհաստատի էլփոստի հասցեի ձեր սեփականությունը, և այն կակտիվանա ձեր հաշվում: Ցանկացած ժամանակ դուք կարող եք թարմացնել ձեր էլ.փոստը ձեր հաշվի էջից:", - "emailUpdate.password-challenge": "Խնդրում ենք մուտքագրել ձեր գաղտնաբառը՝ հաշվի սեփականության իրավունքը հաստատելու համար:" + "emailUpdate.password-challenge": "Խնդրում ենք մուտքագրել ձեր գաղտնաբառը՝ հաշվի սեփականության իրավունքը հաստատելու համար:", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/id/admin/extend/widgets.json b/public/language/id/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/id/admin/extend/widgets.json +++ b/public/language/id/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/id/admin/settings/email.json b/public/language/id/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/id/admin/settings/email.json +++ b/public/language/id/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/id/error.json b/public/language/id/error.json index e02c20c827..7004b379fe 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/id/global.json b/public/language/id/global.json index d4831fa8ef..dc07b8ef33 100644 --- a/public/language/id/global.json +++ b/public/language/id/global.json @@ -6,11 +6,11 @@ "403.message": "Kamu kelihatan mengakses halaman yang kamu tidak memiliki akses", "403.login": "Perhaps you should try logging in?", "404.title": "Tidak ditemukan", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Kesalahan Internal.", "500.message": "Oops! Terjadi kesalahan", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Daftar", "login": "Login", "please_log_in": "Silakan Log In", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Kamu sudah login", "save_changes": "Menyimpan perubahan", "save": "Save", + "cancel": "Cancel", "close": "Tutup", "pagination": "Halaman", "pagination.out_of": "%1 dari %2", @@ -60,6 +61,7 @@ "posts": "Post", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/id/groups.json b/public/language/id/groups.json index 5f869f352d..5bdeb3b22f 100644 --- a/public/language/id/groups.json +++ b/public/language/id/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grup", "members": "Members", "view_group": "Tampilkan Grup", diff --git a/public/language/id/modules.json b/public/language/id/modules.json index 11440c2731..ebf21e53b0 100644 --- a/public/language/id/modules.json +++ b/public/language/id/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/id/pages.json b/public/language/id/pages.json index 2ff644cde4..352a54bc07 100644 --- a/public/language/id/pages.json +++ b/public/language/id/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "%1 saat ini sedang dalam masa pemeliharaan. Silahkan kembali lain waktu.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Tambahan, Administrator meninggalkan pesan ini:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/id/tags.json b/public/language/id/tags.json index e02411be28..b94b98d201 100644 --- a/public/language/id/tags.json +++ b/public/language/id/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Masukkan tag...", "no_tags": "Belum ada tag.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/id/themes/harmony.json b/public/language/id/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/id/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/id/themes/persona.json b/public/language/id/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/id/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/id/topic.json b/public/language/id/topic.json index 16914d5ead..7b66f986fa 100644 --- a/public/language/id/topic.json +++ b/public/language/id/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Cabangkan Topik", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Hapus Topik", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Kamu yakin ingin menghapus topik ini?", diff --git a/public/language/id/user.json b/public/language/id/user.json index bd81c0ee74..6e4e9647ea 100644 --- a/public/language/id/user.json +++ b/public/language/id/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/it/admin/extend/widgets.json b/public/language/it/admin/extend/widgets.json index cc4cb7c138..adfbf8154f 100644 --- a/public/language/it/admin/extend/widgets.json +++ b/public/language/it/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Trascina un contenitore o inserisci l'html quì.", "show-to-groups": "Mostra i gruppi", "hide-from-groups": "Nascondi dai gruppi", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Nascondi su mobile" } \ No newline at end of file diff --git a/public/language/it/admin/settings/email.json b/public/language/it/admin/settings/email.json index adbca929b5..a4802c787d 100644 --- a/public/language/it/admin/settings/email.json +++ b/public/language/it/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Rimuovi le immagini dalle notifiche email", "require-email-address": "Richiedere ai nuovi utenti di specificare un indirizzo email", - "require-email-address-warning": "Per impostazione predefinita, gli utenti possono rinunciare a inserire un indirizzo email lasciando il campo vuoto. Abilitare questa opzione significa che devono inserire un indirizzo email per procedere con la registrazione. Non assicura che l'utente inserisca un indirizzo email reale, e nemmeno un indirizzo che possiede.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Invia email di convalida quando un'email viene aggiunta o modificata", "include-unverified-emails": "Invia email a destinatari che non hanno confermato esplicitamente le loro email", "include-unverified-warning": "Per impostazione predefinita, gli utenti con email associate al loro account sono già stati verificati, ma ci sono situazioni in cui ciò non è vero (ad esempio accessi SSO, vecchi utenti, ecc.). Abilita questa impostazione a tuo rischio e pericolo – l'invio di email a indirizzi non verificati può essere una violazione delle leggi regionali anti-spam.", diff --git a/public/language/it/error.json b/public/language/it/error.json index 443f487129..42252cbf0e 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -92,6 +92,7 @@ "already-posting": "Stai già postando", "tag-too-short": "Inserisci un tag più lungo. I tag devono contenere almeno %1 caratteri.", "tag-too-long": "Per favore inserisci un tag più corto. I tags non dovrebbero essere più lunghi di %1 caratteri", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Tag non sufficienti. Le discussioni devono avere almeno %1 Tag", "too-many-tags": "Troppi Tag. Le discussioni non possono avere più di %1 Tag", "cant-use-system-tag": "Non puoi usare questo tag di sistema.", diff --git a/public/language/it/global.json b/public/language/it/global.json index 9497236c0b..a3e436b7a1 100644 --- a/public/language/it/global.json +++ b/public/language/it/global.json @@ -6,11 +6,11 @@ "403.message": "Sembra tu sia arrivato ad una pagina a cui non hai accesso.", "403.login": "Forse dovresti provare ad accedere?", "404.title": "Non Trovato", - "404.message": "Sembra che tu sia incappato in una pagina che non esiste. Torna all'pagina iniziale.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Errore interno.", "500.message": "Oops! Qualcosa non funziona come si deve!", "400.title": "Richiesta non valida.", - "400.message": "Sembra che questo collegamento non sia corretto, ricontrolla e riprova. Altrimenti, torna alla pagina iniziale.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrati", "login": "Accedi", "please_log_in": "Per favore Accedi", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Accesso effettuato con successo", "save_changes": "Salva Modifiche", "save": "Salva", + "cancel": "Annulla", "close": "Chiudi", "pagination": "Impaginazione", "pagination.out_of": "%1 di %2", @@ -60,6 +61,7 @@ "posts": "Post", "x-posts": "%1 post", "x-topics": "%1 discussioni", + "x-reputation": "%1 reputazione", "best": "Migliore", "controversial": "Controverso", "votes": "Votazioni", @@ -130,7 +132,9 @@ "edited": "Modificato", "disabled": "Disabilitato", "select": "Seleziona", + "copied": "Copiato", "user-search-prompt": "Scrivi qui per avviare la ricerca utenti", "hidden": "Nascosto", - "sort": "Ordinamento" + "sort": "Ordinamento", + "actions": "Azioni" } \ No newline at end of file diff --git a/public/language/it/groups.json b/public/language/it/groups.json index 5058166b9e..a7ca3f5dd7 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Gruppi", "members": "Membri", "view_group": "Vedi Gruppo", diff --git a/public/language/it/modules.json b/public/language/it/modules.json index a067732ab0..8813620f0c 100644 --- a/public/language/it/modules.json +++ b/public/language/it/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Data", "composer.schedule-time": "Orario", "composer.cancel-scheduling": "Annulla pianificazione", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Imposta data", "composer.discard-all-drafts": "Scarta tutte le bozze", "composer.no-drafts": "Non hai bozze", diff --git a/public/language/it/pages.json b/public/language/it/pages.json index 1f067bad7e..400cd89ba7 100644 --- a/public/language/it/pages.json +++ b/public/language/it/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Inviati da %1", "account/sessions": "Sessioni di accesso", "confirm": "Email Confermata", - "maintenance.text": "%1 è attualmente in manutenzione. Per favore ritorna più tardi.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Inoltre, l'amministratore ha lasciato questo messaggio:", "throttled.text": "%1 non è al momento disponibile a causa di un carico eccessivo. Per favore ritorna più tardi." } \ No newline at end of file diff --git a/public/language/it/tags.json b/public/language/it/tags.json index de77276a1f..e7a01422af 100644 --- a/public/language/it/tags.json +++ b/public/language/it/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Inserisci qui i tag, tra %1 e %2 caratteri ciascuno.", "enter_tags_here_short": "Inserisci i tag...", "no_tags": "Non ci sono ancora tag.", - "select_tags": "Seleziona tag" + "select_tags": "Seleziona tag", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/it/themes/harmony.json b/public/language/it/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/it/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/it/themes/persona.json b/public/language/it/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/it/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/it/topic.json b/public/language/it/topic.json index 1ebc8c71bd..9c91cb0b1e 100644 --- a/public/language/it/topic.json +++ b/public/language/it/topic.json @@ -36,6 +36,7 @@ "scheduled": "Pianificato", "moved": "Spostato", "moved-from": "Spostato da %1", + "copy-code": "Copia codice", "copy-ip": "Copia indirizzo IP", "ban-ip": "Banna indirizzo IP", "view-history": "Modifica storico", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Cambia proprietario", "thread_tools.select_category": "Seleziona Categoria", "thread_tools.fork": "Dividi Discussione", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Elimina Discussione", "thread_tools.delete-posts": "Elimina Post", "thread_tools.delete_confirm": "Sei sicuro di voler eliminare questa discussione?", diff --git a/public/language/it/user.json b/public/language/it/user.json index b2e09c4fbf..0581635b98 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Questo campo è facoltativo. Non sei obbligato a fornire il tuo indirizzo email, ma senza un'email convalidata non sarai in grado di recuperare il tuo account o di accedere con la tua email.", "emailUpdate.required": "Questo campo è obbligatorio.", "emailUpdate.change-instructions": "Un'email di conferma sarà inviata all'indirizzo email inserito con un link unico. Accedendo a quel link confermerai la tua proprietà dell'indirizzo email e questo diventerà attivo sul tuo account. In qualsiasi momento, sei in grado di aggiornare la tua email in archivio dalla pagina del tuo account.", - "emailUpdate.password-challenge": "Inserisci la tua password per verificare la proprietà dell'account." + "emailUpdate.password-challenge": "Inserisci la tua password per verificare la proprietà dell'account.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/ja/admin/extend/widgets.json b/public/language/ja/admin/extend/widgets.json index 121fd495a0..c98f530b53 100644 --- a/public/language/ja/admin/extend/widgets.json +++ b/public/language/ja/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/ja/admin/settings/email.json b/public/language/ja/admin/settings/email.json index c08a7faccb..bb9284112e 100644 --- a/public/language/ja/admin/settings/email.json +++ b/public/language/ja/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "スケジュールされたメールのダイジェストを送信する時間を表す数字を入力してください(深夜は0、午後5:00は17)これはサーバー自体に基づく時間であり、システムの時計と正確に一致しない場合があります。
次の日のダイジェストは", "notifications.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 731ffa5ccf..4aed9dbf33 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "%1文字(s)以上でタグを入力してください。", "tag-too-long": "%1文字(s)以内でタグを入力してください。", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "タグが足りません。スレッドはせめて%1のタグ(s)が必要です。", "too-many-tags": "タグが多すぎます。スレッドは%1のタグ(s)以上が許されません。", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/ja/global.json b/public/language/ja/global.json index fa5bc1e160..9a960c2e4d 100644 --- a/public/language/ja/global.json +++ b/public/language/ja/global.json @@ -6,11 +6,11 @@ "403.message": "アクセス権限が無いページを閲覧しようとしています。", "403.login": "Perhaps you should try logging in?", "404.title": "見つかりません", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "内部エラー", "500.message": "何か問題が発生しているようです。", "400.title": "無効なリクエスト", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "登録", "login": "ログイン", "please_log_in": "ログインください", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "ログインできました", "save_changes": "保存する", "save": "保存", + "cancel": "Cancel", "close": "閉じる", "pagination": "ページ", "pagination.out_of": "%2件中%1件目", @@ -60,6 +61,7 @@ "posts": "投稿", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "ベスト", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "編集されました", "disabled": "無効", "select": "選択", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/ja/groups.json b/public/language/ja/groups.json index 422119f336..b496140df3 100644 --- a/public/language/ja/groups.json +++ b/public/language/ja/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "グループ", "members": "Members", "view_group": "グループを閲覧", diff --git a/public/language/ja/modules.json b/public/language/ja/modules.json index b247130d91..1c4bc0633e 100644 --- a/public/language/ja/modules.json +++ b/public/language/ja/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/ja/pages.json b/public/language/ja/pages.json index 9212375d92..4d42dc1698 100644 --- a/public/language/ja/pages.json +++ b/public/language/ja/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Eメールが確認されました", - "maintenance.text": "%1 は現在メンテナンスを実行中です。お手数ですが、時間をずらしてお越しください。", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "さらに、管理者はこちらのメッセージを残しました:", "throttled.text": "%1は現在、過負荷のため使用できません。お手数ですが、時間をずらしてお越しください。" } \ No newline at end of file diff --git a/public/language/ja/tags.json b/public/language/ja/tags.json index 8d9dfe3bf5..54f0762f2c 100644 --- a/public/language/ja/tags.json +++ b/public/language/ja/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "ここにタグを入力します。一つのタグが%1から%2までの文字にして下さい。", "enter_tags_here_short": "タグを入れます…", "no_tags": "タグがありません", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/ja/themes/harmony.json b/public/language/ja/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/ja/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/ja/themes/persona.json b/public/language/ja/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/ja/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/ja/topic.json b/public/language/ja/topic.json index 8430c2f0c8..d227c65724 100644 --- a/public/language/ja/topic.json +++ b/public/language/ja/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "移動しました", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "IPをコピー", "ban-ip": "IPをBan", "view-history": "履歴を編集", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "カテゴリを選択", "thread_tools.fork": "スレッドをフォーク", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "スレッドを削除", "thread_tools.delete-posts": "投稿を削除します", "thread_tools.delete_confirm": "本当にこの投稿を削除しますか?", diff --git a/public/language/ja/user.json b/public/language/ja/user.json index d8f3263af7..19a2d47c2a 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/ko/admin/extend/widgets.json b/public/language/ko/admin/extend/widgets.json index 61dc8383f9..c8e512ed5b 100644 --- a/public/language/ko/admin/extend/widgets.json +++ b/public/language/ko/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "컨테이너를 드래그&드롭하거나 HTML을 입력하세요.", "show-to-groups": "해당 그룹에 표시", "hide-from-groups": "해당 그룹에 숨김", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "모바일에서 숨김" } \ No newline at end of file diff --git a/public/language/ko/admin/settings/email.json b/public/language/ko/admin/settings/email.json index 9c90b4b582..1c1d450bdd 100644 --- a/public/language/ko/admin/settings/email.json +++ b/public/language/ko/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "정기 포럼 메일을 보낼 시간을 입력해주세요. (예: 0은 자정, 17은 오후 5시 입니다. 이 시간은 서버 시간 기준이며, 사용자의 시스템 시간과 일치하지 않을 수 있습니다.
서버 시간은 입니다.
다음 정기 포럼 메일은 에 발송 예정입니다.", "notifications.remove-images": "이메일 알림에서 이미지 제거", "require-email-address": "신규 사용자에게 이메일 주소 설정 요구", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "전자 메일을 명시적으로 확인하지 않은 수신자에게 전자 메일 보내기", "include-unverified-warning": "기본적으로 계정과 연결된 전자 메일이 있는 사용자는 이미 확인되었지만 그렇지 않은 경우가 있습니다(예: SSO 로그인, 약관으로부터 제외된 사용자 등). 사용자가 위험을 감수하고 이 설정을 사용하도록 설정합니다. – 확인되지 않은 주소로 이메일을 보내는 것은 지역별 스팸 방지법을 위반하는 것일 수 있습니다.", diff --git a/public/language/ko/error.json b/public/language/ko/error.json index 2f36eb91c9..3519cbf7d2 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "태그가 너무 짧습니다. 태그는 최소 %1자 이상이어야 합니다.", "tag-too-long": "태그가 너무 깁니다. 태그는 최대 %1자 이내로 사용 가능합니다.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "태그가 없거나 부족합니다. 게시물은 %1개 이상의 태그를 사용해야 합니다.", "too-many-tags": "태그가 너무 많습니다. 게시물은 %1개 이하의 태그를 사용할 수 있습니다.", "cant-use-system-tag": "관리자용 태그를 사용하실 수 없습니다.", diff --git a/public/language/ko/global.json b/public/language/ko/global.json index de14a61d47..1bdd7529b6 100644 --- a/public/language/ko/global.json +++ b/public/language/ko/global.json @@ -6,11 +6,11 @@ "403.message": "권한이 없는 페이지에 접속을 시도하였습니다.", "403.login": "Perhaps you should try logging in?", "404.title": "페이지를 찾을 수 없습니다.", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "내부 오류", "500.message": "이런! 알 수 없는 오류가 발생했습니다!", "400.title": "잘못된 요청", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "회원가입", "login": "로그인", "please_log_in": "로그인 해주세요.", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "성공적으로 로그인했습니다.", "save_changes": "변경사항 저장", "save": "저장", + "cancel": "Cancel", "close": "닫기", "pagination": "페이지", "pagination.out_of": "현재: %1 / 전체: %2", @@ -60,6 +61,7 @@ "posts": "포스트", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "베스트", "controversial": "Controversial", "votes": "투표", @@ -130,7 +132,9 @@ "edited": "수정되었습니다.", "disabled": "비활성화", "select": "선택", + "copied": "Copied", "user-search-prompt": "사용자를 찾기 위해 여기에 검색어를 입력하십시오...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/ko/groups.json b/public/language/ko/groups.json index b171be9315..61f2f5f164 100644 --- a/public/language/ko/groups.json +++ b/public/language/ko/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "그룹", "members": "Members", "view_group": "그룹 보기", diff --git a/public/language/ko/modules.json b/public/language/ko/modules.json index b5eccc4e41..7b7e05732b 100644 --- a/public/language/ko/modules.json +++ b/public/language/ko/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "날짜", "composer.schedule-time": "시간", "composer.cancel-scheduling": "예약 취소", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "날짜 설정", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/ko/pages.json b/public/language/ko/pages.json index 899a3c78e2..99f1d8e34b 100644 --- a/public/language/ko/pages.json +++ b/public/language/ko/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1님의 업로드", "account/sessions": "로그인 세션", "confirm": "이메일 인증 완료", - "maintenance.text": "%1은(는) 현재 점검 중입니다. 나중에 다시 방문해주세요.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "관리자 메시지:", "throttled.text": "과도한 서버 부하로 %1을(를) 불러올 수 없습니다. 잠시 후에 다시 시도해주세요." } \ No newline at end of file diff --git a/public/language/ko/tags.json b/public/language/ko/tags.json index 74aa65c1e7..2bd736487d 100644 --- a/public/language/ko/tags.json +++ b/public/language/ko/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "%1에서 %2자 안으로 태그를 입력하세요.", "enter_tags_here_short": "태그 입력...", "no_tags": "아직 태그가 달리지 않았습니다.", - "select_tags": "태그 선택" + "select_tags": "태그 선택", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/ko/themes/harmony.json b/public/language/ko/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/ko/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/ko/themes/persona.json b/public/language/ko/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/ko/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/ko/topic.json b/public/language/ko/topic.json index b5e25326f8..927b6656f2 100644 --- a/public/language/ko/topic.json +++ b/public/language/ko/topic.json @@ -36,6 +36,7 @@ "scheduled": "예약됨", "moved": "이동된 게시물", "moved-from": "%1부터 상단 고정 해제", + "copy-code": "Copy Code", "copy-ip": "IP 복사", "ban-ip": "IP 차단", "view-history": "편집 기록", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "작성자 변경", "thread_tools.select_category": "카테고리 선택", "thread_tools.fork": "화제 분리", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "화제 삭제", "thread_tools.delete-posts": "포스트 삭제", "thread_tools.delete_confirm": "이 화제를 삭제하시겠습니까?", diff --git a/public/language/ko/user.json b/public/language/ko/user.json index eb63a63956..b215d985fb 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "입력하신 이메일 주소로 가입 인증 메일이 발송되었습니다. 메일 내의 링크에 접속할 경우 메일 소유자를 확인하고 계정이 활성화됩니다. 활성화 후에도 계정 페이지에서 이메일 주소를 변경할 수 있습니다.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/lt/admin/extend/widgets.json b/public/language/lt/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/lt/admin/extend/widgets.json +++ b/public/language/lt/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/lt/admin/settings/email.json b/public/language/lt/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/lt/admin/settings/email.json +++ b/public/language/lt/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 6bde6e9cc9..46b5fb9596 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Prašome įvesti ilgesnę žymą. Žyma turi sudaryti mažiausiai %1 simboli(us)", "tag-too-long": "Prašome įvesti trumpesnę žymą. Žyma turi būti ne ilgesni negu %1 simboli(us)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Neužteka žymių. Temos turi turėti mažiausiai %1 žyme(s)", "too-many-tags": "Per daug žymių. Temos turi turėti daugiausiai %1 žyme(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/lt/global.json b/public/language/lt/global.json index acf9baae99..84a0d9bf55 100644 --- a/public/language/lt/global.json +++ b/public/language/lt/global.json @@ -6,11 +6,11 @@ "403.message": "Matosi užklupai į ta puslapį kur neturi tam tikrų teisių jį peržiūrėti", "403.login": "Perhaps you should try logging in?", "404.title": "Nerasta", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Oops! Atrodo, kad kažkas nutiko!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registruotis", "login": "Prisijungti", "please_log_in": "Prašome prisijungti", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Jūs sėkmingai prisijungėte", "save_changes": "Išsaugoti pakeitimus", "save": "Save", + "cancel": "Cancel", "close": "Uždaryti", "pagination": "Numeracija", "pagination.out_of": "%1 iš %2", @@ -60,6 +61,7 @@ "posts": "Pranešimai", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/lt/groups.json b/public/language/lt/groups.json index 194e5bd8a6..180cb4c50f 100644 --- a/public/language/lt/groups.json +++ b/public/language/lt/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupės", "members": "Members", "view_group": "Grupės peržiūra", diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index 5c4c0ca651..2b013d8307 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/lt/pages.json b/public/language/lt/pages.json index 71b054808a..b84f5fd447 100644 --- a/public/language/lt/pages.json +++ b/public/language/lt/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 Įkėlimai", "account/sessions": "Login Sessions", "confirm": "El. paštas patvirtintas", - "maintenance.text": "%1 dabar atnaujinimo darbuose. Prašome grįžti vėliau", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Be to, administratorius paliko šį pranešimą:", "throttled.text": "%1 dabar nepasiekiamas dėl per didelės apkrovos. Prašome sugrįžti vėliau." } \ No newline at end of file diff --git a/public/language/lt/tags.json b/public/language/lt/tags.json index 0fb63862f9..274fad70bc 100644 --- a/public/language/lt/tags.json +++ b/public/language/lt/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Įveskite žymas čia, tarp %1 ir %2 simbolių kiekvienam", "enter_tags_here_short": "Įveskite žymas...", "no_tags": "Žymų kolkas nėra.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/lt/themes/harmony.json b/public/language/lt/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/lt/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/lt/themes/persona.json b/public/language/lt/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/lt/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index 47d52fee70..05b6c3cf11 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Perkelta", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Blokuoti IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Išskaidyti temą", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Ištrinti temą", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Ar jūs tikrai norite ištrinti šią temą?", diff --git a/public/language/lt/user.json b/public/language/lt/user.json index bc9f4d282a..98439ae385 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/lv/admin/extend/widgets.json b/public/language/lv/admin/extend/widgets.json index 601a7a42c0..bc853d53ed 100644 --- a/public/language/lv/admin/extend/widgets.json +++ b/public/language/lv/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/lv/admin/settings/email.json b/public/language/lv/admin/settings/email.json index 81815fc6af..15e25c8d4b 100644 --- a/public/language/lv/admin/settings/email.json +++ b/public/language/lv/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/lv/error.json b/public/language/lv/error.json index 4d0dbf67f8..8fe730c89c 100644 --- a/public/language/lv/error.json +++ b/public/language/lv/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Lūdzu, ievadi garāku birku. Birkā jāsatur vismaz %1 rakstzīmes.", "tag-too-long": "Lūdzu, ievadi īsāku birku. Birkā nevar būt vairāk kā %1 rakstzīmes.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Nav pietiekami daudz birku. Tematiem jābūt vismaz %1 birkām", "too-many-tags": "Pārāk daudz birku. Tematiem nevar būt vairāk kā %1 birkas", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/lv/global.json b/public/language/lv/global.json index d0e0b03a92..fddd0e75d6 100644 --- a/public/language/lv/global.json +++ b/public/language/lv/global.json @@ -6,11 +6,11 @@ "403.message": "Šķiet, ka esi uznācis uz lapu, kurai Tev nav piekļuves.", "403.login": "Perhaps you should try logging in?", "404.title": "Nav atrasts", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Iekšēja kļūda.", "500.message": "Hmm... Izskatās, ka kaut kas noticis nepareizi!", "400.title": "Nepareizs pieprasījums.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Reģistrēties", "login": "Ielogoties", "please_log_in": "Lūdzu, ielogoties", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Tu esi veiksmīgi ielogojies", "save_changes": "Saglabāt izmaiņas", "save": "Saglabāt", + "cancel": "Cancel", "close": "Aizvērt", "pagination": "Dalīšana pa lapām", "pagination.out_of": "%1 no %2", @@ -60,6 +61,7 @@ "posts": "Raksti", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Labākie", "controversial": "Controversial", "votes": "Balsojumi", @@ -130,7 +132,9 @@ "edited": "Rediģētie", "disabled": "Atspējotie", "select": "Atlasīt", + "copied": "Copied", "user-search-prompt": "Ieraksti kaut ko šeit, lai meklētu lietotājus...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/lv/groups.json b/public/language/lv/groups.json index 7690cfda5f..0c6257eb2c 100644 --- a/public/language/lv/groups.json +++ b/public/language/lv/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupas", "members": "Members", "view_group": "Skatīt grupas", diff --git a/public/language/lv/modules.json b/public/language/lv/modules.json index f91d57bb86..76badfa4d8 100644 --- a/public/language/lv/modules.json +++ b/public/language/lv/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/lv/pages.json b/public/language/lv/pages.json index 560e102b9a..14703b47e5 100644 --- a/public/language/lv/pages.json +++ b/public/language/lv/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 augšupielādes", "account/sessions": "Aktīvās sesijas", "confirm": "E-pasta adrese apstiprināta", - "maintenance.text": "%1 šobrīd notiek apkope. Lūdzu, atgriezies vēlāk.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Turklāt administrators ir atstājis šo paziņojumu:", "throttled.text": "%1 šobrīd nav pieejams pārmērīgas slodzes dēļ. Lūdzu, atgriezies vēlāk." } \ No newline at end of file diff --git a/public/language/lv/tags.json b/public/language/lv/tags.json index d9b9b9ce0f..3325895dc0 100644 --- a/public/language/lv/tags.json +++ b/public/language/lv/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Ievadīt birkas, katrai starp %1 un %2 rakstzīmēm", "enter_tags_here_short": "Ievadīt birkas...", "no_tags": "Nav birku.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/lv/themes/harmony.json b/public/language/lv/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/lv/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/lv/themes/persona.json b/public/language/lv/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/lv/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/lv/topic.json b/public/language/lv/topic.json index 55894a2bfa..4c35a5e4bc 100644 --- a/public/language/lv/topic.json +++ b/public/language/lv/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Pārvietots", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopēt IP adresi", "ban-ip": "Bloķēt IP adresi", "view-history": "Rediģēšanas vēsture", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Atlasīt kategoriju", "thread_tools.fork": "Nozarot tematu", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Izdzēst tematu", "thread_tools.delete-posts": "Izdzēst rakstus", "thread_tools.delete_confirm": "Vai tiešām vēlies izdzēst šo tematu?", diff --git a/public/language/lv/user.json b/public/language/lv/user.json index 7d571082d1..d9d0d89465 100644 --- a/public/language/lv/user.json +++ b/public/language/lv/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/ms/admin/extend/widgets.json b/public/language/ms/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/ms/admin/extend/widgets.json +++ b/public/language/ms/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/ms/admin/settings/email.json b/public/language/ms/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/ms/admin/settings/email.json +++ b/public/language/ms/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 088b229f7f..57fed058d6 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Sila masukkan tag yang lebih panjang. Tag mesti mengandungi sekurang-kurangnya %1 aksara()", "tag-too-long": "Sila masukkan tag yang lebih pendek. Tag mesti mengandungi tidak lebih %1 aksara()", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Tag tidak mencukupi. Topik memerlukan sekurang-kurangnya %1 tag()", "too-many-tags": "Tag terlalu banyak. Topik tidak boleh lebih %1 tag()", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/ms/global.json b/public/language/ms/global.json index 17d072b672..b44c12380b 100644 --- a/public/language/ms/global.json +++ b/public/language/ms/global.json @@ -6,11 +6,11 @@ "403.message": "Anda tidak mempunyai kebenaran untuk melihat halaman ini", "403.login": "Perhaps you should try logging in?", "404.title": "tidak dijumpai", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Oops! Macam ada yang tidak kena", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Daftar", "login": "Log Masuk", "please_log_in": "Sila log masuk", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Anda telah berjaya log masuk", "save_changes": "Simpan perubahan", "save": "Save", + "cancel": "Cancel", "close": "Tutup", "pagination": "Mukasurat", "pagination.out_of": "%1 daripada %2", @@ -60,6 +61,7 @@ "posts": "Kiriman", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/ms/groups.json b/public/language/ms/groups.json index ac54711805..99fe306714 100644 --- a/public/language/ms/groups.json +++ b/public/language/ms/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Kumpulan", "members": "Members", "view_group": "Lihat Kumpulan", diff --git a/public/language/ms/modules.json b/public/language/ms/modules.json index 0c6495796c..0c5bb5e892 100644 --- a/public/language/ms/modules.json +++ b/public/language/ms/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/ms/pages.json b/public/language/ms/pages.json index 4fc735d7d2..a3bd510e38 100644 --- a/public/language/ms/pages.json +++ b/public/language/ms/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Emel Telah Disahkan", - "maintenance.text": "%1 sedang berada dalam mod pembaikpulihan. Sila cuba lagi nanti.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Tambahan, admin meninggalkan mesej ini :", "throttled.text": "%1 tiada buat masa ini kerana permintaan yang berlebihan. Sila datang lagi lain kali." } \ No newline at end of file diff --git a/public/language/ms/tags.json b/public/language/ms/tags.json index 1cb454c2b1..3993bfd445 100644 --- a/public/language/ms/tags.json +++ b/public/language/ms/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Masukkan tag sini, masing-masing antara %1 dan %2 aksara.", "enter_tags_here_short": "Masukkan tag ...", "no_tags": "Belum ada tag.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/ms/themes/harmony.json b/public/language/ms/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/ms/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/ms/themes/persona.json b/public/language/ms/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/ms/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/ms/topic.json b/public/language/ms/topic.json index 2a735e4e98..4a24e7efab 100644 --- a/public/language/ms/topic.json +++ b/public/language/ms/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Fork topik", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Padamkan topik", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Anda yakin untuk padamkan topik ini?", diff --git a/public/language/ms/user.json b/public/language/ms/user.json index ae998fed4e..7ce924fb8a 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/nb/admin/extend/widgets.json b/public/language/nb/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/nb/admin/extend/widgets.json +++ b/public/language/nb/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/nb/admin/settings/email.json b/public/language/nb/admin/settings/email.json index f5aa006956..7c0ae04654 100644 --- a/public/language/nb/admin/settings/email.json +++ b/public/language/nb/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Skriv inn et tall som representerer den timen planlagte e-postsammendrag skal sendes ut (f.eks. 0 for midnatt, 17 for 17:00). Husk at denne tiden forholder seg til serverens tid, og kan avvike fra din systemklokke.
Den omtrentlige servertiden er:
Det neste daglige sammendraget er planlagt utsendt ", "notifications.remove-images": "Remove images from email notifications", "require-email-address": "Krev at nye brukere legger til en e-postadresse", - "require-email-address-warning": "Som standard, kan brukere velge bort å fylle ut e-postadresse ved å la feltet stå tomt. Å skru på dette valget innebærer at de må legge inn en e-postadresse for å kunne fortsette registreringen. Dette sikrer ikke at brukeren vil legge inn en gyldig e-postadresse, heller ikke en e-postadresse de eier.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send bekreftelses-e-post når en e-post legges til eller endres", "include-unverified-emails": "Send e-post til mottakere som ikke eksplisitt har bekreftet e-postadressen sin.", "include-unverified-warning": "Som standard, vil brukere som har e-postadresse knyttet til deres konto allerede være verifisert, men det er noen situasjoner hvor dette ikke er tilfelle (f.eks. SSO-innlogginger, grandfathered users, etc). Skru på denne innstillingen på egen risiko – å sende e-poster til uverifiserte e-postadresser kan være brudd på regionale anti-spam-regler.", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index 3937b1b5ae..c82f0f1065 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Vennligst skriv et lengre emneord. Disse må være på minst %1 tegn", "tag-too-long": "Vennligst skriv et kortere emneord. Disse kan ikke være lengre enn %1 tegn", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Ikke nok emneord. Emner må ha minst %1.", "too-many-tags": "For mange emneord. Emner kan ikke ha flere enn %1.", "cant-use-system-tag": "Du kan ikke bruke dette emneordet", diff --git a/public/language/nb/global.json b/public/language/nb/global.json index 77e4904a95..1e259315a6 100644 --- a/public/language/nb/global.json +++ b/public/language/nb/global.json @@ -6,11 +6,11 @@ "403.message": "Du har funnet en side du ikke har tilgang til.", "403.login": "Perhaps you should try logging in?", "404.title": "Ikke funnet", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Intern feil.", "500.message": "Oops! Ser ut som noe gikk galt!", "400.title": "Ugyldig forespørsel ", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrer", "login": "Logg inn", "please_log_in": "Vennligst logg inn", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Du har blitt logget inn", "save_changes": "Lagre endringer", "save": "Lagre", + "cancel": "Cancel", "close": "Lukk", "pagination": "Paginering", "pagination.out_of": "%1 ut av %2", @@ -60,6 +61,7 @@ "posts": "Innlegg", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Kontroversiell ", "votes": "Stemmer", @@ -130,7 +132,9 @@ "edited": "Redigert", "disabled": "Deaktivert ", "select": "Velg", + "copied": "Copied", "user-search-prompt": "Skriv her for å finne andre brukere...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index f7831d1d91..cc8c479cd4 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupper", "members": "Members", "view_group": "Vis gruppe", diff --git a/public/language/nb/modules.json b/public/language/nb/modules.json index cd05bf2876..a8065d1fa4 100644 --- a/public/language/nb/modules.json +++ b/public/language/nb/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Angitt dato", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/nb/pages.json b/public/language/nb/pages.json index 841021dafb..83c2e67659 100644 --- a/public/language/nb/pages.json +++ b/public/language/nb/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Opplastninger av %1", "account/sessions": "Påloggingsøkter", "confirm": "E-post bekreftet", - "maintenance.text": "%1 er for tiden under vedlikehold. Kom tilbake en annen gang.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "I tillegg har administratoren skrevet denne meldingen:", "throttled.text": "%1 er for øyeblikket ikke tilgjengelig på grunn av overdreven belastning. Kom tilbake en annen gang." } \ No newline at end of file diff --git a/public/language/nb/tags.json b/public/language/nb/tags.json index 28a4ca7cd4..6ee544b319 100644 --- a/public/language/nb/tags.json +++ b/public/language/nb/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Skriv emneord her, mellom %1 og %2 tegn hver.", "enter_tags_here_short": "Skriv emneord...", "no_tags": "Det finnes ingen emneord enda.", - "select_tags": "Velg kode" + "select_tags": "Velg kode", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/nb/themes/harmony.json b/public/language/nb/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/nb/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/nb/themes/persona.json b/public/language/nb/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/nb/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/nb/topic.json b/public/language/nb/topic.json index 0c6c3becda..283d7bbe3c 100644 --- a/public/language/nb/topic.json +++ b/public/language/nb/topic.json @@ -36,6 +36,7 @@ "scheduled": "Planlagt", "moved": "Flyttet", "moved-from": "Flyttet fra %1", + "copy-code": "Copy Code", "copy-ip": "Kopier IP", "ban-ip": "Forby IP", "view-history": "Redigere historie", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Bytt eier", "thread_tools.select_category": "Velg kategori", "thread_tools.fork": "Forgren tråd", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Slett tråd", "thread_tools.delete-posts": "Slett innlegg", "thread_tools.delete_confirm": "Er du sikker på at du vil slette denne tråden?", diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 86a6a56c06..e861fe88d0 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Dette feltet er valgfritt. Du er ikke forpliktet til å oppgi e-postadressen din, men uten en validert e-postadresse vil du ikke kunne gjenopprette kontoen din eller logge på med e-postadressen din.", "emailUpdate.required": "Dette feltet er obligatorisk", "emailUpdate.change-instructions": "En bekreftelses-e-post med en unik lenke vil bli sendt til den angitte e-postadressen. Ved å klikke på lenken, vil du bekrefte at du eier e-postadressen, og den blir aktiv på kontoen din. Du kan når som helst oppdatere e-postadressen på brukerprofilen din.", - "emailUpdate.password-challenge": "Skriv inn passordet ditt for å verifisere eierskap." + "emailUpdate.password-challenge": "Skriv inn passordet ditt for å verifisere eierskap.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/nl/admin/extend/widgets.json b/public/language/nl/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/nl/admin/extend/widgets.json +++ b/public/language/nl/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/nl/admin/settings/email.json b/public/language/nl/admin/settings/email.json index afbfe81aa2..bed84b1b2b 100644 --- a/public/language/nl/admin/settings/email.json +++ b/public/language/nl/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 043ac11612..4d9ad3586f 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Geef een tag op die uit meer tekens bestaat. Tags dienen uit minimaal %1 teken(s) te bestaan.", "tag-too-long": "Geef een kortere tag op. Tags mogen niet langer dan %1 teken(s) zijn", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Niet genoeg labels. Onderwerp moeten tenminste %1 label(s) hebben", "too-many-tags": "Teveel labels. Onderwerpen kunnen niet meer dan %1 label(s) hebben", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/nl/global.json b/public/language/nl/global.json index a9b9dd10f2..3fb5e86257 100644 --- a/public/language/nl/global.json +++ b/public/language/nl/global.json @@ -6,11 +6,11 @@ "403.message": "Het lijkt erop dat je op een pagina beland bent waar je geen toegang tot hebt.", "403.login": "Perhaps you should try logging in?", "404.title": "Niet gevonden", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Interne fout", "500.message": "Oeps! Ziet er naar uit dat iets fout ging!", "400.title": "Foutief verzoek", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registeren", "login": "Login", "please_log_in": "Aanmelden", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Aanmelden succesvol", "save_changes": "Wijzigingen opslaan", "save": "Opslaan", + "cancel": "Cancel", "close": "Sluiten", "pagination": "Paginering", "pagination.out_of": "%1 van %2", @@ -60,6 +61,7 @@ "posts": "Berichten", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Beste", "controversial": "Controversial", "votes": "Stemmen", @@ -130,7 +132,9 @@ "edited": "Bewerkt", "disabled": "Uitgeschakeld", "select": "Selecteer", + "copied": "Copied", "user-search-prompt": "Typ hier om gebruikers te vinden...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index 0b203e9efb..0db8786c41 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Groepen", "members": "Members", "view_group": "Bekijk groep", diff --git a/public/language/nl/modules.json b/public/language/nl/modules.json index 98f3faaff8..3b20f7faea 100644 --- a/public/language/nl/modules.json +++ b/public/language/nl/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/nl/pages.json b/public/language/nl/pages.json index 611a588dc6..5291a9967a 100644 --- a/public/language/nl/pages.json +++ b/public/language/nl/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads door %1", "account/sessions": "Login sessies", "confirm": "Email Bevestigd", - "maintenance.text": "%1 is momenteel in onderhoud. Excuses voor het ongemak en probeer het later nog eens.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Daarnaast heeft de beheerder het volgende bericht achtergelaten:", "throttled.text": "%1 is momenteel niet beschikbaar door overmatig gebruikt. Excuses voor het ongemak en probeer het later nog eens." } \ No newline at end of file diff --git a/public/language/nl/tags.json b/public/language/nl/tags.json index 4503b07e3b..5c9ad6a113 100644 --- a/public/language/nl/tags.json +++ b/public/language/nl/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Voeg hier tags toe, tussen de %1 en %2 tekens per stuk.", "enter_tags_here_short": "Voer tags in...", "no_tags": "Er zijn nog geen tags geplaatst", - "select_tags": "Selecteer tags" + "select_tags": "Selecteer tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/nl/themes/harmony.json b/public/language/nl/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/nl/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/nl/themes/persona.json b/public/language/nl/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/nl/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json index 1f4a6c2e77..f793068bee 100644 --- a/public/language/nl/topic.json +++ b/public/language/nl/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Verplaatst", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopieer IP", "ban-ip": "Verban IP", "view-history": "Revisie geschiedenis", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Wijzig eigenaar", "thread_tools.select_category": "Selecteer categorie", "thread_tools.fork": "Onderwerp afsplitsen", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Onderwerp verwijderen", "thread_tools.delete-posts": "Verwijder berichten", "thread_tools.delete_confirm": "Weet u het zeker dat u dit onderwerp wilt verwijderen?", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 01d829026e..6f0abe3b93 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/pl/admin/extend/widgets.json b/public/language/pl/admin/extend/widgets.json index a73bd07df9..670b0a9ec7 100644 --- a/public/language/pl/admin/extend/widgets.json +++ b/public/language/pl/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Przeciągnij i upuść kontener lub wpisz tutaj HTML.", "show-to-groups": "Pokaż dla grup", "hide-from-groups": "Ukryj dla grup", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Ukraj na urządzeniach mobilnych" } \ 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 30737f25aa..623e56464f 100644 --- a/public/language/pl/admin/settings/email.json +++ b/public/language/pl/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/pl/error.json b/public/language/pl/error.json index c6e48bd249..9ad2b1eefc 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Wprowadź dłuższy tag. Tagi muszą mieć przynajmniej %1 znak(-ów)", "tag-too-long": "Wprowadź krótszy tag. Tagi nie mogą mieć więcej niż %1 znak(-ów)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Zbyt mało tagów. Tematy muszą posiadać przynajmniej %1 tag(ów)", "too-many-tags": "Zbyt wiele tagów. Tematy nie mogą posiadać więcej niż %1 tag(ów)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/pl/global.json b/public/language/pl/global.json index 255812d0fa..6a75699be9 100644 --- a/public/language/pl/global.json +++ b/public/language/pl/global.json @@ -6,11 +6,11 @@ "403.message": "Wygląda na to, że trafiłeś na stronę, do której nie masz dostępu.", "403.login": "Perhaps you should try logging in?", "404.title": "Nie znaleziono", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Wewnętrzny błąd.", "500.message": "Ups! Coś poszło nie tak.", "400.title": "Złe zapytanie.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Zarejestruj się", "login": "Zaloguj się", "please_log_in": "Proszę się zalogować", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Logowanie powiodło się.", "save_changes": "Zapisz zmiany", "save": "Zapisz", + "cancel": "Cancel", "close": "Zamknij", "pagination": "Numerowanie stron", "pagination.out_of": "%1 z %2", @@ -60,6 +61,7 @@ "posts": "Posty", "x-posts": "%1 postów", "x-topics": "%1 tematów", + "x-reputation": "%1 reputation", "best": "Najlepsze", "controversial": "Kontrowersyjne", "votes": "Głosy", @@ -130,7 +132,9 @@ "edited": "Edytowany", "disabled": "Wyłączony", "select": "Wybierz", + "copied": "Copied", "user-search-prompt": "Aby znaleźć użytkowników, wpisz tutaj...", "hidden": "Ukryty", - "sort": "Sortuj" + "sort": "Sortuj", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json index e724bc4fb6..119c86d34a 100644 --- a/public/language/pl/groups.json +++ b/public/language/pl/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupy", "members": "Użytkownicy", "view_group": "Obejrzyj grupę", diff --git a/public/language/pl/modules.json b/public/language/pl/modules.json index 4b4ee9e4e6..d78b4b67be 100644 --- a/public/language/pl/modules.json +++ b/public/language/pl/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Data", "composer.schedule-time": "Czas", "composer.cancel-scheduling": "Anuluj planowanie", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Ustaw datę", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/pl/pages.json b/public/language/pl/pages.json index 6eb7116f25..4f2adad2f4 100644 --- a/public/language/pl/pages.json +++ b/public/language/pl/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Pliki przesłane przez %1", "account/sessions": "Sesje logowania", "confirm": "E-mail potwierdzony", - "maintenance.text": "Obecnie trwają prace konserwacyjne nad %1. Wróć później.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Dodatkowo administrator zostawił wiadomość:", "throttled.text": "%1 jest niedostępny z powodu przeciążenia. Wróć później." } \ No newline at end of file diff --git a/public/language/pl/tags.json b/public/language/pl/tags.json index 1f3a3d8541..4dd84e3c6a 100644 --- a/public/language/pl/tags.json +++ b/public/language/pl/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Wpisz tagi tutaj, każdy o długości od %1 do %2 znaków.", "enter_tags_here_short": "Wpisz tagi...", "no_tags": "Jeszcze nie ma tagów.", - "select_tags": "Wybierz tagi" + "select_tags": "Wybierz tagi", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/pl/themes/harmony.json b/public/language/pl/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/pl/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/pl/themes/persona.json b/public/language/pl/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/pl/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/pl/topic.json b/public/language/pl/topic.json index dc66a3985e..473f0176a8 100644 --- a/public/language/pl/topic.json +++ b/public/language/pl/topic.json @@ -36,6 +36,7 @@ "scheduled": "Zaplanowany", "moved": "Przeniesiony", "moved-from": "Przeniesiony z %1", + "copy-code": "Copy Code", "copy-ip": "Kopiuj IP", "ban-ip": "Blokuj IP", "view-history": "Historia edycji", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Zmień właściciela", "thread_tools.select_category": "Wybierz kategorię", "thread_tools.fork": "Skopiuj temat", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Usuń temat", "thread_tools.delete-posts": "Usuń posty", "thread_tools.delete_confirm": "Czy na pewno chcesz usunąć ten temat?", diff --git a/public/language/pl/user.json b/public/language/pl/user.json index 2241455027..860cbad738 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "To pole jest wymagane.", "emailUpdate.change-instructions": "Email z unikalnym linkiem zostanie wysłany na wprowadzony adres email. Otwarcie tego linku potwierdzi, że podany adres email należy do Ciebie. W każdej chwili możesz go zmienić w edycji profilu.", - "emailUpdate.password-challenge": "Proszę wprowadź hasło aby potwierdzić, że to konto należy do Ciebie." + "emailUpdate.password-challenge": "Proszę wprowadź hasło aby potwierdzić, że to konto należy do Ciebie.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/pt-BR/admin/extend/widgets.json b/public/language/pt-BR/admin/extend/widgets.json index f8a634a9c0..6b2c232287 100644 --- a/public/language/pt-BR/admin/extend/widgets.json +++ b/public/language/pt-BR/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Arraste e solte um contêiner ou insira HTML aqui.", "show-to-groups": "Mostrar para grupos", "hide-from-groups": "Esconder dos grupos", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Esconder no móvel" } \ No newline at end of file diff --git a/public/language/pt-BR/admin/settings/email.json b/public/language/pt-BR/admin/settings/email.json index 1c56b7edcd..6dcaab521b 100644 --- a/public/language/pt-BR/admin/settings/email.json +++ b/public/language/pt-BR/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remover imagens de notificações por e-mail", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index 507ccd7764..eef6330031 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Por favor digite uma tag maior. Tags devem conter pelo menos %1 caractere(s)", "tag-too-long": "Por favor digite uma tag menor. Tags não podem conter mais que %1 caractere(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Sem tags suficientes. Tópicos devem ter no mínimo %1 tag(s)", "too-many-tags": "Muitas tags. Tópicos não podem ter mais que %1 tag(s)", "cant-use-system-tag": "Você não pode usar esta tag de sistema.", diff --git a/public/language/pt-BR/global.json b/public/language/pt-BR/global.json index 03cb709a5d..e314ff7d40 100644 --- a/public/language/pt-BR/global.json +++ b/public/language/pt-BR/global.json @@ -6,11 +6,11 @@ "403.message": "Parece que você chegou à uma página à qual você não tem acesso.", "403.login": "Perhaps you should try logging in?", "404.title": "Não Encontrado", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Erro Interno.", "500.message": "Oops! Parece que algo deu errado!", "400.title": "Solicitação Inválida.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Cadastrar", "login": "Login", "please_log_in": "Por Favor Efetue o Login", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Você logou com sucesso", "save_changes": "Salvar Alterações", "save": "Salvar", + "cancel": "Cancel", "close": "Fechar", "pagination": "Paginação", "pagination.out_of": "%1 de %2", @@ -60,6 +61,7 @@ "posts": "Posts", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Melhor", "controversial": "Controversial", "votes": "Votos", @@ -130,7 +132,9 @@ "edited": "Editado", "disabled": "Desativado", "select": "Escolha", + "copied": "Copied", "user-search-prompt": "Digite alguma coisa aqui para encontrar usuários...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/pt-BR/groups.json b/public/language/pt-BR/groups.json index 81824c08f4..712d05104d 100644 --- a/public/language/pt-BR/groups.json +++ b/public/language/pt-BR/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupos", "members": "Members", "view_group": "Ver Grupo", diff --git a/public/language/pt-BR/modules.json b/public/language/pt-BR/modules.json index 61aeefa5d9..ca8c6eae42 100644 --- a/public/language/pt-BR/modules.json +++ b/public/language/pt-BR/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Data", "composer.schedule-time": "Hora", "composer.cancel-scheduling": "Cancelar Agendamento", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Definir Data", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/pt-BR/pages.json b/public/language/pt-BR/pages.json index 121b03c2f2..5a59317fd7 100644 --- a/public/language/pt-BR/pages.json +++ b/public/language/pt-BR/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads feitos por %1", "account/sessions": "Sessões de Login", "confirm": "E-mail Confirmado", - "maintenance.text": "%1 está atualmente sob manutenção. Por favor retorne em outro momento.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Adicionalmente, o administrador deixou esta mensagem:", "throttled.text": "%1 está atualmente indisponível devido a excesso de contingente. Por favor retorne em outro momento." } \ No newline at end of file diff --git a/public/language/pt-BR/tags.json b/public/language/pt-BR/tags.json index 5d31ab84bd..e44cabe24f 100644 --- a/public/language/pt-BR/tags.json +++ b/public/language/pt-BR/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Digite as tags aqui, entre %1 e %2 caracteres cada.", "enter_tags_here_short": "Digite tags...", "no_tags": "Ainda não há tags.", - "select_tags": "Selecionar Tags" + "select_tags": "Selecionar Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/pt-BR/themes/harmony.json b/public/language/pt-BR/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/pt-BR/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/pt-BR/themes/persona.json b/public/language/pt-BR/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/pt-BR/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/pt-BR/topic.json b/public/language/pt-BR/topic.json index b4424b1b62..8214a5432b 100644 --- a/public/language/pt-BR/topic.json +++ b/public/language/pt-BR/topic.json @@ -36,6 +36,7 @@ "scheduled": "Agendado", "moved": "Movido", "moved-from": "Movido de %1", + "copy-code": "Copy Code", "copy-ip": "Copiar IP", "ban-ip": "Banir IP", "view-history": "Histórico de Edição", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Trocar proprietário", "thread_tools.select_category": "Escolha a Categoria", "thread_tools.fork": "Ramificar Tópico", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Deletar Tópico", "thread_tools.delete-posts": "Deletar Posts", "thread_tools.delete_confirm": "Tem certeza que deseja excluir este tópico?", diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index e1f55a8771..50de92202c 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "Este campo es requerido.", "emailUpdate.change-instructions": "Um e-mail de confirmação será enviado a sua conta de e-mail com um link único. Ao acessar ao link, confirmará que é proprietário da conta e a ativará. Em qualquer momento, poderá atualizar o e-mail registrado desde a página da conta.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/pt-PT/admin/extend/widgets.json b/public/language/pt-PT/admin/extend/widgets.json index 643b1f938b..c83a1b736f 100644 --- a/public/language/pt-PT/admin/extend/widgets.json +++ b/public/language/pt-PT/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Arrasta e solta um container ou insere HTML aqui.", "show-to-groups": "Mostrar para os grupos", "hide-from-groups": "Ocultar dos grupos", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Ocultar em telemóvel" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/settings/email.json b/public/language/pt-PT/admin/settings/email.json index 2c78449689..25bb1b0cfe 100644 --- a/public/language/pt-PT/admin/settings/email.json +++ b/public/language/pt-PT/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json index 21cc8c248e..f5bff4dfc0 100644 --- a/public/language/pt-PT/error.json +++ b/public/language/pt-PT/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Por favor introduz um marcador maior. Os marcadores devem ter pelo menos %1 caracter(s)", "tag-too-long": "Por favor introduz um marcador mais curto. Os marcadores devem ter no máximo %1 caracter(es)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Não existem marcadores suficientes. Os tópicos devem ter pelo menos %1 marcador(es)", "too-many-tags": "Existem marcadores a mais. Os tópicos não podem ter mais do que %1 marcador(es)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/pt-PT/global.json b/public/language/pt-PT/global.json index 528daf54ec..d6d7c8d9d5 100644 --- a/public/language/pt-PT/global.json +++ b/public/language/pt-PT/global.json @@ -6,11 +6,11 @@ "403.message": "Parece que encontraste uma página à qual não tens acesso.", "403.login": "Perhaps you should try logging in?", "404.title": "Não encontrado", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Erro interno.", "500.message": "Oops! Parece que algo correu mal!", "400.title": "O pedido não correu bem.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Regista-te", "login": "Iniciar sessão", "please_log_in": "Por favor inicia sessão", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Iniciaste sessão com sucesso", "save_changes": "Guardar as alterações", "save": "Guardar", + "cancel": "Cancel", "close": "Fechar", "pagination": "Paginação", "pagination.out_of": "%1 de %2", @@ -60,6 +61,7 @@ "posts": "Publicações", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Melhores", "controversial": "Controversial", "votes": "Votos", @@ -130,7 +132,9 @@ "edited": "Editado", "disabled": "Desativado", "select": "Selecionar", + "copied": "Copied", "user-search-prompt": "Digita algo aqui para encontrar utilizadores...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/pt-PT/groups.json b/public/language/pt-PT/groups.json index d54c7593f1..cf080e3330 100644 --- a/public/language/pt-PT/groups.json +++ b/public/language/pt-PT/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupos", "members": "Members", "view_group": "Ver o grupo", diff --git a/public/language/pt-PT/modules.json b/public/language/pt-PT/modules.json index 6af04d4a27..ac41a869b7 100644 --- a/public/language/pt-PT/modules.json +++ b/public/language/pt-PT/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/pt-PT/pages.json b/public/language/pt-PT/pages.json index 3662091efd..be06e9cc06 100644 --- a/public/language/pt-PT/pages.json +++ b/public/language/pt-PT/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Carregamentos feitos por %1", "account/sessions": "Sessões ativas", "confirm": "E-mail confirmado", - "maintenance.text": "%1 está atualmente sobre manutenção.
Por favor, volta noutra altura.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Adicionalmente, o administrador deixou esta mensagem:", "throttled.text": "%1 não está disponível de momento devido a um carregamento excesso. Por favor, volta mais tarde." } \ No newline at end of file diff --git a/public/language/pt-PT/tags.json b/public/language/pt-PT/tags.json index d644741aaf..95150d5693 100644 --- a/public/language/pt-PT/tags.json +++ b/public/language/pt-PT/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Insere os marcadores aqui, cada um com %1 a %2 caracteres.", "enter_tags_here_short": "Insere marcadores...", "no_tags": "Ainda não existem marcadores.", - "select_tags": "Selecionar Marcadores" + "select_tags": "Selecionar Marcadores", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/pt-PT/themes/harmony.json b/public/language/pt-PT/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/pt-PT/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/pt-PT/themes/persona.json b/public/language/pt-PT/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/pt-PT/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/pt-PT/topic.json b/public/language/pt-PT/topic.json index fd7b95ce9a..3446d45089 100644 --- a/public/language/pt-PT/topic.json +++ b/public/language/pt-PT/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Movido", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copiar IP", "ban-ip": "Banir IP", "view-history": "Histórico de Edição", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Alterar Proprietário", "thread_tools.select_category": "Selecionar Categoria", "thread_tools.fork": "Clonar tópico", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Apagar Tópico", "thread_tools.delete-posts": "Apagar publicações", "thread_tools.delete_confirm": "Tens a certeza que desejas apagar este tópico?", diff --git a/public/language/pt-PT/user.json b/public/language/pt-PT/user.json index 3205ca7fc2..558060fce2 100644 --- a/public/language/pt-PT/user.json +++ b/public/language/pt-PT/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/ro/admin/extend/widgets.json b/public/language/ro/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/ro/admin/extend/widgets.json +++ b/public/language/ro/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/ro/admin/settings/email.json b/public/language/ro/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/ro/admin/settings/email.json +++ b/public/language/ro/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/ro/error.json b/public/language/ro/error.json index fabd03c861..c148ead3ca 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/ro/global.json b/public/language/ro/global.json index afe13cd41e..464e9bbcaa 100644 --- a/public/language/ro/global.json +++ b/public/language/ro/global.json @@ -6,11 +6,11 @@ "403.message": "Se pare că ai ajuns pe o pagină la care nu ai acces", "403.login": "Perhaps you should try logging in?", "404.title": "Nu a fost găsit", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Oops! Se pare că ceva a mers greșit!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Înregistrare", "login": "Autentificare", "please_log_in": "Autentifică-te", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Te-ai conectat cu succes", "save_changes": "Salvează Modificări", "save": "Save", + "cancel": "Cancel", "close": "Închide", "pagination": "Paginație", "pagination.out_of": "%1 din %2", @@ -60,6 +61,7 @@ "posts": "Mesaje", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Cel mai bun", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/ro/groups.json b/public/language/ro/groups.json index cc34f6fe65..98d5269abb 100644 --- a/public/language/ro/groups.json +++ b/public/language/ro/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupuri", "members": "Members", "view_group": "Vezi Grup", diff --git a/public/language/ro/modules.json b/public/language/ro/modules.json index b013dea281..14c6c62b0a 100644 --- a/public/language/ro/modules.json +++ b/public/language/ro/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/ro/pages.json b/public/language/ro/pages.json index d2c266e5de..3400943459 100644 --- a/public/language/ro/pages.json +++ b/public/language/ro/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "%1 este momentan în mentenanță. Întoarce-te în curând!", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/ro/tags.json b/public/language/ro/tags.json index b314244d2e..e1af0ff586 100644 --- a/public/language/ro/tags.json +++ b/public/language/ro/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Introduceți tagurile aici, fiecare tag trebuie să conțină între %1 și %2 caractere.", "enter_tags_here_short": "Introdu taguri...", "no_tags": "În acest moment nu există nici un tag.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/ro/themes/harmony.json b/public/language/ro/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/ro/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/ro/themes/persona.json b/public/language/ro/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/ro/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/ro/topic.json b/public/language/ro/topic.json index e0f3c3a1db..39d093ffd7 100644 --- a/public/language/ro/topic.json +++ b/public/language/ro/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Bifurcă Subiect", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Șterge Subiect", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Ești sigur că vrei să ștergi acest subiect?", diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 3080bbb403..0a88172c42 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/ru/admin/extend/widgets.json b/public/language/ru/admin/extend/widgets.json index 4a8666d7d2..2da859c872 100644 --- a/public/language/ru/admin/extend/widgets.json +++ b/public/language/ru/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Перетащите контейнер сюда или добавьте HTML вручную.", "show-to-groups": "Показывать группам", "hide-from-groups": "Скрывать от групп", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Скрывать на мобильных устройствах" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/email.json b/public/language/ru/admin/settings/email.json index 8c519bc778..ca73d51774 100644 --- a/public/language/ru/admin/settings/email.json +++ b/public/language/ru/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Введите число, соответствующее номеру часа (например, 0 для полуночи, 17 для 17:00). Имейте в виду, что время определяется по часовому поясу сервера.
Текущее время сервера:
Следующая рассылка запланирована на ", "notifications.remove-images": "Удалить изображения из уведомлений по электронной почте", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/ru/error.json b/public/language/ru/error.json index 180d8da922..7e0dc408f2 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -92,6 +92,7 @@ "already-posting": "Вы уже опубликовали запись", "tag-too-short": "Слишком короткая метка. Минимум %1 символов.", "tag-too-long": "Слишком длинная метка. Максимум %1 символов.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Пожалуйста, добавьте метки в ваше сообщение. У темы должно быть минимум %1 меток.", "too-many-tags": "Пожалуйста, уберите несколько меток из вашего сообщения. У темы должно быть не более %1 меток.", "cant-use-system-tag": "Вы не можете использовать эту системную метку.", diff --git a/public/language/ru/global.json b/public/language/ru/global.json index 7c3882bd76..ea076b83f3 100644 --- a/public/language/ru/global.json +++ b/public/language/ru/global.json @@ -6,11 +6,11 @@ "403.message": "Вы пытаетесь перейти на страницу, к которой у вас нет доступа.", "403.login": "Perhaps you should try logging in?", "404.title": "Страница не найдена", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Внутренняя ошибка.", "500.message": "Упс! Похоже, что-то пошло не так!", "400.title": "Неверный запрос.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Зарегистрироваться", "login": "Войти", "please_log_in": "Пожалуйста, войдите под своей учётной записью", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Вы успешно вошли на форум", "save_changes": "Сохранить изменения", "save": "Сохранить", + "cancel": "Cancel", "close": "Закрыть", "pagination": "Разбивка на страницы", "pagination.out_of": "%1 из %2", @@ -60,6 +61,7 @@ "posts": "Сообщения", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Лучшие сообщения", "controversial": "Спорные", "votes": "Голоса", @@ -130,7 +132,9 @@ "edited": "Отредактированный", "disabled": "Отключено", "select": "Выбрать", + "copied": "Copied", "user-search-prompt": "Введите что-нибудь здесь, чтобы найти пользователей...", "hidden": "не показывается", - "sort": "Сортировка" + "sort": "Сортировка", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index 15d4343b0c..173cdae4cc 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Группы", "members": "Members", "view_group": "Просмотр группы", diff --git a/public/language/ru/modules.json b/public/language/ru/modules.json index c52c7698e1..21ed271a0d 100644 --- a/public/language/ru/modules.json +++ b/public/language/ru/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Дата", "composer.schedule-time": "Время", "composer.cancel-scheduling": "Отменить отложенную публикацию", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Установить дату", "composer.discard-all-drafts": "Удалить все черновики", "composer.no-drafts": "У вас нет черновиков", diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index 468bd44909..8b6c6f80da 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Загрузки %1", "account/sessions": "Сессии", "confirm": "Электронная почта подтверждена", - "maintenance.text": "%1 в настоящее время на обслуживании. Пожалуйста, возвращайтесь позже.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Кроме того, администратор оставил это сообщение:", "throttled.text": "%1 в настоящее время недоступен из-за высокой нагрузки. Пожалуйста, приходите в другой раз." } \ No newline at end of file diff --git a/public/language/ru/tags.json b/public/language/ru/tags.json index 827b6d6630..67642cdd4a 100644 --- a/public/language/ru/tags.json +++ b/public/language/ru/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Добавьте метки здесь, от %1 до %2 символов каждая.", "enter_tags_here_short": "Введите метки...", "no_tags": "Меток пока нет.", - "select_tags": "Выберите метки" + "select_tags": "Выберите метки", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/ru/themes/harmony.json b/public/language/ru/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/ru/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/ru/themes/persona.json b/public/language/ru/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/ru/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/ru/topic.json b/public/language/ru/topic.json index 3537724503..109aeaa930 100644 --- a/public/language/ru/topic.json +++ b/public/language/ru/topic.json @@ -36,6 +36,7 @@ "scheduled": "Запланировано", "moved": "Перенесена", "moved-from": "Перенесено с %1", + "copy-code": "Copy Code", "copy-ip": "Копировать IP", "ban-ip": "Забанить IP", "view-history": "История правок", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Сменить автора", "thread_tools.select_category": "Выберите категорию", "thread_tools.fork": "Разделить тему", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Удалить тему", "thread_tools.delete-posts": "Удалить сообщения", "thread_tools.delete_confirm": "Вы уверены, что хотите удалить эту тему?", diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 2d2024dcfd..9d4f2266b5 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/rw/admin/extend/widgets.json b/public/language/rw/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/rw/admin/extend/widgets.json +++ b/public/language/rw/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/rw/admin/settings/email.json b/public/language/rw/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/rw/admin/settings/email.json +++ b/public/language/rw/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index 7873aaaf3f..4776a7c70c 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Gerageza ukoreshe akamenyetso kagizwe n'inyuguti (cyangwa ibimenyetso) nibura zigera kuri %1", "tag-too-long": "Gerageza ukoreshe akamenyetso kagizwe n'inyuguti (cyangwa ibimenyetso) zitarenze %1", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Nta tumenyetso turiho duhagije. Ibiganiro bigomba kugira utumenyetso (akamenyetso) nibura %1", "too-many-tags": "Hariho utumenyetso twinshi. Ibiganiro ntibyarenza utumenyetso (akamenyetso) %1", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/rw/global.json b/public/language/rw/global.json index 60373b73f1..32393d80d6 100644 --- a/public/language/rw/global.json +++ b/public/language/rw/global.json @@ -6,11 +6,11 @@ "403.message": "Wageze kuri paji udafitiye uburenganzira bwo kureba", "403.login": "Perhaps you should try logging in?", "404.title": "Ntacyabonetse", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Ye baba we! Ntibikunze!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Iyandikishe", "login": "Injiramo", "please_log_in": "Injiramo", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Winjiyemo nta ngorane", "save_changes": "Bika ibyamaze gukorwa", "save": "Save", + "cancel": "Cancel", "close": "Funga", "pagination": "Umubare wa Paji", "pagination.out_of": "%1 muri %2", @@ -60,6 +61,7 @@ "posts": "Ibyashyizweho", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Byiza", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json index 39541a7d68..910f1ee0dc 100644 --- a/public/language/rw/groups.json +++ b/public/language/rw/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Amatsinda", "members": "Members", "view_group": "Reba Itsinda", diff --git a/public/language/rw/modules.json b/public/language/rw/modules.json index 6496b5fac1..cb99607b07 100644 --- a/public/language/rw/modules.json +++ b/public/language/rw/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/rw/pages.json b/public/language/rw/pages.json index fbd0c94a7f..3f3f1b0f5e 100644 --- a/public/language/rw/pages.json +++ b/public/language/rw/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Yemejwe", - "maintenance.text": "%1 ntiboneka kuko ubu iri gutunganywa. Muze kongera kugaruka. ", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Byongeye, kandi, umuyobozi yasize ubu butumwa: ", "throttled.text": "% ntibonetse kubera ukunanirwa. Uze kugaruka ikindi gihe. " } \ No newline at end of file diff --git a/public/language/rw/tags.json b/public/language/rw/tags.json index b58bf47d69..a52e9ab667 100644 --- a/public/language/rw/tags.json +++ b/public/language/rw/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Andika akamenyetso bijyanye aha. Buri kamenyetso kagomba kuba kagizwe n'inyuguti hagati ya %1 na %2. ", "enter_tags_here_short": "Shyiraho utumenyetso...", "no_tags": "Nta tumenyetso twari twashyirwaho. ", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/rw/themes/harmony.json b/public/language/rw/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/rw/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/rw/themes/persona.json b/public/language/rw/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/rw/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json index b6fa95fc85..1d9c6570c1 100644 --- a/public/language/rw/topic.json +++ b/public/language/rw/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Gabanyaho ku Kiganiro", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Kuraho Ikiganiro", "thread_tools.delete-posts": "Siba Icyashizweho", "thread_tools.delete_confirm": "Wiringiye neza ko ushaka gukuraho iki kiganiro?", diff --git a/public/language/rw/user.json b/public/language/rw/user.json index 0bbbc9a56f..6f611353be 100644 --- a/public/language/rw/user.json +++ b/public/language/rw/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/sc/admin/extend/widgets.json b/public/language/sc/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/sc/admin/extend/widgets.json +++ b/public/language/sc/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/sc/admin/settings/email.json b/public/language/sc/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/sc/admin/settings/email.json +++ b/public/language/sc/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/sc/error.json b/public/language/sc/error.json index 268aa0a786..8184b0b80a 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)", "too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/sc/global.json b/public/language/sc/global.json index 68431a4e96..cce794489b 100644 --- a/public/language/sc/global.json +++ b/public/language/sc/global.json @@ -6,11 +6,11 @@ "403.message": "You seem to have stumbled upon a page that you do not have access to.", "403.login": "Perhaps you should try logging in?", "404.title": "No Agatadu", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internal Error.", "500.message": "Oops! Paret chi carchi cosa est andada male!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registra·ti", "login": "Intra", "please_log_in": "Pro praghere Intra", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Ses intradu", "save_changes": "Alloga Acontzos", "save": "Save", + "cancel": "Cancel", "close": "Serra", "pagination": "Paginatzione", "pagination.out_of": "%1 out of %2", @@ -60,6 +61,7 @@ "posts": "Arresonos", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Best", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/sc/groups.json b/public/language/sc/groups.json index f6160d20c9..94902e965d 100644 --- a/public/language/sc/groups.json +++ b/public/language/sc/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Groups", "members": "Members", "view_group": "View Group", diff --git a/public/language/sc/modules.json b/public/language/sc/modules.json index 57cd01bd97..2eb3dda4c0 100644 --- a/public/language/sc/modules.json +++ b/public/language/sc/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/sc/pages.json b/public/language/sc/pages.json index fc3328fe5a..87c1612a80 100644 --- a/public/language/sc/pages.json +++ b/public/language/sc/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "Email Confirmed", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Additionally, the administrator has left this message:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." } \ No newline at end of file diff --git a/public/language/sc/tags.json b/public/language/sc/tags.json index 4aace7f79f..9412cca1b4 100644 --- a/public/language/sc/tags.json +++ b/public/language/sc/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here_short": "Enter tags...", "no_tags": "There are no tags yet.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/sc/themes/harmony.json b/public/language/sc/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/sc/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/sc/themes/persona.json b/public/language/sc/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/sc/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/sc/topic.json b/public/language/sc/topic.json index 42c7d9901b..c69b54052a 100644 --- a/public/language/sc/topic.json +++ b/public/language/sc/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Moved", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Copy IP", "ban-ip": "Ban IP", "view-history": "Edit History", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Select Category", "thread_tools.fork": "Partzi Arresonada", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Cantzella Arresonada", "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", diff --git a/public/language/sc/user.json b/public/language/sc/user.json index 09f51caf51..c7c8cf5896 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/sk/admin/extend/widgets.json b/public/language/sk/admin/extend/widgets.json index 178efbc6d8..921153d124 100644 --- a/public/language/sk/admin/extend/widgets.json +++ b/public/language/sk/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/sk/admin/settings/email.json b/public/language/sk/admin/settings/email.json index f8d64a3462..74827d5e3d 100644 --- a/public/language/sk/admin/settings/email.json +++ b/public/language/sk/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 6332ba3a7e..c5dc7d5dc8 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Prosím, zadajte dlhšiu značku. Značky by mali obsahovať najmenej %1 znak(ov)", "tag-too-long": "Prosím, zadajte kratšiu značku. Značky nemôžu obsahovať viac ako %1 znak(ov)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Príliš malo značiek. Témy musia mať minimálne %1 značku(y)", "too-many-tags": "Príliš veľa značiek. Témy nemôžu mať viac ako %1 značku(y)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/sk/global.json b/public/language/sk/global.json index 01abcb7929..0df4e5bf0d 100644 --- a/public/language/sk/global.json +++ b/public/language/sk/global.json @@ -6,11 +6,11 @@ "403.message": "Zdá sa, že ste narazili/a na stránku, na ktorú nemáte prístup.", "403.login": "Perhaps you should try logging in?", "404.title": "Stránka nenájdená", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Vnútorná chyba.", "500.message": "Och! Vyzerá to tak, že sa niečo pokazilo!", "400.title": "Nesprávna požiadavka.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrovať", "login": "Prihlásiť sa", "please_log_in": "Prosím, prihláste sa", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Úspešne ste sa prihlásili", "save_changes": "Uložiť zmeny", "save": "Uložiť", + "cancel": "Cancel", "close": "Zatvoriť", "pagination": "Stránkovanie", "pagination.out_of": "%1 z %2", @@ -60,6 +61,7 @@ "posts": "Príspevky", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Najlepšie", "controversial": "Controversial", "votes": "Hlasov", @@ -130,7 +132,9 @@ "edited": "Zmenené", "disabled": "Zablokovaný", "select": "Vybrať", + "copied": "Copied", "user-search-prompt": "Pre hľadanie používateľov, píšte sem...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/sk/groups.json b/public/language/sk/groups.json index 24d20a7318..da0a3b7550 100644 --- a/public/language/sk/groups.json +++ b/public/language/sk/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Skupiny", "members": "Members", "view_group": "Zobraziť skupinu", diff --git a/public/language/sk/modules.json b/public/language/sk/modules.json index af135f04e6..7a178fdc99 100644 --- a/public/language/sk/modules.json +++ b/public/language/sk/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/sk/pages.json b/public/language/sk/pages.json index f1fae7a7d6..c4f2792efd 100644 --- a/public/language/sk/pages.json +++ b/public/language/sk/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Nahraté od %1", "account/sessions": "Login Sessions", "confirm": "E-mail potvrdený", - "maintenance.text": "%1 v súčasnej dobe prebieha údržba. Prosíme, vráťte sa neskôr.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Správca, dodatočne zanechal túto správu:", "throttled.text": "%1 je v súčasnej dobe nedostupný z dôvodu nadmerného zaťaženia. Prosím, vráťte sa neskôr" } \ No newline at end of file diff --git a/public/language/sk/tags.json b/public/language/sk/tags.json index a1541b8625..3e42608963 100644 --- a/public/language/sk/tags.json +++ b/public/language/sk/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Sem vložte označenie, každé o dĺžke %1 až %2 znakov.", "enter_tags_here_short": "Zadajte značky...", "no_tags": "Zatiaľ tu nie sú žiadne značky.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/sk/themes/harmony.json b/public/language/sk/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/sk/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/sk/themes/persona.json b/public/language/sk/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/sk/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json index 0ea842c931..56ffcdfac3 100644 --- a/public/language/sk/topic.json +++ b/public/language/sk/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Presunuté", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopírovať IP adresu", "ban-ip": "Zablokovať IP adresu", "view-history": "Upraviť históriu", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "Vybrať kategóriu", "thread_tools.fork": "Rozvetviť tému", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Odstrániť tému", "thread_tools.delete-posts": "Odstrániť príspevky", "thread_tools.delete_confirm": "Ste si istý že chcete odstrániť túto tému?", diff --git a/public/language/sk/user.json b/public/language/sk/user.json index f1eb5ae809..b6aca3b7d0 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/sl/admin/extend/widgets.json b/public/language/sl/admin/extend/widgets.json index 577d9a6b24..72de7f13a2 100644 --- a/public/language/sl/admin/extend/widgets.json +++ b/public/language/sl/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Prikaži skupinam", "hide-from-groups": "Skrij skupinam", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/sl/admin/settings/email.json b/public/language/sl/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/sl/admin/settings/email.json +++ b/public/language/sl/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/sl/error.json b/public/language/sl/error.json index 450f1f6449..63ce48028a 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Prosimo, vnesite daljšo oznako. Obvezno število znakov: vsaj %1.", "tag-too-long": "Prosimo, vnesite krajšo oznako. Največje število znakov: %1.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Ni dovolj oznak. Obvezno število oznak: %1. ", "too-many-tags": "Preveč oznak. Največje število oznak: %1.", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/sl/global.json b/public/language/sl/global.json index d9732db7bb..ac35fbaa7b 100644 --- a/public/language/sl/global.json +++ b/public/language/sl/global.json @@ -6,11 +6,11 @@ "403.message": "Kaže, da ste naleteli na stran, za katero nimate dovoljenja.", "403.login": "Perhaps you should try logging in?", "404.title": "Tega ni bilo mogoče najti.", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Interna napaka", "500.message": "Ups! Nekaj je šlo narobe!", "400.title": "Napačna zahteva", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registracija", "login": "Prijava", "please_log_in": "Prijavite se.", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Uspešno ste se prijavili.", "save_changes": "Shrani spremembe.", "save": "Shrani", + "cancel": "Cancel", "close": "Zapri", "pagination": "Oštevilčenje strani", "pagination.out_of": "%1 od %2", @@ -60,6 +61,7 @@ "posts": "Objave", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Najboljše", "controversial": "Controversial", "votes": "Votes", @@ -130,7 +132,9 @@ "edited": "Edited", "disabled": "Disabled", "select": "Select", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/sl/groups.json b/public/language/sl/groups.json index a5fc7b378b..cccd9e69bd 100644 --- a/public/language/sl/groups.json +++ b/public/language/sl/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Skupine", "members": "Members", "view_group": "Poglej skupino", diff --git a/public/language/sl/modules.json b/public/language/sl/modules.json index cc78b9c3a0..bd2fc239f1 100644 --- a/public/language/sl/modules.json +++ b/public/language/sl/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Datum", "composer.schedule-time": "Čas", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Nastavi datum", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/sl/pages.json b/public/language/sl/pages.json index f09ab07f71..e4aadf093e 100644 --- a/public/language/sl/pages.json +++ b/public/language/sl/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "E-pošta potrjena", - "maintenance.text": "%1 je trenutno v vzdrževanju.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Dodatno vam je skrbnik pustil tole sporočilo:", "throttled.text": "Storitev %1 je trenutno zaradi obremenitve nedosegljiva. Prosimo, vrnite se pozneje." } \ No newline at end of file diff --git a/public/language/sl/tags.json b/public/language/sl/tags.json index ab0d9d0851..72b21268c0 100644 --- a/public/language/sl/tags.json +++ b/public/language/sl/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Tu vpišite oznake. Dovoljeno število znakov: najmanj %1 in največ %2.", "enter_tags_here_short": "Vpišite oznake...", "no_tags": "Oznak še ni.", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/sl/themes/harmony.json b/public/language/sl/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/sl/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/sl/themes/persona.json b/public/language/sl/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/sl/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/sl/topic.json b/public/language/sl/topic.json index 14cdde6dd1..97998a184e 100644 --- a/public/language/sl/topic.json +++ b/public/language/sl/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Premaknjeno", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopiraj IP", "ban-ip": "Prepovej IP", "view-history": "Uredi zgodovino", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Spremeni lastnika", "thread_tools.select_category": "Izberi kategorijo", "thread_tools.fork": "Razcepi temo", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Izbriši temo", "thread_tools.delete-posts": "Izbriši objave", "thread_tools.delete_confirm": "Ste prepričani, da želite izbrisati to temo?", diff --git a/public/language/sl/user.json b/public/language/sl/user.json index f6c1ceeca5..04de6de728 100644 --- a/public/language/sl/user.json +++ b/public/language/sl/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/sq-AL/admin/extend/widgets.json b/public/language/sq-AL/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/sq-AL/admin/extend/widgets.json +++ b/public/language/sq-AL/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/sq-AL/admin/settings/email.json b/public/language/sq-AL/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/sq-AL/admin/settings/email.json +++ b/public/language/sq-AL/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/sq-AL/error.json b/public/language/sq-AL/error.json index 4383748394..95216a6c88 100644 --- a/public/language/sq-AL/error.json +++ b/public/language/sq-AL/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Ju lutemi vendosni një tag më të gjatë. Tag-et duhet të përmbajnë të paktën %1 karakter(e)", "tag-too-long": "Ju lutemi vendosni një tag më të shkurtër. Tag-et nuk mund të jenë më të gjata se %1 karakter(e)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Numër jo i mjaftueshëm i tag-eve. Temat duhet të kenë të paktën %1 tag(-e)", "too-many-tags": "Shumë tag-e. Temat nuk mund të kenë më shumë se %1 tag(-e)", "cant-use-system-tag": "Ju nuk mund ta përdorni këtë tag sistemi", diff --git a/public/language/sq-AL/global.json b/public/language/sq-AL/global.json index 0566361619..0ebb86d174 100644 --- a/public/language/sq-AL/global.json +++ b/public/language/sq-AL/global.json @@ -6,11 +6,11 @@ "403.message": "Ju duket se keni arritur në një faqe në të cilën nuk keni akses.", "403.login": "Perhaps you should try logging in?", "404.title": "Nuk u gjet", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Gabim i brendshëm.", "500.message": "Ups! Diçka nuk shkoi mirë!", "400.title": "Kërkesë e pasaktë.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Regjistrohu", "login": "Hyr", "please_log_in": "Ju lutemi Identifikohu", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Ju keni hyrë me sukses", "save_changes": "Ruaj ndryshimet", "save": "Ruaj", + "cancel": "Cancel", "close": "Mbyll", "pagination": "Numërim Faqesh", "pagination.out_of": "%1 nga %2", @@ -60,6 +61,7 @@ "posts": "Postimet", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Më të mirat", "controversial": "E diskutueshme", "votes": "Votat", @@ -130,7 +132,9 @@ "edited": "U rregullua", "disabled": "Zhblloko", "select": "Zgjidh", + "copied": "Copied", "user-search-prompt": "Shkruani diçka këtu për të gjetur përdorues...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/sq-AL/groups.json b/public/language/sq-AL/groups.json index c2bbca8c75..e828521ec0 100644 --- a/public/language/sq-AL/groups.json +++ b/public/language/sq-AL/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupe", "members": "Members", "view_group": "Shiko grupin", diff --git a/public/language/sq-AL/modules.json b/public/language/sq-AL/modules.json index 9666df5e23..fa56ba6b2a 100644 --- a/public/language/sq-AL/modules.json +++ b/public/language/sq-AL/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Data", "composer.schedule-time": "Koha", "composer.cancel-scheduling": "Anulo planifikimin", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Cakto datën", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/sq-AL/pages.json b/public/language/sq-AL/pages.json index f6b9f20a24..10e2cfa828 100644 --- a/public/language/sq-AL/pages.json +++ b/public/language/sq-AL/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Ngarkimet e %1", "account/sessions": "Seancat e hyrjes", "confirm": "Email-i u konfirmua", - "maintenance.text": "%1 po i nënshtrohet mirëmbajtjes. Të lutem kthehu një herë tjetër.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Për më tepër, administratori ka lënë këtë mesazh:", "throttled.text": "%1 është aktualisht i padisponueshëm për shkak të ngarkesës së tepërt. Të lutem kthehu një herë tjetër." } \ No newline at end of file diff --git a/public/language/sq-AL/tags.json b/public/language/sq-AL/tags.json index 34f02635f8..1cd682ffab 100644 --- a/public/language/sq-AL/tags.json +++ b/public/language/sq-AL/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Futni këtu tags, ndërmjet %1 dhe %2 karaktere secila.", "enter_tags_here_short": "Vendos tags...", "no_tags": "Nuk ka ende tags", - "select_tags": "Zgjidhni tags" + "select_tags": "Zgjidhni tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/sq-AL/themes/harmony.json b/public/language/sq-AL/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/sq-AL/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/sq-AL/themes/persona.json b/public/language/sq-AL/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/sq-AL/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/sq-AL/topic.json b/public/language/sq-AL/topic.json index 017f99ccb3..7f4aa9f177 100644 --- a/public/language/sq-AL/topic.json +++ b/public/language/sq-AL/topic.json @@ -36,6 +36,7 @@ "scheduled": "E planifikuar", "moved": "E lëvizur", "moved-from": "E lëvizur nga %1", + "copy-code": "Copy Code", "copy-ip": "Kopjoni IP-në", "ban-ip": "Pezulloni IP-në", "view-history": "Ndrysho historinë", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Ndrysho pronarin", "thread_tools.select_category": "Zgjidh një kategori", "thread_tools.fork": "Ndrysho temën", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Fshij temën", "thread_tools.delete-posts": "Fshij postimin", "thread_tools.delete_confirm": "Jeni i sigurt që dëshironi ta fshini këtë temë?", diff --git a/public/language/sq-AL/user.json b/public/language/sq-AL/user.json index 04957f2469..bd94a7c957 100644 --- a/public/language/sq-AL/user.json +++ b/public/language/sq-AL/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Kjo fushë është fakultative. Ju nuk jeni të detyruar të jepni adresën tuaj të emailit, por pa një email të vërtetuar nuk do të jeni në gjendje të rikuperoni llogarinë tuaj ose të identifikoheni me emailin tuaj.", "emailUpdate.required": "Kjo fushë është e detyrueshme.", "emailUpdate.change-instructions": "Një email konfirmimi do të dërgohet në adresën e postës elektronike të dhene me një link unik. Hyrja në atë link do të konfirmojë zotërimin tuaj të adresës së emailit dhe ajo do të bëhet aktive në llogarinë tuaj. Në çdo kohë, ju mund të përditësoni emailin tuaj në dosje nga faqja e llogarisë tuaj.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/sr/admin/extend/widgets.json b/public/language/sr/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/sr/admin/extend/widgets.json +++ b/public/language/sr/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/sr/admin/settings/email.json b/public/language/sr/admin/settings/email.json index 7543180f27..9b9dce3b59 100644 --- a/public/language/sr/admin/settings/email.json +++ b/public/language/sr/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/sr/error.json b/public/language/sr/error.json index c8dd153238..fbaf347452 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -92,6 +92,7 @@ "already-posting": "Већ објављујете", "tag-too-short": "Унесите дужу ознаку. Ознаке морају садржати најмање %1 знак(ов)а.", "tag-too-long": "Унесите краћу ознаку. Ознаке не смеју бити дуже од %1 знак(ов)а.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Нема довољно ознака. Теме морају имати најмање %1 ознаке/а.", "too-many-tags": "Превише ознака. Теме не смеју имати више од %1 ознаке/а.", "cant-use-system-tag": "Не можете користити ову системску ознаку.", diff --git a/public/language/sr/global.json b/public/language/sr/global.json index aa67c6a681..756dff26c4 100644 --- a/public/language/sr/global.json +++ b/public/language/sr/global.json @@ -6,11 +6,11 @@ "403.message": "Изгледа да сте налетели на страницу на којој немате дозвољен приступ.", "403.login": "Можда би требало да покушате да се пријавите?", "404.title": "Није пронађено", - "404.message": "Изгледа да сте налетели на страницу која не постоји. Вратите се на почетну страницу.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Унутрашња грешка.", "500.message": "Упс! Изгледа да нешто није како треба!", "400.title": "Неисправан захтев.", - "400.message": "Изгледа да је ова веза деформисана, проверите још једном и покушајте поново. У супротном, вратите се на почетну страницу.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Регистрација", "login": "Пријави се", "please_log_in": "Молимо, пријавите се", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Успешно сте се пријавили", "save_changes": "Сачувај измене", "save": "Сачувај", + "cancel": "Откажи", "close": "Затвори", "pagination": "Нумерисање страница", "pagination.out_of": "%1 од %2", @@ -60,6 +61,7 @@ "posts": "Поруке", "x-posts": "%1 поруке", "x-topics": "%1 теме", + "x-reputation": "%1 угледа", "best": "Најбоље", "controversial": "Спорно", "votes": "Гласови", @@ -130,7 +132,9 @@ "edited": "Уређено", "disabled": "Онемогућено", "select": "Изабери", + "copied": "Copied", "user-search-prompt": "Uкуцајте нешто овде како бисте пронашли кориснике...", "hidden": "Сакривен", - "sort": "Сортирај" + "sort": "Сортирај", + "actions": "Радње" } \ No newline at end of file diff --git a/public/language/sr/groups.json b/public/language/sr/groups.json index 94a13b29e2..ec929eb5ab 100644 --- a/public/language/sr/groups.json +++ b/public/language/sr/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Групе", "members": "Чланови", "view_group": "Преглед групе", diff --git a/public/language/sr/modules.json b/public/language/sr/modules.json index 41509870dc..3984568a14 100644 --- a/public/language/sr/modules.json +++ b/public/language/sr/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Датум", "composer.schedule-time": "Време", "composer.cancel-scheduling": "Откажи планирање", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Подеси датум", "composer.discard-all-drafts": "Одбаци све нацрте", "composer.no-drafts": "Немате нацрте", diff --git a/public/language/sr/pages.json b/public/language/sr/pages.json index 8ee2c31159..c2db81bf8f 100644 --- a/public/language/sr/pages.json +++ b/public/language/sr/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Отпремио %1", "account/sessions": "Сесије пријављивања", "confirm": "Е-пошта је потврђена.", - "maintenance.text": "%1 је тренутно у фази одржавања. Молимо, навратите касније.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Додатно, администратор је оставио ову поруку:", "throttled.text": "%1 је тренутно недоступан због прекомерног оптерећења. Молимо, навратите касније." } \ No newline at end of file diff --git a/public/language/sr/tags.json b/public/language/sr/tags.json index c978bbc682..8cf309e6a2 100644 --- a/public/language/sr/tags.json +++ b/public/language/sr/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Овде унесите ознаке, од %1 до %2 знакова за сваку.", "enter_tags_here_short": "Унесите ознаке...", "no_tags": "Још увек нема ознака.", - "select_tags": "Изабери ознаке" + "select_tags": "Изабери ознаке", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/sr/themes/harmony.json b/public/language/sr/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/sr/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/sr/themes/persona.json b/public/language/sr/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/sr/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index cbca71013e..4574549904 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -36,6 +36,7 @@ "scheduled": "Планирано", "moved": "Премештено", "moved-from": "Премештено из %1", + "copy-code": "Копирај код", "copy-ip": "Копирај IP", "ban-ip": "Бануј IP", "view-history": "Уреди историју", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Промени власника", "thread_tools.select_category": "Изаберите категорију", "thread_tools.fork": "Раздвоји тему", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Избриши тему", "thread_tools.delete-posts": "Избриши поруку", "thread_tools.delete_confirm": "Да ли сте сигурни да желите да избришете ову тему?", diff --git a/public/language/sr/user.json b/public/language/sr/user.json index 5de06f692d..3709311a2f 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Ово поље је опционо. Нисте обавезни да наведете своју адресу е-поште, али без ваљане е-поште нећете моћи да вратите свој налог или да се пријавите помоћу своје е-поште.", "emailUpdate.required": "Ово поље је обавезно.", "emailUpdate.change-instructions": "На унету адресу е-поште биће послата потврдна порука са јединственом везом. Приступ тој вези потврдиће ваше власништво над адресом е-поште и она ће постати активна на вашем налогу. У било ком тренутку можете да ажурирате своју е-пошту на страници налога.", - "emailUpdate.password-challenge": "Унесите лозинку да бисте потврдили власништво над налогом." + "emailUpdate.password-challenge": "Унесите лозинку да бисте потврдили власништво над налогом.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/sv/admin/extend/widgets.json b/public/language/sv/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/sv/admin/extend/widgets.json +++ b/public/language/sv/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/sv/admin/settings/email.json b/public/language/sv/admin/settings/email.json index a51b116c25..312eb7d0f1 100644 --- a/public/language/sv/admin/settings/email.json +++ b/public/language/sv/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index a51f2ac74a..2789cae3dc 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Fyll i en längre tagg. Taggar måste vara minst %1 tecken långa", "tag-too-long": "Fyll i en kortare tagg. Taggar kan ej vara längre än %1 tecken långa", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Otillräckligt antal taggar. Ämnen måste ha minst %1 taggar", "too-many-tags": "För många taggar. Ämnen kan ej har mer än %1 tagg(ar)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/sv/global.json b/public/language/sv/global.json index 9948bdac43..3f53678719 100644 --- a/public/language/sv/global.json +++ b/public/language/sv/global.json @@ -6,11 +6,11 @@ "403.message": "Du verkar ha ramlat in på en sida du ej har tillgång till.", "403.login": "Perhaps you should try logging in?", "404.title": "Sidan saknas", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Internt fel.", "500.message": "Hoppsan! Något verkar ha gått fel!", "400.title": "Felaktig förfrågan.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Registrera", "login": "Logga in", "please_log_in": "Var god logga in", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Inloggningen lyckades", "save_changes": "Spara ändringar", "save": "Spara", + "cancel": "Cancel", "close": "Stäng", "pagination": "Siduppdelning", "pagination.out_of": "%1 av %2", @@ -60,6 +61,7 @@ "posts": "Inlägg", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Bästa", "controversial": "Controversial", "votes": "Röster", @@ -130,7 +132,9 @@ "edited": "Redigerad", "disabled": "Avstängd", "select": "Välj", + "copied": "Copied", "user-search-prompt": "Skriv något för att hitta användare", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/sv/groups.json b/public/language/sv/groups.json index c986b25ffc..e76eba3f3d 100644 --- a/public/language/sv/groups.json +++ b/public/language/sv/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Grupper", "members": "Members", "view_group": "Visa grupp ", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index fc4c2f665a..acb317476c 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/sv/pages.json b/public/language/sv/pages.json index 40379912d0..68ba8522cd 100644 --- a/public/language/sv/pages.json +++ b/public/language/sv/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uppladdningar av %1", "account/sessions": "Inloggningssessioner", "confirm": "E-postadress bekräftad", - "maintenance.text": "%1 genomgår underhåll just nu. Vänligen kom tillbaka lite senare.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Utöver det så lämnade administratören följande meddelande:", "throttled.text": "%1 ligger tillfälligt nere på grund av överbelastning. Var god återkom senare. " } \ No newline at end of file diff --git a/public/language/sv/tags.json b/public/language/sv/tags.json index 55142364eb..9af99f679c 100644 --- a/public/language/sv/tags.json +++ b/public/language/sv/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Fyll i taggar på %1 till %2 tecken här.", "enter_tags_here_short": "Ange taggar...", "no_tags": "Det finns inga taggar ännu.", - "select_tags": "Välj Etiketter" + "select_tags": "Välj Etiketter", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/sv/themes/harmony.json b/public/language/sv/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/sv/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/sv/themes/persona.json b/public/language/sv/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/sv/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/sv/topic.json b/public/language/sv/topic.json index c5fe3cf631..db93c6b6d4 100644 --- a/public/language/sv/topic.json +++ b/public/language/sv/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Flyttad", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Kopiera IP", "ban-ip": "Banna IP", "view-history": "Redigera historik", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Ändra ägare", "thread_tools.select_category": "Välj kategori", "thread_tools.fork": "Grena ämne", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Ta bort ämne", "thread_tools.delete-posts": "Radera inlägg", "thread_tools.delete_confirm": "Är du säker på att du vill ta bort det här ämnet?", diff --git a/public/language/sv/user.json b/public/language/sv/user.json index 9374f2160a..26e1895936 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -9,7 +9,7 @@ "email": "E-post", "confirm_email": "Bekräfta e-postadress ", "account_info": "Konto", - "admin_actions_label": "Administrative Actions", + "admin_actions_label": "Administrativa åtgärder", "ban_account": "Bannlys konto", "ban_account_confirm": "Vill du verkligen bannlysa den här användaren?", "unban_account": "Ta bort bannlysning", @@ -24,7 +24,7 @@ "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": "Kontot raderat", - "account-content-deleted": "Account content deleted", + "account-content-deleted": "Kontots innehåll raderat", "fullname": "Hela namnet", "website": "Webbsida", "location": "Plats", @@ -43,7 +43,7 @@ "followers": "Följare", "following": "Följer", "blocks": "Blockerar", - "blocked-users": "Blocked users", + "blocked-users": "Blockerade användare", "block_toggle": "Ändra blockeringsinställning", "block_user": "Blockera användare", "unblock_user": "Sluta blockera användare", @@ -69,7 +69,7 @@ "upload_new_picture": "Ladda upp ny bild", "upload_new_picture_from_url": "Ladda upp ny bild via länk", "current_password": "Nuvarande lösenord", - "new_password": "New Password", + "new_password": "Nytt lösenord", "change_password": "Ändra lösenord", "change_password_error": "Ogiltigt lösenord.", "change_password_error_wrong_current": "Ditt nuvarande lösenord är inte korrekt.", @@ -89,7 +89,7 @@ "remove_cover_picture_confirm": "Är du säker att du vill radera profilbilden?", "crop_picture": "Beskär bild", "upload_cropped_picture": "Beskär och ladda upp", - "avatar-background-colour": "Avatar background colour", + "avatar-background-colour": "Bakgrundsfärg för avatar", "settings": "Inställningar", "show_email": "Visa min e-postadress", "show_fullname": "Visa fullständigt namn", @@ -99,7 +99,7 @@ "digest_off": "Avslagen", "digest_daily": "Dagligen", "digest_weekly": "Veckovis", - "digest_biweekly": "Bi-Weekly", + "digest_biweekly": "Varannan vecka", "digest_monthly": "Månadsvis", "has_no_follower": "Denna användare har inga följare :(", "follows_no_one": "Denna användare följer ingen :(", @@ -121,7 +121,7 @@ "topic-post-sort": "Topic post sort", "max_items_per_page": "Maximalt %1", "acp_language": "Språk för administratörssida", - "notifications": "Notifications", + "notifications": "Notifieringar", "upvote-notif-freq": "Notisfrekvens för uppröstningar", "upvote-notif-freq.all": "Alla uppröstningar", "upvote-notif-freq.first": "Första per post", @@ -191,7 +191,7 @@ "consent.right_to_erasure_description": "Du kan när som helst ta tillbaka ditt medgivande till datainsamling och/eller behandling genom att radera ditt konto. Din individuella profil kan raderas, men innehåll du lagt upp kommer bestå. Om du vill radera både din profiloch ditt innehåll, vänligen kontakta detta forums administrativa team.", "consent.right_to_data_portability": "Du har rätten till dataförflyttbarhet", "consent.right_to_data_portability_description": "Du kan hämta en maskinläslig export av all insamlad data om dig och ditt konto. Du kan göra det genom att klicka på passande knapp nedan.", - "consent.export_profile": "Export Profile (.json)", + "consent.export_profile": "Exportera profil (.json)", "consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.", "consent.export_uploads": "Exportera uppladdat innehåll (.zip)", "consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.", @@ -199,7 +199,8 @@ "consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.", "emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.", "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", - "emailUpdate.required": "This field is required.", - "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.required": "Detta fält är obligatoriskt", + "emailUpdate.change-instructions": "Ett bekräftelsemail kommer skickas till den angivna epostadressen med en unik länk. Genom att trycka på länken bekräftar du att du äger epostadressen och den kommer att aktiveras på ditt konto. Du kan när som helst uppdatera din epost från din sida.", + "emailUpdate.password-challenge": "Ange ditt lösenord för att verifiera att du äger kontot.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/th/admin/extend/widgets.json b/public/language/th/admin/extend/widgets.json index 0d24c2f32a..9adfb98ab5 100644 --- a/public/language/th/admin/extend/widgets.json +++ b/public/language/th/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/th/admin/settings/email.json b/public/language/th/admin/settings/email.json index 35e713adc0..a3f49a0416 100644 --- a/public/language/th/admin/settings/email.json +++ b/public/language/th/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/th/error.json b/public/language/th/error.json index 0c772dc548..958bd892d6 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "กรุณากรอกแท็กให้ยาวขึ้น แท็กควรมีข้อความอย่างน้อย %1 ตัวอักษร(s)", "tag-too-long": "กรุณากรอกแท็กให้สั้นลง แท็กไม่สามารถยาวกว่า %1 ตัวอักษร(s)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "จำนวนแท็กไม่พอ กระทู้ต้องมีอย่างน้อย %1 แท็ก(s)", "too-many-tags": "แท็กเยอะเกินไป กระทู้ไม่สามารถมีแท็กมากกว่า %1 แท็ก(s)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/th/global.json b/public/language/th/global.json index f402b151cc..21d57d443e 100644 --- a/public/language/th/global.json +++ b/public/language/th/global.json @@ -6,11 +6,11 @@ "403.message": "ดูเหมือนว่าคุณจะได้รับการสกัดกั้นในหน้าเว็บที่คุณไม่สามารถเข้าถึงได้", "403.login": "Perhaps you should try logging in?", "404.title": "ไม่พบ", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "ระบบภายในเกิดข้อผิดพลาด", "500.message": "อุ่ย! มีสิ่งที่ไม่ถูกต้องเกิดขึ้น!", "400.title": "คำร้องขอที่เลวร้าย", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "ลงทะเบียน", "login": "เข้าสู่ระบบ", "please_log_in": "กรุณาเข้าสู่ระบบ", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "คุณได้เข้าสู่ระบบแล้ว", "save_changes": "บันทึกการเปลี่ยนแปลง", "save": "บันทึก", + "cancel": "Cancel", "close": "ปิด", "pagination": "การแบ่งหน้า", "pagination.out_of": "%1 จาก %2", @@ -60,6 +61,7 @@ "posts": "กระทู้", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "ดีที่สุด", "controversial": "Controversial", "votes": "โหวต", @@ -130,7 +132,9 @@ "edited": "ถูกแก้ไขแล้ว", "disabled": "ปิด", "select": "เลือก", + "copied": "Copied", "user-search-prompt": "Type something here to find users...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/th/groups.json b/public/language/th/groups.json index 6b3105e9ce..fc2e5eb756 100644 --- a/public/language/th/groups.json +++ b/public/language/th/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "กลุ่ม", "members": "Members", "view_group": "ดูกลุ่ม", diff --git a/public/language/th/modules.json b/public/language/th/modules.json index dadcde8853..3709009afa 100644 --- a/public/language/th/modules.json +++ b/public/language/th/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/th/pages.json b/public/language/th/pages.json index 963f5b0cf5..74eb775510 100644 --- a/public/language/th/pages.json +++ b/public/language/th/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Uploads by %1", "account/sessions": "Login Sessions", "confirm": "อีเมล์ได้รับการยืนยันแล้ว", - "maintenance.text": "%1 กำลังอยู่ระหว่างการปิดปรับปรุงชั่วคราว กรุณาลองใหม่อีกครั้งในภายหลัง", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "ผู้ดูแลระบบได้ฝากข้อความต่อไปนี้เอาไว้", "throttled.text": "%1 ไม่สามารถเข้าถึงได้ในขณะนี้เนื่องจากมีการโหลดที่หนักมากเกินไป กรุณากลับเข้ามาอีกครั้งในภายหลัง" } \ No newline at end of file diff --git a/public/language/th/tags.json b/public/language/th/tags.json index 00213c77c7..a56db67062 100644 --- a/public/language/th/tags.json +++ b/public/language/th/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "กรอกแท็กที่นี่ จำนวนอักขระอยู่ระหว่าง %1 และ %2 ตัวอักษรต่อ 1 แท็ก", "enter_tags_here_short": "ใส่ป้ายคำศัพท์ ...", "no_tags": "ยังไม่มีป้ายคำศัพท์", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/th/themes/harmony.json b/public/language/th/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/th/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/th/themes/persona.json b/public/language/th/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/th/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/th/topic.json b/public/language/th/topic.json index 797487c500..fedce6ade2 100644 --- a/public/language/th/topic.json +++ b/public/language/th/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "ถูกย้าย", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "คัดลอก IP", "ban-ip": "แบน IP", "view-history": "แก้ไขประวัติ", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Change Owner", "thread_tools.select_category": "เลือกประเภท", "thread_tools.fork": "แยกกระทู้", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "ลบกระทู้", "thread_tools.delete-posts": "ลบโพสต์", "thread_tools.delete_confirm": "มั่นใจแล้วหรือไม่ที่จะลบ Topic นี้?", diff --git a/public/language/th/user.json b/public/language/th/user.json index 707cb2f684..af864cdd77 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/tr/admin/extend/widgets.json b/public/language/tr/admin/extend/widgets.json index f3017cb376..14d4026c8e 100644 --- a/public/language/tr/admin/extend/widgets.json +++ b/public/language/tr/admin/extend/widgets.json @@ -8,9 +8,9 @@ "containers.none": "Kutucuk Yok", "container.well": "Çukur", "container.jumbotron": "Büyük Gösterim", - "container.card": "Card", - "container.card-header": "Card Header", - "container.card-body": "Card Body", + "container.card": "Kart", + "container.card-header": "Kart Başlığı", + "container.card-body": "Kart İçeriği", "container.alert": "Uyarı", "alert.confirm-delete": "Bu bileşeni silmek istediğinizden emin misiniz?", @@ -26,5 +26,7 @@ "container.placeholder": "Bir kutucuğu sürükle ve buraya bırak veya HTML gir", "show-to-groups": "Şu gruplara göster", "hide-from-groups": "Şu gruplara gösterme", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Mobilde gösterme" } \ 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 1a6538c933..209a1547c5 100644 --- a/public/language/tr/admin/settings/email.json +++ b/public/language/tr/admin/settings/email.json @@ -42,7 +42,7 @@ "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.remove-images": "Görselleri e-posta bildirimlerinden kaldır", "require-email-address": "Yeni kullanıcıların bir e-posta adresi belirtmesini gerektir", - "require-email-address-warning": "Varsayılan olarak kullanıcıların bir e-posta adresi girmesi devre dışıdır. Bu seçeneğin etkinleştirirseniz kullanıcı kayıt esnasında bir e-posta adresi girmek zorunda kalır. Elbette bu kullanıcının gerçek bir e-posta adresi veya kendine ait olan bir e-posta girdiği anlamını her zaman taşımaz.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Bir e-posta eklendiğinde veya değiştirildiğinde doğrulama için e-posta gönderilsin", "include-unverified-emails": "E-postalarını onaylamayan alıcılara onay e-postası gönderin", "include-unverified-warning": "Varsayılan olarak, hesaplarıyla ilişkili e-postaları olan kullanıcılar (Sosyal Login) zaten doğrulanmıştır, ancak durumun böyle olmadığı durumlar vardır (ör. Riski size ait olmak üzere bu ayarı etkinleştirin – doğrulanmamış adreslere e-posta göndermek, bölgesel istenmeyen posta önleme yasalarının ihlali olabilir.", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index 1d61e877d0..01711531df 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -92,6 +92,7 @@ "already-posting": "Halihazırda ileti gönderiyorsunuz...", "tag-too-short": "Lütfen daha uzun bir etiket girin. Etiketler en az %1 karakter içermelidir.", "tag-too-long": "Lütfen daha kısa bir etiket girin. Etiketler %1 karakterden uzun olamaz.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Yeterince etiket yok. Başlılar en az %1 etikete sahip olmalıdır", "too-many-tags": "Etiket sayısı çok fazla. Başlıklar en fazla %1 etikete sahip olabilir", "cant-use-system-tag": "Bu sistem etiketini kullanamazsınız.", diff --git a/public/language/tr/global.json b/public/language/tr/global.json index 552fc04b98..924e57bb86 100644 --- a/public/language/tr/global.json +++ b/public/language/tr/global.json @@ -6,11 +6,11 @@ "403.message": "Erişim izniniz olmayan bir sayfaya denk gelmiş gibisiniz.", "403.login": "Perhaps you should try logging in?", "404.title": "Bulunamadı", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Dahili hata.", "500.message": "Ups! Bir şeyler ters gitti sanki!", "400.title": "Geçersiz istek.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Kayıt Ol", "login": "Giriş", "please_log_in": "Lütfen Giriş Yapınız", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Başarıyla giriş yaptınız!", "save_changes": "Değişiklikleri Kaydet", "save": "Kaydet", + "cancel": "Cancel", "close": "Kapat", "pagination": "Sayfalara numara koyma", "pagination.out_of": "%1 - %2", @@ -60,6 +61,7 @@ "posts": "İleti", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "En İyi", "controversial": "Tartışmalı", "votes": "Oy", @@ -130,7 +132,9 @@ "edited": "Düzenlendi", "disabled": "Devre dışı", "select": "Seç", + "copied": "Copied", "user-search-prompt": "Kullanıcı bulmak için buraya yazın ...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index 842d48b01b..58574ab0d7 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Gruplar", "members": "Members", "view_group": "Grubu Gör", diff --git a/public/language/tr/modules.json b/public/language/tr/modules.json index ed7be496e3..bfa38ccc0b 100644 --- a/public/language/tr/modules.json +++ b/public/language/tr/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Tarih", "composer.schedule-time": "Zaman", "composer.cancel-scheduling": "Zamanlamayı iptal et", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Tarihi ayarla", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/tr/pages.json b/public/language/tr/pages.json index 46a4dc6e36..5c7a4e7a91 100644 --- a/public/language/tr/pages.json +++ b/public/language/tr/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 kullanıcısının yüklediği dosyalar", "account/sessions": "Giriş Oturumları", "confirm": "E-posta Onaylandı", - "maintenance.text": "%1 şu anda bakımda. Lütfen bir süre sonra tekrar deneyin.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Ayrıca, yönetici şu mesaji bıraktı:", "throttled.text": "%1 şu anda kullanılamıyor. Lütfen daha sonra tekrar deneyiniz." } \ No newline at end of file diff --git a/public/language/tr/tags.json b/public/language/tr/tags.json index 4f07f16bee..b87a909d18 100644 --- a/public/language/tr/tags.json +++ b/public/language/tr/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Etiketleri buraya girin. %1-%2 karakter. Her etiketten sonra enter tuşuna basın.", "enter_tags_here_short": "Etiketleri gir...", "no_tags": "Henüz etiket yok.", - "select_tags": "Etiketleri Seç" + "select_tags": "Etiketleri Seç", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/tr/themes/harmony.json b/public/language/tr/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/tr/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/tr/themes/persona.json b/public/language/tr/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/tr/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/tr/topic.json b/public/language/tr/topic.json index 51d4c4b1c2..e074706f05 100644 --- a/public/language/tr/topic.json +++ b/public/language/tr/topic.json @@ -36,6 +36,7 @@ "scheduled": "Konu Zamanlandı", "moved": "Taşındı", "moved-from": "Şuradan taşındı: %1", + "copy-code": "Copy Code", "copy-ip": "IP Kopyala", "ban-ip": "IP Yasakla", "view-history": "Geçmişi Düzenle", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Sahibini Değiştir", "thread_tools.select_category": "Kategori Seç", "thread_tools.fork": "Konuyu Ayır", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Konuyu Sil", "thread_tools.delete-posts": "İletileri Sil", "thread_tools.delete_confirm": "Bu başlığı gerçekten silmek istediğinize emin misiniz?", diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 41371dce6a..748e182f5a 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -43,7 +43,7 @@ "followers": "Takipçiler", "following": "Takip Edilenler", "blocks": "Engellenenler", - "blocked-users": "Blocked users", + "blocked-users": "Engellenen Kullanıcılar", "block_toggle": "Blokta Geçiş Yap", "block_user": "Kullanıcıyı Engelle", "unblock_user": "Kullanıcı Engelini Kaldır", @@ -69,7 +69,7 @@ "upload_new_picture": "Yeni bir fotoğraf yükle", "upload_new_picture_from_url": "İnternetten yeni bir fotoğraf yükle", "current_password": "Şu anki şifre", - "new_password": "New Password", + "new_password": "Yeni Şifre", "change_password": "Şifre Değiştir", "change_password_error": "Geçersiz Şifre", "change_password_error_wrong_current": "Şu anki şifre doğru değil!", @@ -201,5 +201,6 @@ "emailUpdate.optional": "Bu bölüm tercihe bağlıdır. Bir e-posta adresi girmek zorunda değilsiniz, fakat onaylanmış bir e-posta adresi olmadan hesabınızı veya girişinizi e-posta adresiniz ile kurtaramazsınız. ", "emailUpdate.required": "Bu bölüm zorunludur.", "emailUpdate.change-instructions": "Girilen e-posta adresine kişiye özel bir bağlantı içeren bir onay e-postası gönderilecektir. Bu bağlantıya erişmek, e-posta adresinin sahibi olduğunuzu onaylayacak ve hesabınızda etkin hale gelecektir. İstediğiniz zaman, hesap sayfanızdan kayıtlı e-postanızı güncelleyebilirsiniz.", - "emailUpdate.password-challenge": "Hesabın size ait olduğunu doğrulamak için lütfen şifrenizi giriniz" + "emailUpdate.password-challenge": "Hesabın size ait olduğunu doğrulamak için lütfen şifrenizi giriniz", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/uk/admin/extend/widgets.json b/public/language/uk/admin/extend/widgets.json index d374eb78f1..ab6e3f2128 100644 --- a/public/language/uk/admin/extend/widgets.json +++ b/public/language/uk/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Drag and drop a container or enter HTML here.", "show-to-groups": "Show to groups", "hide-from-groups": "Hide from groups", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Hide on mobile" } \ No newline at end of file diff --git a/public/language/uk/admin/settings/email.json b/public/language/uk/admin/settings/email.json index 30dbc77964..68c750272b 100644 --- a/public/language/uk/admin/settings/email.json +++ b/public/language/uk/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Вкажіть, будь ласка, годину о котрій кожного дня буде надсилатися дайджест (наприклад 0 — це північ, а 17 — п'ята година вечора). Зверніть увагу, що година визначається згідно налаштувань сервера і може не співпадати з часом вашого комп'ютера.
Приблизний час сервера:
Наступний дайджест заплановано до відправки ", "notifications.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/uk/error.json b/public/language/uk/error.json index fc103a7100..924e35e270 100644 --- a/public/language/uk/error.json +++ b/public/language/uk/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Введіть, будь ласка, довший тег. Мінімальна довжина тегу %1 символ(ів)", "tag-too-long": "Введіть, будь ласка, коротший тег. Максимальна довжина тегу %1 символ(ів)", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Замало тегів. Тема повинна мати щонайменше %1 тег(и)", "too-many-tags": "Забагато тегів. Тема не може мати більше %1 тег(и)", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/uk/global.json b/public/language/uk/global.json index cf7c981658..2f7a765bbc 100644 --- a/public/language/uk/global.json +++ b/public/language/uk/global.json @@ -6,11 +6,11 @@ "403.message": "Здається ви натрапили на сторінку до якої не маєте доступу.", "403.login": "Perhaps you should try logging in?", "404.title": "Не знайдено", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Внутрішня помилка.", "500.message": "Ой! Здається щось пішло не так!", "400.title": "Помилковий запит.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Реєстрація", "login": "Логін", "please_log_in": "Увійдіть, будь-ласка", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Ви успішно увійшли", "save_changes": "Зберегти зміни", "save": "Зберегти", + "cancel": "Cancel", "close": "Закрити", "pagination": "Розбиття на сторінки", "pagination.out_of": "%1 із %2", @@ -60,6 +61,7 @@ "posts": "Пости", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Найкращі", "controversial": "Controversial", "votes": "Голоси", @@ -130,7 +132,9 @@ "edited": "Відредаговано", "disabled": "Вимкнено", "select": "Обрати", + "copied": "Copied", "user-search-prompt": "Введіть щось тут, щоб знайти користувачів...", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/uk/groups.json b/public/language/uk/groups.json index 2763776ebc..88392d43e2 100644 --- a/public/language/uk/groups.json +++ b/public/language/uk/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Групи", "members": "Members", "view_group": "Переглянути групу", diff --git a/public/language/uk/modules.json b/public/language/uk/modules.json index 7f1c5bf34b..d93fe12652 100644 --- a/public/language/uk/modules.json +++ b/public/language/uk/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/uk/pages.json b/public/language/uk/pages.json index 0d2323529e..d9d9d63c41 100644 --- a/public/language/uk/pages.json +++ b/public/language/uk/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Завантаження від %1", "account/sessions": "Логін-сесії", "confirm": "Електронну пошту підтверджено", - "maintenance.text": "%1 в данний час на технічному обслуговувані. Завітайте, будь ласка, пізніше.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Крім того, адміністратор залишив це повідомлення:", "throttled.text": "%1 в даний час недоступний через надмірне навантаження. Завітайте, будь ласка, пізніше." } \ No newline at end of file diff --git a/public/language/uk/tags.json b/public/language/uk/tags.json index 48eb97f025..e192101ed6 100644 --- a/public/language/uk/tags.json +++ b/public/language/uk/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Введіть тег сюди, між літерами %1 та %2 кожен", "enter_tags_here_short": "Введіть тег", "no_tags": "Ще немає тегів", - "select_tags": "Select Tags" + "select_tags": "Select Tags", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/uk/themes/harmony.json b/public/language/uk/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/uk/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/uk/themes/persona.json b/public/language/uk/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/uk/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/uk/topic.json b/public/language/uk/topic.json index 73c18514f6..d5523dde59 100644 --- a/public/language/uk/topic.json +++ b/public/language/uk/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "Переміщена", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "Копіювати IP", "ban-ip": "Заблокувати IP", "view-history": "Редагувати історію", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Змінити Власника", "thread_tools.select_category": "Обрати Категорію", "thread_tools.fork": "Відгалужити тему", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Видалити тему", "thread_tools.delete-posts": "Видалити пости", "thread_tools.delete_confirm": "Ви точно бажаєте видалити цю тему?", diff --git a/public/language/uk/user.json b/public/language/uk/user.json index 942fd1f48b..58e88f2e35 100644 --- a/public/language/uk/user.json +++ b/public/language/uk/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/vi/admin/extend/widgets.json b/public/language/vi/admin/extend/widgets.json index 6bd63fdf91..10034cea38 100644 --- a/public/language/vi/admin/extend/widgets.json +++ b/public/language/vi/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "Kéo và thả một vùng chứa hoặc nhập HTML vào đây.", "show-to-groups": "Hiển thị lên nhóm", "hide-from-groups": "Ẩn khỏi nhóm", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "Ẩn trên thiết bị di động" } \ No newline at end of file diff --git a/public/language/vi/admin/settings/email.json b/public/language/vi/admin/settings/email.json index 39332d35cb..fa1a23ab66 100644 --- a/public/language/vi/admin/settings/email.json +++ b/public/language/vi/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "Vui lòng nhập một số đại diện cho giờ để gửi thông báo email đã lên lịch (VD: 0 cho nửa đêm, 17 cho 5h chiều). Hãy nhớ rằng đây là giờ theo chính máy chủ và có thể không khớp chính xác với đồng hồ hệ thống của bạn.
Thời gian máy chủ gần đúng là:
Thông báo hàng ngày kế tiếp được lên lịch để gửi ", "notifications.remove-images": "Xóa hình ảnh khỏi thông báo email", "require-email-address": "Bắt buộc người dùng mới phải điền địa chỉ email", - "require-email-address-warning": "Theo mặc định, người dùng có thể từ chối nhập địa chỉ email bằng cách để trống trường. Bật tùy chọn này có nghĩa là họ phải nhập địa chỉ email để tiến hành đăng ký. Nó không đảm bảo người dùng sẽ nhập địa chỉ email thực, thậm chí cả địa chỉ mà họ sở hữu.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Gửi email xác thực khi một email được thêm vào hoặc thay đổi", "include-unverified-emails": "Gửi email đến những người nhận chưa xác nhận rõ ràng email của họ", "include-unverified-warning": "Theo mặc định, người dùng có email được liên kết với tài khoản của họ đã được xác minh, nhưng có những trường hợp không phải như vậy (ví dụ: đăng nhập SSO, người dùng phổ thông, v.v.). Bạn tự chịu rủi ro khi bật cài đặt này – gửi email đến các địa chỉ chưa được xác minh có thể vi phạm luật chống thư rác trong khu vực.", diff --git a/public/language/vi/error.json b/public/language/vi/error.json index 5b6e6d3d6a..b8f39e0756 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "Vui lòng nhập tag dài hơn. Tag phải có tối thiểu %1 ký tự.", "tag-too-long": "Vui lòng nhập tag ngắn hơn. Tag chỉ có thể có tối đa %1 ký tự.", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "Không đủ thẻ. Chủ đề phải có ít nhất %1 thẻ.", "too-many-tags": "Quá nhiều tag. Chủ đề chỉ có thể có tối đa %1 tag.", "cant-use-system-tag": "Bạn không thể dùng thẻ hệ thống này.", diff --git a/public/language/vi/global.json b/public/language/vi/global.json index c7861b6b2b..bc6b5ba39c 100644 --- a/public/language/vi/global.json +++ b/public/language/vi/global.json @@ -6,11 +6,11 @@ "403.message": "Dường như bạn đã tình cờ gặp một trang mà bạn không có quyền truy cập.", "403.login": "Perhaps you should try logging in?", "404.title": "Không Tìm Thấy", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "Lỗi Bên Trong.", "500.message": "Úi chà! Có vẻ như đã xảy ra sự cố!", "400.title": "Yêu Cầu Không Hợp Lệ.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "Đăng ký", "login": "Đăng nhập", "please_log_in": "Vui Lòng Đăng Nhập", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "Bạn đã đăng nhập thành công", "save_changes": "Lưu thay đổi", "save": "Lưu", + "cancel": "Cancel", "close": "Đóng", "pagination": "Phân trang", "pagination.out_of": "%1 trong số %2", @@ -60,6 +61,7 @@ "posts": "Bài Viết", "x-posts": "%1 bài đăng", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "Tốt", "controversial": "Gây tranh cãi", "votes": "Bình chọn", @@ -130,7 +132,9 @@ "edited": "Đã cập nhật", "disabled": "Đã tắt", "select": "Chọn", + "copied": "Copied", "user-search-prompt": "Nhập để tìm kiếm thành viên", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index 5f8f980aeb..e30a4cba57 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "Nhóm", "members": "Members", "view_group": "Xem nhóm", diff --git a/public/language/vi/modules.json b/public/language/vi/modules.json index 7509e59864..82dbd9e1ea 100644 --- a/public/language/vi/modules.json +++ b/public/language/vi/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Ngày", "composer.schedule-time": "Thời gian", "composer.cancel-scheduling": "Hủy Lập Lịch", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Đặt Ngày", "composer.discard-all-drafts": "Hủy tất cả bản nháp", "composer.no-drafts": "Bạn không có bản nháp nào", diff --git a/public/language/vi/pages.json b/public/language/vi/pages.json index baa1b63e6b..5528cd22e6 100644 --- a/public/language/vi/pages.json +++ b/public/language/vi/pages.json @@ -60,7 +60,7 @@ "account/uploads": "Tải lên bởi %1", "account/sessions": "Phiên Đăng Nhập", "confirm": "Đã xác nhận email", - "maintenance.text": "%1 hiện đang được bảo trì. Vui lòng quay lại lúc khác.", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "Ngoài ra, quản trị viên đã để lại thông báo này:", "throttled.text": "%1 hiện không khả dụng do quá tải. Vui lòng quay lại vào lúc khác." } \ No newline at end of file diff --git a/public/language/vi/tags.json b/public/language/vi/tags.json index 9f9886bb55..a4c501ce65 100644 --- a/public/language/vi/tags.json +++ b/public/language/vi/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "Nhập thẻ ở đây, mỗi thẻ phải có từ %1 tới %2 ký tự.", "enter_tags_here_short": "Nhập thẻ...", "no_tags": "Chưa có thẻ nào.", - "select_tags": "Chọn Thẻ" + "select_tags": "Chọn Thẻ", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/vi/themes/harmony.json b/public/language/vi/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/vi/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/vi/themes/persona.json b/public/language/vi/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/vi/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/vi/topic.json b/public/language/vi/topic.json index 340f13bc97..08de0dd083 100644 --- a/public/language/vi/topic.json +++ b/public/language/vi/topic.json @@ -36,6 +36,7 @@ "scheduled": "Lên kế hoạch", "moved": "Chuyển đi", "moved-from": "Đã chuyển từ %1", + "copy-code": "Copy Code", "copy-ip": "Sao chép IP", "ban-ip": "Cấm IP", "view-history": "Lịch sử chỉnh sửa", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "Đổi chủ sở hữu", "thread_tools.select_category": "Chọn chuyện mục", "thread_tools.fork": "Tạo bản sao chủ đề", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "Xóa chủ đề", "thread_tools.delete-posts": "Xoá bài viết", "thread_tools.delete_confirm": "Bạn có muốn xóa chủ đề này?", diff --git a/public/language/vi/user.json b/public/language/vi/user.json index 2cd6c7701c..6a747e04cc 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "Mục này không bắt buộc. Bạn không có nghĩa vụ cung cấp địa chỉ email của mình, nhưng nếu không có email được xác thực, bạn sẽ không thể khôi phục tài khoản hoặc đăng nhập bằng email của mình.", "emailUpdate.required": "Trường này là bắt buộc.", "emailUpdate.change-instructions": "Một email xác nhận sẽ được gửi đến địa chỉ email đã nhập với một liên kết duy nhất. Việc truy cập vào liên kết đó sẽ xác nhận quyền sở hữu của bạn đối với địa chỉ email và nó sẽ có hiệu lực trên tài khoản của bạn. Bất cứ lúc nào, bạn có thể cập nhật email của mình trong hồ sơ từ trong trang tài khoản của bạn.", - "emailUpdate.password-challenge": "Nhập mật khẩu của bạn để xác minh quyền sở hữu tài khoản." + "emailUpdate.password-challenge": "Nhập mật khẩu của bạn để xác minh quyền sở hữu tài khoản.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/zh-CN/admin/extend/widgets.json b/public/language/zh-CN/admin/extend/widgets.json index e09f2488fd..f6fd2af026 100644 --- a/public/language/zh-CN/admin/extend/widgets.json +++ b/public/language/zh-CN/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "将容器拖拽至此处或在此处输入HTML", "show-to-groups": "对群组显示", "hide-from-groups": "对群组隐藏", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "在移动端隐藏" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/email.json b/public/language/zh-CN/admin/settings/email.json index 96eac85cae..019d8cbdc3 100644 --- a/public/language/zh-CN/admin/settings/email.json +++ b/public/language/zh-CN/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "请输入一个代表小时的数字来发送计划的电子邮件摘要 (例如,对于午夜,0,对于下午5:00,17)。 请记住,这是根据服务器本身的时间,可能与您的系统时钟不完全匹配。
服务器的大致时间为:
下一个每日摘要被计划在发送", "notifications.remove-images": "从电子邮件通知中删除图像", "require-email-address": "要求新用户指定电子邮箱地址", - "require-email-address-warning": "默认情况下,用户可以通过将该字段留空来选择不输入电子邮件地址。启用此选项意味着他们必须输入电子邮件地址才能继续注册。它不能确保用户输入真实的电子邮件地址,甚至也不能确保他们拥有该地址。", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "添加或更改电子邮件时发送验证电子邮件", "include-unverified-emails": "向尚未明验证其电子邮箱的人发送电子邮件", "include-unverified-warning": "默认情况下,账号有邮件地址关联的用户是已核实的用户,但有些情况下不是这样(例如,单点登录,遗留用户等等)。您自行承担启用此设置的风险——发送邮件给未核实的用户可能会违反地区性的反垃圾邮件法律。", diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index e933f4858d..298b488e34 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -92,6 +92,7 @@ "already-posting": "您已在发布帖子", "tag-too-short": "请输入一个更长的标签。标签应当包含不少于 %1 个字符", "tag-too-long": "请输入一个更短的标签。标签不能超过 %1 个字符", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "没有足够的标签。主题必须至少有 %1 个标签。", "too-many-tags": "标签过多。主题不能拥有超过 %1 个标签。", "cant-use-system-tag": "您不能使用此系统标签。", diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json index 580dc0c073..8889a22824 100644 --- a/public/language/zh-CN/global.json +++ b/public/language/zh-CN/global.json @@ -6,11 +6,11 @@ "403.message": "您似乎碰到了一个您没有访问权限的页面。", "403.login": "请您尝试登录后再试", "404.title": "未找到", - "404.message": "您访问的页面不存在, 返回首页", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "内部错误", "500.message": "哎呀!看来是哪里出错了!", "400.title": "错误的请求", - "400.message": "这个链接的格式可能不正确,请再次检查并重试。或者返回主页。", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "注册", "login": "登录", "please_log_in": "请登录", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "您已成功登录", "save_changes": "保存更改", "save": "保存", + "cancel": "Cancel", "close": "关闭", "pagination": "分页", "pagination.out_of": "%1 / %2", @@ -60,6 +61,7 @@ "posts": "帖子", "x-posts": "%1 个帖子", "x-topics": "%1 个主题", + "x-reputation": "%1 reputation", "best": "最佳", "controversial": "有争议的", "votes": "赞同", @@ -130,7 +132,9 @@ "edited": "已编辑", "disabled": "禁用", "select": "选择", + "copied": "Copied", "user-search-prompt": "输入以查找用户", "hidden": "隐藏", - "sort": "排序" + "sort": "排序", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/zh-CN/groups.json b/public/language/zh-CN/groups.json index d10a359ab6..ad6acf9bfa 100644 --- a/public/language/zh-CN/groups.json +++ b/public/language/zh-CN/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "群组", "members": "成员", "view_group": "查看群组", diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index 837aadeb39..4d1575eb85 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "日期", "composer.schedule-time": "时间", "composer.cancel-scheduling": "取消定时", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "设置日期", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 008509c79b..b2e280ac12 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 上传的文件", "account/sessions": "已登录的会话", "confirm": "电子邮箱已确认", - "maintenance.text": "%1 正在进行维护。请稍后再来。", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "此外,管理员留下的消息:", "throttled.text": "%1 因负荷超载暂不可用。请稍后再来。" } \ No newline at end of file diff --git a/public/language/zh-CN/tags.json b/public/language/zh-CN/tags.json index 6b8193f7b6..0ff107df86 100644 --- a/public/language/zh-CN/tags.json +++ b/public/language/zh-CN/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "在这里输入标签,每个标签 %1 到 %2 个字符。", "enter_tags_here_short": "输入标签...", "no_tags": "尚无标签。", - "select_tags": "选择标签" + "select_tags": "选择标签", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/zh-CN/themes/harmony.json b/public/language/zh-CN/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/zh-CN/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/zh-CN/themes/persona.json b/public/language/zh-CN/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/zh-CN/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index 112cb3d171..0343131cbf 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -36,6 +36,7 @@ "scheduled": "已定时", "moved": "已移动", "moved-from": "移自%1版 ", + "copy-code": "Copy Code", "copy-ip": "复制IP", "ban-ip": "封禁 IP", "view-history": "编辑历史", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "更改所有者", "thread_tools.select_category": "选择版块", "thread_tools.fork": "分割主题", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "删除主题", "thread_tools.delete-posts": "删除回复", "thread_tools.delete_confirm": "确定要删除此主题吗?", diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 2bf7c8de65..f3e2c4ad08 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "此项为可选。您不必提供您的电子邮件地址,但如果没有一个经过验证的电子邮件地址,您将无法恢复您的账号或使用电子邮件登录。", "emailUpdate.required": "此字段为必填。", "emailUpdate.change-instructions": "将向输入的电子邮箱地址发送一封带有唯一链接的确认电子邮件。访问该链接将验证您对该电子邮箱的所有权,它将在您的账号上处于活动状态。在任何时候,您都可以在您的账号页面更新存档的电子邮箱地址。", - "emailUpdate.password-challenge": "请输入您的密码以验证账号所有权。" + "emailUpdate.password-challenge": "请输入您的密码以验证账号所有权。", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/language/zh-TW/admin/extend/widgets.json b/public/language/zh-TW/admin/extend/widgets.json index a89a37eb55..287bc76001 100644 --- a/public/language/zh-TW/admin/extend/widgets.json +++ b/public/language/zh-TW/admin/extend/widgets.json @@ -26,5 +26,7 @@ "container.placeholder": "將容器拖拽至此處或在此處輸入HTML", "show-to-groups": "對群組顯示", "hide-from-groups": "對群組隱藏", + "start-date": "Start date", + "end-date": "End date", "hide-on-mobile": "在移動端隱藏" } \ No newline at end of file diff --git a/public/language/zh-TW/admin/settings/email.json b/public/language/zh-TW/admin/settings/email.json index 3289f089ee..9083eb60f2 100644 --- a/public/language/zh-TW/admin/settings/email.json +++ b/public/language/zh-TW/admin/settings/email.json @@ -42,7 +42,7 @@ "subscriptions.hour-help": "請輸入一個代表小時的數字來發送排程的電子郵件摘要 (例如,對於午夜,0,對於下午5:00,17)。 請記住,這是根據伺服器本身的時間,可能與您的系統時鐘不完全符合。
伺服器的大致時間為:
下一個每日摘要被排程在發送", "notifications.remove-images": "Remove images from email notifications", "require-email-address": "Require new users to specify an email address", - "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. It does not ensure user will enter a real email address, nor even an address they own.", + "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter and confirm an email address in order to proceed with registration and subsequent access to the forum. It does not ensure user will enter a real email address, nor even an address they own.", "send-validation-email": "Send validation emails when an email is added or changed", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json index 4f4577f29c..e8006eaa3e 100644 --- a/public/language/zh-TW/error.json +++ b/public/language/zh-TW/error.json @@ -92,6 +92,7 @@ "already-posting": "You are already posting", "tag-too-short": "標籤太短,不能少於 %1 個字元", "tag-too-long": "標籤太長,不能超過 %1 個字元", + "tag-not-allowed": "Tag not allowed", "not-enough-tags": "沒有足夠的主題標籤。主題必須至少有 %1 個標籤", "too-many-tags": "過多主題標籤。主題不能超過 %1 個標籤", "cant-use-system-tag": "You can not use this system tag.", diff --git a/public/language/zh-TW/global.json b/public/language/zh-TW/global.json index 25e4d71f3c..55930be7e6 100644 --- a/public/language/zh-TW/global.json +++ b/public/language/zh-TW/global.json @@ -6,11 +6,11 @@ "403.message": "您似乎沒有訪問此頁面的權限。", "403.login": "Perhaps you should try logging in?", "404.title": "未找到", - "404.message": "You seem to have stumbled upon a page that does not exist. Return to the home page.", + "404.message": "You seem to have stumbled upon a page that does not exist.
Return to the home page.
", "500.title": "內部錯誤", "500.message": "哎呀!看來是哪裡出錯了!", "400.title": "錯誤的請求", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "It looks like this link is malformed, please double-check and try again.
Return to the home page.
", "register": "註冊", "login": "登入", "please_log_in": "請登入", @@ -20,6 +20,7 @@ "you_have_successfully_logged_in": "您已成功登入", "save_changes": "儲存更改", "save": "儲存", + "cancel": "Cancel", "close": "關閉", "pagination": "分頁", "pagination.out_of": "%1 / %2", @@ -60,6 +61,7 @@ "posts": "貼文", "x-posts": "%1 posts", "x-topics": "%1 topics", + "x-reputation": "%1 reputation", "best": "最佳", "controversial": "Controversial", "votes": "評價", @@ -130,7 +132,9 @@ "edited": "已編輯", "disabled": "停用", "select": "選擇", + "copied": "Copied", "user-search-prompt": "輸入以搜尋使用者", "hidden": "Hidden", - "sort": "Sort" + "sort": "Sort", + "actions": "Actions" } \ No newline at end of file diff --git a/public/language/zh-TW/groups.json b/public/language/zh-TW/groups.json index 4d1e84b991..56b854e691 100644 --- a/public/language/zh-TW/groups.json +++ b/public/language/zh-TW/groups.json @@ -1,4 +1,5 @@ { + "all-groups": "All groups", "groups": "群組", "members": "Members", "view_group": "檢視群組", diff --git a/public/language/zh-TW/modules.json b/public/language/zh-TW/modules.json index fb5da0fd3a..54f06dd5fd 100644 --- a/public/language/zh-TW/modules.json +++ b/public/language/zh-TW/modules.json @@ -69,6 +69,7 @@ "composer.schedule-date": "Date", "composer.schedule-time": "Time", "composer.cancel-scheduling": "Cancel Scheduling", + "composer.change-schedule-date": "Change Date", "composer.set-schedule-date": "Set Date", "composer.discard-all-drafts": "Discard all drafts", "composer.no-drafts": "You have no drafts", diff --git a/public/language/zh-TW/pages.json b/public/language/zh-TW/pages.json index 4b1f1568cc..a2ae6ce15e 100644 --- a/public/language/zh-TW/pages.json +++ b/public/language/zh-TW/pages.json @@ -60,7 +60,7 @@ "account/uploads": "%1 上傳的檔案", "account/sessions": "已登入的會話", "confirm": "電子信箱已確認", - "maintenance.text": "%1 正在進行維護。請稍後再來。", + "maintenance.text": "%1 is currently undergoing maintenance.
Please come back another time.", "maintenance.messageIntro": "此外,管理員留下的訊息:", "throttled.text": "%1 因負荷超載暫不可用。請稍後再來。" } \ No newline at end of file diff --git a/public/language/zh-TW/tags.json b/public/language/zh-TW/tags.json index 2c8351838a..5f5d34922a 100644 --- a/public/language/zh-TW/tags.json +++ b/public/language/zh-TW/tags.json @@ -6,5 +6,6 @@ "enter_tags_here": "在這裡輸入標籤,每個標籤 %1 到 %2 個字元。", "enter_tags_here_short": "輸入標籤...", "no_tags": "尚無標籤。", - "select_tags": "選擇標籤" + "select_tags": "選擇標籤", + "tag-whitelist": "Tag Whitelist" } \ No newline at end of file diff --git a/public/language/zh-TW/themes/harmony.json b/public/language/zh-TW/themes/harmony.json new file mode 100644 index 0000000000..57e2def8d3 --- /dev/null +++ b/public/language/zh-TW/themes/harmony.json @@ -0,0 +1,14 @@ +{ + "skins": "Skins", + "collapse": "Collapse", + "expand": "Expand", + "login-register-to-search": "Login or register to search.", + "settings.title": "Theme settings", + "settings.enableQuickReply": "Enable quick reply", + "settings.centerHeaderElements": "Center header elements", + "settings.mobileTopicTeasers": "Show topic teasers on mobile", + "settings.stickyToolbar": "Sticky toolbar", + "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", + "settings.autohideBottombar": "Auto hide bottom bar", + "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down" +} \ No newline at end of file diff --git a/public/language/zh-TW/themes/persona.json b/public/language/zh-TW/themes/persona.json new file mode 100644 index 0000000000..e7d1945303 --- /dev/null +++ b/public/language/zh-TW/themes/persona.json @@ -0,0 +1,10 @@ +{ + "settings.title": "Theme settings", + "settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)", + "settings.mobile-menu-side": "Switch which side each mobile menu is on", + "settings.autoHidingNavbar": "Automatically hide the navbar on scroll", + "settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)", + "settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)", + "settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)", + "settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)" +} \ No newline at end of file diff --git a/public/language/zh-TW/topic.json b/public/language/zh-TW/topic.json index c36672ff37..d03f2f25ec 100644 --- a/public/language/zh-TW/topic.json +++ b/public/language/zh-TW/topic.json @@ -36,6 +36,7 @@ "scheduled": "Scheduled", "moved": "已移動", "moved-from": "Moved from %1", + "copy-code": "Copy Code", "copy-ip": "複製IP", "ban-ip": "禁用IP", "view-history": "編輯歷史", @@ -101,6 +102,7 @@ "thread_tools.change_owner": "更改所有者", "thread_tools.select_category": "選擇版面", "thread_tools.fork": "分割主題", + "thread_tools.tag": "Tag Topic", "thread_tools.delete": "刪除主題", "thread_tools.delete-posts": "刪除回覆", "thread_tools.delete_confirm": "確定要刪除此主題嗎?", diff --git a/public/language/zh-TW/user.json b/public/language/zh-TW/user.json index 3dcf6f7d8a..910000ec5a 100644 --- a/public/language/zh-TW/user.json +++ b/public/language/zh-TW/user.json @@ -201,5 +201,6 @@ "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.required": "This field is required.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", + "emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below." } \ No newline at end of file diff --git a/public/openapi/write.yaml b/public/openapi/write.yaml index 30ec5c326a..efc9c2bc46 100644 --- a/public/openapi/write.yaml +++ b/public/openapi/write.yaml @@ -142,8 +142,18 @@ paths: $ref: 'write/topics/tid/events.yaml' /topics/{tid}/events/{eventId}: $ref: 'write/topics/tid/events/eventId.yaml' + /topics/{tid}/read: + $ref: 'write/topics/tid/read.yaml' + /topics/{tid}/bump: + $ref: 'write/topics/tid/bump.yaml' /posts/{pid}: $ref: 'write/posts/pid.yaml' + /posts/{pid}/index: + $ref: 'write/posts/pid/index.yaml' + /posts/{pid}/raw: + $ref: 'write/posts/pid/raw.yaml' + /posts/{pid}/summary: + $ref: 'write/posts/pid/summary.yaml' /posts/{pid}/state: $ref: 'write/posts/pid/state.yaml' /posts/{pid}/move: @@ -158,6 +168,8 @@ paths: $ref: 'write/posts/pid/diffs/since.yaml' /posts/{pid}/diffs/{timestamp}: $ref: 'write/posts/pid/diffs/timestamp.yaml' + /posts/{pid}/replies: + $ref: 'write/posts/pid/replies.yaml' /chats/: $ref: 'write/chats.yaml' /chats/{roomId}: diff --git a/public/openapi/write/posts/pid/index.yaml b/public/openapi/write/posts/pid/index.yaml new file mode 100644 index 0000000000..fed5ae66c6 --- /dev/null +++ b/public/openapi/write/posts/pid/index.yaml @@ -0,0 +1,28 @@ +get: + tags: + - posts + summary: get post index + description: This operation retrieves a post's index relative to its topic + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post index successfully retrieved. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + index: + type: number diff --git a/public/openapi/write/posts/pid/raw.yaml b/public/openapi/write/posts/pid/raw.yaml new file mode 100644 index 0000000000..ceaf744e4b --- /dev/null +++ b/public/openapi/write/posts/pid/raw.yaml @@ -0,0 +1,28 @@ +get: + tags: + - posts + summary: get post's raw content + description: This operation retrieves a post's raw content (unparsed by markdown, etc.) + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post raw content successfully retrieved. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + content: + type: string diff --git a/public/openapi/write/posts/pid/replies.yaml b/public/openapi/write/posts/pid/replies.yaml new file mode 100644 index 0000000000..b021eec14e --- /dev/null +++ b/public/openapi/write/posts/pid/replies.yaml @@ -0,0 +1,234 @@ +get: + tags: + - posts + summary: get post replies + description: This operation retrieves a post's direct replies + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post replies successfully retrieved. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + replies: + type: array + items: + type: object + properties: + pid: + type: number + uid: + type: number + description: A user identifier + tid: + type: number + description: A topic identifier + content: + type: string + timestamp: + type: number + votes: + type: number + deleted: + type: number + upvotes: + type: number + downvotes: + type: number + bookmarks: + type: number + deleterUid: + type: number + edited: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + editedISO: + type: string + index: + type: number + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + reputation: + type: number + postcount: + type: number + topiccount: + type: number + picture: + type: string + nullable: true + signature: + type: string + banned: + type: number + banned:expire: + type: number + status: + type: string + lastonline: + type: number + groupTitle: + nullable: true + type: string + groupTitleArray: + type: array + items: + type: string + muted: + type: boolean + description: Whether or not the user has been muted. + mutedUntil: + type: number + description: A UNIX timestamp representing the moment a muted state will be lifted. + nullable: true + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + lastonlineISO: + type: string + banned_until: + type: number + banned_until_readable: + type: string + selectedGroups: + type: array + items: + type: object + properties: + name: + type: string + slug: + type: string + labelColor: + type: string + textColor: + type: string + icon: + type: string + userTitle: + type: string + custom_profile_info: + type: array + items: + type: object + properties: + content: + type: string + description: HTML that is injected into `topic.tpl` of themes that support custom profile info + editor: + nullable: true + bookmarked: + type: boolean + upvoted: + type: boolean + downvoted: + type: boolean + replies: + type: object + properties: + hasMore: + type: boolean + users: + type: array + items: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + administrator: + type: boolean + text: + type: string + count: + type: number + selfPost: + type: boolean + events: + type: array + items: + type: object + properties: + type: + type: string + id: + type: number + timestamp: + type: number + timestampISO: + type: string + topicOwnerPost: + type: boolean + display_edit_tools: + type: boolean + display_delete_tools: + type: boolean + display_moderator_tools: + type: boolean + display_move_tools: + type: boolean + display_post_menu: + type: boolean + flagId: + type: number + description: The flag identifier, if this particular post has been flagged before diff --git a/public/openapi/write/posts/pid/summary.yaml b/public/openapi/write/posts/pid/summary.yaml new file mode 100644 index 0000000000..29d46c4129 --- /dev/null +++ b/public/openapi/write/posts/pid/summary.yaml @@ -0,0 +1,70 @@ +get: + tags: + - posts + summary: get post summary + description: | + This operation retrieves a post full summary. + + This differs from the "get a post" call in that it will return the following additional information: + + * A minimal user object + * A topic object + * A category object + * Post content is run through the parser + + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post summary successfully retrieved. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + pid: + type: number + tid: + type: number + description: A topic identifier + content: + type: string + uid: + type: number + description: A user identifier + timestamp: + type: number + deleted: + type: number + upvotes: + type: number + downvotes: + type: number + replies: + type: number + votes: + type: number + timestampISO: + type: string + user: + type: object + additionalProperties: {} + topic: + type: object + additionalProperties: {} + category: + type: object + additionalProperties: {} + isMainPost: + type: boolean \ No newline at end of file diff --git a/public/openapi/write/topics/tid/bump.yaml b/public/openapi/write/topics/tid/bump.yaml new file mode 100644 index 0000000000..9ba0ecff26 --- /dev/null +++ b/public/openapi/write/topics/tid/bump.yaml @@ -0,0 +1,29 @@ +put: + tags: + - topics + summary: mark topic unread for all + description: | + This operation marks a topic as unread for all users. + + **Note**: This is a privileged call and can only be executed by administrators, global moderators, or the moderator for the category of the passed-in topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully marked unread for all + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/read.yaml b/public/openapi/write/topics/tid/read.yaml new file mode 100644 index 0000000000..80f75674a5 --- /dev/null +++ b/public/openapi/write/topics/tid/read.yaml @@ -0,0 +1,52 @@ +delete: + tags: + - topics + summary: mark topic unread + description: This operation marks a topic as unread for the calling user. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully marked unread. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +put: + tags: + - topics + summary: mark topic read + description: This operation marks a topic as read for the calling user. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully marked read + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/tags.yaml b/public/openapi/write/topics/tid/tags.yaml index 9f229d9707..d145f27374 100644 --- a/public/openapi/write/topics/tid/tags.yaml +++ b/public/openapi/write/topics/tid/tags.yaml @@ -1,4 +1,46 @@ put: + tags: + - topics + summary: update the tags of a topic + description: This operation updates the tags of the topic to the array of tags sent in the request + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + tags: + type: array + description: 'An array of tags' + items: + type: string + example: [test, foobar] + responses: + '200': + description: Topic tags successfully updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: array + description: 'The current tags of the topic' + items: + type: object + example: [{}, {}] +patch: tags: - topics summary: adds tags to a topic @@ -35,8 +77,11 @@ put: status: $ref: ../../../components/schemas/Status.yaml#/Status response: - type: object - properties: {} + type: array + description: 'The current tags of the topic' + items: + type: object + example: [{}, {}] delete: tags: - topics diff --git a/public/scss/generics.scss b/public/scss/generics.scss index 017d872434..39c585bee4 100644 --- a/public/scss/generics.scss +++ b/public/scss/generics.scss @@ -23,7 +23,9 @@ display: block; } } - +.dropdown-left .dropdown-menu { + --bs-position: start; +} .dropdown-right .dropdown-menu { --bs-position: end; } @@ -71,16 +73,6 @@ } } -#crop-picture-modal { - #cropped-image { - max-width: 100%; - } - - .cropper-container.cropper-bg { - max-width: 100%; - } -} - blockquote { background-color: $light; font-style: italic; diff --git a/public/scss/modals.scss b/public/scss/modals.scss index dcdd2ad465..ac414e8753 100644 --- a/public/scss/modals.scss +++ b/public/scss/modals.scss @@ -6,6 +6,16 @@ [component="category-selector-selected"] span { display: inline-flex!important; } + .bootstrap-tagsinput { + input { + width: 100%; + } + .ui-autocomplete { + max-height: 350px; + overflow-x: hidden; + overflow-y: auto; + } + } } @include media-breakpoint-down(md) { @@ -17,6 +27,12 @@ @include media-breakpoint-up(md) { .tool-modal { - max-width: 400px; + max-width: 500px; } } + +#crop-picture-modal { + .cropper-container.cropper-bg { + max-width: 100%; + } +} \ No newline at end of file diff --git a/public/src/app.js b/public/src/app.js index 295555f19f..a4e25beab2 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -289,6 +289,17 @@ if (document.readyState === 'loading') { }); }; + app.newReply = async function (tid) { + const [hooks, api] = await app.require(['hooks', 'api']); + const titleRaw = ajaxify.data.template.topic ? + ajaxify.data.titleRaw : + (await api.get(`/topics/${tid}`)).titleRaw; + hooks.fire('action:composer.post.new', { + tid: tid, + topicName: titleRaw, + }); + }; + app.loadJQueryUI = function (callback) { if (typeof $().autocomplete === 'function') { return callback(); diff --git a/public/src/client/category/tools.js b/public/src/client/category/tools.js index 3d95a87e27..b941e398bc 100644 --- a/public/src/client/category/tools.js +++ b/public/src/client/category/tools.js @@ -117,6 +117,17 @@ define('forum/category/tools', [ }); }); + components.get('topic/tag').on('click', async function () { + const tids = topicSelect.getSelectedTids(); + if (!tids.length) { + return alerts.error('[[error:no-topics-selected]]'); + } + const topics = await Promise.all(tids.map(tid => api.get(`/topics/${tid}`))); + require(['forum/topic/tag'], function (tag) { + tag.init(topics, ajaxify.data.tagWhitelist, onCommandComplete); + }); + }); + CategoryTools.removeListeners(); socket.on('event:topic_deleted', setDeleteState); socket.on('event:topic_restored', setDeleteState); diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 4c54e750a4..98833e1e92 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -103,15 +103,18 @@ define('forum/chats', [ }; Chats.addIPHandler = function (container) { - container.on('click', '.chat-ip-button', function () { - const ipEl = $(this).parent(); + container.on('click', '.chat-ip-button', async function () { + const ipEl = $(this); + let ip = ipEl.attr('data-ip'); + if (ip) { + navigator.clipboard.writeText(ip); + ipEl.translateText('[[global:copied]]'); + setTimeout(() => ipEl.text(ip), 2000); + return; + } const mid = ipEl.parents('[data-mid]').attr('data-mid'); - socket.emit('modules.chats.getIP', mid, function (err, ip) { - if (err) { - return alerts.error(err); - } - ipEl.html(ip); - }); + ip = await socket.emit('modules.chats.getIP', mid); + ipEl.text(ip).attr('data-ip', ip); }); }; @@ -379,7 +382,7 @@ define('forum/chats', [ }); }; - Chats.createAutoComplete = function (roomId, element) { + Chats.createAutoComplete = function (roomId, element, options = {}) { if (!element.length) { return; } @@ -395,12 +398,17 @@ define('forum/chats', [ }, placement: 'top', className: `chat-autocomplete-dropdown-${roomId} dropdown-menu textcomplete-dropdown`, + ...options, }, }; $(window).trigger('chat:autocomplete:init', data); if (data.strategies.length) { - Chats.activeAutocomplete[roomId] = autocomplete.setup(data); + const autocompleteEl = autocomplete.setup(data); + if (roomId) { + Chats.activeAutocomplete[roomId] = autocompleteEl; + } + return autocompleteEl; } }; diff --git a/public/src/client/chats/messages.js b/public/src/client/chats/messages.js index a0c05cae9f..e3bccacdca 100644 --- a/public/src/client/chats/messages.js +++ b/public/src/client/chats/messages.js @@ -9,47 +9,34 @@ define('forum/chats/messages', [ messages.sendMessage = async function (roomId, inputEl) { let message = inputEl.val(); - let mid = inputEl.attr('data-mid'); - if (!message.trim().length) { return; } const chatContent = inputEl.parents(`[component="chat/messages"][data-roomid="${roomId}"]`); inputEl.val('').trigger('input'); - inputEl.removeAttr('data-mid'); + messages.updateRemainingLength(inputEl.parent()); messages.updateTextAreaHeight(chatContent); - const payload = { roomId, message, mid }; - ({ roomId, message, mid } = await hooks.fire('filter:chat.send', payload)); + const payload = { roomId, message }; + ({ roomId, message } = await hooks.fire('filter:chat.send', payload)); - if (!mid) { - api.post(`/chats/${roomId}`, { message }).then(() => { - hooks.fire('action:chat.sent', { roomId, message, mid }); - }).catch((err) => { - inputEl.val(message).trigger('input'); - messages.updateRemainingLength(inputEl.parent()); - if (err.message === '[[error:email-not-confirmed-chat]]') { - return messagesModule.showEmailConfirmWarning(err.message); - } + api.post(`/chats/${roomId}`, { message }).then(() => { + hooks.fire('action:chat.sent', { roomId, message }); + }).catch((err) => { + inputEl.val(message).trigger('input'); + messages.updateRemainingLength(inputEl.parent()); + if (err.message === '[[error:email-not-confirmed-chat]]') { + return messagesModule.showEmailConfirmWarning(err.message); + } - return alerts.alert({ - alert_id: 'chat_spam_error', - title: '[[global:alert.error]]', - message: err.message, - type: 'danger', - timeout: 10000, - }); - }); - } else { - api.put(`/chats/${roomId}/messages/${mid}`, { message }).then(() => { - hooks.fire('action:chat.edited', { roomId, message, mid }); - }).catch((err) => { - inputEl.val(message).trigger('input'); - inputEl.attr('data-mid', mid); - messages.updateRemainingLength(inputEl.parent()); - return alerts.error(err); + return alerts.alert({ + alert_id: 'chat_spam_error', + title: '[[global:alert.error]]', + message: err.message, + type: 'danger', + timeout: 10000, }); - } + }); }; messages.updateRemainingLength = function (parent) { @@ -76,6 +63,15 @@ define('forum/chats/messages', [ }); }; + function autoresizeTextArea(textarea) { + const scrollHeight = textarea.prop('scrollHeight'); + textarea.css({ height: scrollHeight + 'px' }); + textarea.on('input', function () { + textarea.css({ height: 0 }); + textarea.css({ height: textarea.prop('scrollHeight') + 'px' }); + }); + } + messages.appendChatMessage = function (chatContentEl, data) { const lastSpeaker = parseInt(chatContentEl.find('.chat-message').last().attr('data-uid'), 10); const lasttimestamp = parseInt(chatContentEl.find('.chat-message').last().attr('data-timestamp'), 10); @@ -145,24 +141,63 @@ define('forum/chats/messages', [ .toggleClass('hidden', isAtBottom); }; - messages.prepEdit = function (inputEl, messageId, roomId) { - socket.emit('modules.chats.getRaw', { mid: messageId, roomId: roomId }, function (err, raw) { - if (err) { - return alerts.error(err); + messages.prepEdit = async function (inputEl, mid, roomId) { + const raw = await socket.emit('modules.chats.getRaw', { mid: mid, roomId: roomId }); + const editEl = await app.parseAndTranslate('partials/chats/edit-message', { + rawContent: raw, + }); + const messageBody = $(`[data-roomid="${roomId}"] [data-mid="${mid}"] [component="chat/message/body"]`); + const messageControls = $(`[data-roomid="${roomId}"] [data-mid="${mid}"] [component="chat/message/controls"]`); + const chatContent = messageBody.parents('.chat-content'); + + messageBody.addClass('hidden'); + messageControls.addClass('hidden'); + editEl.insertAfter(messageBody); + + const textarea = editEl.find('textarea'); + + textarea.focus().putCursorAtEnd(); + autoresizeTextArea(textarea); + + if (messages.isAtBottom(chatContent)) { + messages.scrollToBottom(chatContent); + } + + const chats = await app.require('forum/chats'); + const autoCompleteEl = chats.createAutoComplete(0, textarea, { + placement: 'bottom', + }); + + function finishEdit() { + messageBody.removeClass('hidden'); + messageControls.removeClass('hidden'); + editEl.remove(); + if (autoCompleteEl) { + autoCompleteEl.destroy(); } - // Populate the input field with the raw message content - if (inputEl.val().length === 0) { - // By setting the `data-mid` attribute, I tell the chat code that I am editing a - // message, instead of posting a new one. - inputEl.attr('data-mid', messageId).addClass('editing'); - inputEl.val(raw).trigger('input').focus(); - - hooks.fire('action:chat.prepEdit', { - inputEl: inputEl, - messageId: messageId, - roomId: roomId, - }); + } + editEl.find('[data-action="cancel"]').on('click', finishEdit); + + editEl.find('[data-action="save"]').on('click', function () { + const message = textarea.val(); + if (!message.trim().length) { + return; } + api.put(`/chats/${roomId}/messages/${mid}`, { message }).then(() => { + finishEdit(); + hooks.fire('action:chat.edited', { roomId, message, mid }); + }).catch((err) => { + textarea.val(message).trigger('input'); + alerts.error(err); + }); + }); + + hooks.fire('action:chat.prepEdit', { + inputEl: inputEl, + messageId: mid, + roomId: roomId, + editEl: editEl, + messageBody: messageBody, }); }; diff --git a/public/src/client/post-queue.js b/public/src/client/post-queue.js index fa12e43017..e2617b273e 100644 --- a/public/src/client/post-queue.js +++ b/public/src/client/post-queue.js @@ -138,15 +138,15 @@ define('forum/post-queue', [ break; case 'delete-account': - AccountsDelete.account(uid, ajaxify.refresh); + AccountsDelete.account(uid, ajaxify.go.bind(null, 'post-queue')); break; case 'delete-content': - AccountsDelete.content(uid, ajaxify.refresh); + AccountsDelete.content(uid, ajaxify.go.bind(null, 'post-queue')); break; case 'delete-all': - AccountsDelete.purge(uid, ajaxify.refresh); + AccountsDelete.purge(uid, ajaxify.go.bind(null, 'post-queue')); break; default: diff --git a/public/src/client/topic.js b/public/src/client/topic.js index d249447f3a..7143759506 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -15,10 +15,13 @@ define('forum/topic', [ 'hooks', 'api', 'alerts', + 'bootbox', + 'clipboard', ], function ( infinitescroll, threadTools, postTools, events, posts, navigator, sort, quickreply, - components, storage, hooks, api, alerts + components, storage, hooks, api, alerts, + bootbox, clipboard ) { const Topic = {}; let tid = 0; @@ -59,12 +62,14 @@ define('forum/topic', [ } addBlockQuoteHandler(); + addCodeBlockHandler(); addParentHandler(); addDropupHandler(); addRepliesHandler(); addPostsPreviewHandler(); setupQuickReply(); handleBookmark(tid); + handleThumbs(); $(window).on('scroll', utils.debounce(updateTopicTitle, 250)); @@ -169,6 +174,42 @@ define('forum/topic', [ } } + function handleThumbs() { + const listEl = document.querySelector('[component="topic/thumb/list"]'); + if (!listEl) { + return; + } + + listEl.addEventListener('click', async (e) => { + const clickedThumb = e.target.closest('a'); + if (clickedThumb) { + const clickedThumbIndex = Array.from(clickedThumb.parentNode.children).indexOf(clickedThumb); + e.preventDefault(); + const thumbs = ajaxify.data.thumbs.map(t => ({ ...t })); + thumbs.forEach((t, i) => { + t.selected = i === clickedThumbIndex; + }); + const html = await app.parseAndTranslate('modals/topic-thumbs-view', { + src: clickedThumb.href, + thumbs: thumbs, + }); + + const modal = bootbox.dialog({ + size: 'lg', + onEscape: true, + backdrop: true, + message: html, + }); + modal.on('click', '[component="topic/thumb/select"]', function () { + $('[component="topic/thumb/select"]').removeClass('border-primary'); + $(this).addClass('border-primary'); + $('[component="topic/thumb/current"]') + .attr('src', $(this).attr('src')); + }); + } + }); + } + function addBlockQuoteHandler() { components.get('topic').on('click', 'blockquote .toggle', function () { const blockQuote = $(this).parent('blockquote'); @@ -179,6 +220,30 @@ define('forum/topic', [ }); } + function addCodeBlockHandler() { + new clipboard('[component="copy/code/btn"]', { + text: function (trigger) { + const btn = $(trigger); + btn.find('i').removeClass('fa-copy').addClass('fa-check'); + setTimeout(() => btn.find('i').removeClass('fa-check').addClass('fa-copy'), 2000); + return btn.parent().find('code').text(); + }, + }); + + function addCopyCodeButton() { + let codeBlocks = $('[component="topic"] [component="post/content"] code:not([data-button-added])'); + codeBlocks = codeBlocks.filter((i, el) => $(el).text().includes('\n')); + const container = $('
'); + const buttonDiv = $(''); + codeBlocks.parent().wrap(container).parent().append(buttonDiv); + codeBlocks.parent().parent().find('[component="copy/code/btn"]').translateAttr('title', '[[topic:copy-code]]'); + codeBlocks.attr('data-button-added', 1); + } + hooks.registerPage('action:posts.loaded', addCopyCodeButton); + hooks.registerPage('action:topic.loaded', addCopyCodeButton); + hooks.registerPage('action:posts.edited', addCopyCodeButton); + } + function addParentHandler() { components.get('topic').on('click', '[component="post/parent"]', function (e) { const toPid = $(this).attr('data-topid'); @@ -250,7 +315,7 @@ define('forum/topic', [ destroyed = false; async function renderPost(pid) { - const postData = postCache[pid] || await socket.emit('posts.getPostSummaryByPid', { pid: pid }); + const postData = postCache[pid] || await api.get(`/posts/${pid}/summary`); $('#post-tooltip').remove(); if (postData && ajaxify.data.template.topic) { postCache[pid] = postData; @@ -326,7 +391,7 @@ define('forum/topic', [ currentUrl = newUrl; if (index >= elementCount && app.user.uid) { - socket.emit('topics.markAsRead', [ajaxify.data.tid]); + api.put(`/topics/${ajaxify.data.tid}/read`); } updateUserBookmark(index); diff --git a/public/src/client/topic/diffs.js b/public/src/client/topic/diffs.js index d635c4e0f6..22fca5868e 100644 --- a/public/src/client/topic/diffs.js +++ b/public/src/client/topic/diffs.js @@ -11,7 +11,13 @@ define('forum/topic/diffs', ['api', 'bootbox', 'alerts', 'forum/topic/images'], api.get(`/posts/${pid}/diffs`, {}).then((data) => { parsePostHistory(data).then(($html) => { - const $modal = bootbox.dialog({ title: '[[topic:diffs.title]]', message: $html, size: 'large' }); + const $modal = bootbox.dialog({ + title: '[[topic:diffs.title]]', + message: $html, + size: 'large', + onEscape: true, + backdrop: true, + }); if (!data.timestamps.length) { return; diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index 5e0c311f6b..9856095401 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -107,8 +107,8 @@ define('forum/topic/events', [ const editedPostEl = components.get('post/content', data.post.pid).filter(function (index, el) { return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10); }); - - const editorEl = $('[data-pid="' + data.post.pid + '"] [component="post/editor"]').filter(function (index, el) { + const postContainer = $(`[data-pid="${data.post.pid}"]`); + const editorEl = postContainer.find('[component="post/editor"]').filter(function (index, el) { return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10); }); const topicTitle = components.get('topic/title'); @@ -150,7 +150,10 @@ define('forum/topic/events', [ app.parseAndTranslate('partials/topic/post-editor', editData, function (html) { editorEl.replaceWith(html); - $('[data-pid="' + data.post.pid + '"] [component="post/editor"] .timeago').timeago(); + postContainer.find('[component="post/edit-indicator"]') + .removeClass('hidden') + .translateAttr('title', `[[global:edited-timestamp, ${editData.editedISO}]]`); + postContainer.find('[component="post/editor"] .timeago').timeago(); hooks.fire('action:posts.edited', data); }); }); @@ -159,12 +162,8 @@ define('forum/topic/events', [ } if (data.topic.tags && data.topic.tagsupdated) { - Benchpress.render('partials/topic/tags', { tags: data.topic.tags }).then(function (html) { - const tags = $('[data-pid="' + data.post.pid + '"] .tags'); - tags.fadeOut(250, function () { - tags.toggleClass('hidden', data.topic.tags.length === 0); - tags.html(html).fadeIn(250); - }); + require(['forum/topic/tag'], function (tag) { + tag.updateTopicTags([data.topic]); }); } diff --git a/public/src/client/topic/fork.js b/public/src/client/topic/fork.js index c0e67b6adf..0a70b7e931 100644 --- a/public/src/client/topic/fork.js +++ b/public/src/client/topic/fork.js @@ -1,14 +1,18 @@ 'use strict'; -define('forum/topic/fork', ['components', 'postSelect', 'alerts'], function (components, postSelect, alerts) { +define('forum/topic/fork', [ + 'components', 'postSelect', 'alerts', 'categorySelector', +], function (components, postSelect, alerts, categorySelector) { const Fork = {}; let forkModal; let forkCommit; let fromTid; + let selectedCategory; Fork.init = function () { fromTid = ajaxify.data.tid; + selectedCategory = ajaxify.data.category; $(window).off('action:ajaxify.end', onAjaxifyEnd).on('action:ajaxify.end', onAjaxifyEnd); @@ -16,13 +20,22 @@ define('forum/topic/fork', ['components', 'postSelect', 'alerts'], function (com return; } - app.parseAndTranslate('modals/fork-topic', {}, function (html) { + app.parseAndTranslate('modals/fork-topic', { + selectedCategory: selectedCategory, + }, function (html) { forkModal = html; forkCommit = forkModal.find('#fork_thread_commit'); $('body').append(forkModal); + categorySelector.init(forkModal.find('[component="category-selector"]'), { + onSelect: function (category) { + selectedCategory = category; + }, + privilege: 'moderate', + }); + forkModal.find('#fork_thread_cancel').on('click', closeForkModal); forkModal.find('#fork-title').on('keyup', checkForkButtonEnable); @@ -44,11 +57,15 @@ define('forum/topic/fork', ['components', 'postSelect', 'alerts'], function (com } function createTopicFromPosts() { + if (!selectedCategory) { + return; + } forkCommit.attr('disabled', true); socket.emit('topics.createTopicFromPosts', { title: forkModal.find('#fork-title').val(), pids: postSelect.pids, fromTid: fromTid, + cid: selectedCategory.cid, }, function (err, newTopic) { function fadeOutAndRemove(pid) { components.get('post', 'pid', pid).fadeOut(500, function () { diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index 8873e4525b..c9c8771ed1 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -313,13 +313,9 @@ define('forum/topic/postTools', [ if (selectedNode.text && toPid && toPid === selectedNode.pid) { return quote(selectedNode.text); } - socket.emit('posts.getRawPost', toPid, function (err, post) { - if (err) { - return alerts.error(err); - } - quote(post); - }); + const { content } = await api.get(`/posts/${toPid}/raw`); + quote(content); }); } diff --git a/public/src/client/topic/tag.js b/public/src/client/topic/tag.js new file mode 100644 index 0000000000..232835b338 --- /dev/null +++ b/public/src/client/topic/tag.js @@ -0,0 +1,120 @@ +'use strict'; + + +define('forum/topic/tag', [ + 'alerts', 'autocomplete', 'api', 'benchpress', +], function (alerts, autocomplete, api, Benchpress) { + const Tag = {}; + let tagModal; + let tagCommit; + let topics; + let tagWhitelist; + Tag.init = function (_topics, _tagWhitelist, onComplete) { + if (tagModal) { + return; + } + topics = _topics; + tagWhitelist = _tagWhitelist || []; + + app.parseAndTranslate('modals/tag-topic', { + topics: topics, + tagWhitelist: tagWhitelist, + }, function (html) { + tagModal = html; + + tagCommit = tagModal.find('#tag-topic-commit'); + + $('body').append(tagModal); + + tagModal.find('#tag-topic-cancel').on('click', closeTagModal); + + tagCommit.on('click', async () => { + await tagTopics(); + if (onComplete) { + onComplete(); + } + }); + + tagModal.find('.tags').each((index, el) => { + const tagEl = $(el); + const tagsinputEl = tagEl.tagsinput({ + tagClass: 'badge bg-info', + confirmKeys: [13, 44], + trimValue: true, + }); + const input = tagsinputEl[0].$input; + + const topic = topics[index]; + topic.tags.forEach(tag => tagEl.tagsinput('add', tag.value)); + + tagEl.on('itemAdded', function (event) { + if (tagWhitelist.length && !tagWhitelist.includes(event.item)) { + tagEl.tagsinput('remove', event.item); + alerts.error('[[error:tag-not-allowed]]'); + } + if (input.length) { + input.autocomplete('close'); + } + }); + + initAutocomplete({ + input, + container: tagsinputEl[0].$container, + }); + }); + }); + }; + + function initAutocomplete(params) { + autocomplete.init({ + input: params.input, + position: { my: 'left bottom', at: 'left top', collision: 'flip' }, + appendTo: params.container, + source: async (request, response) => { + socket.emit('topics.autocompleteTags', { + query: request.term, + }, function (err, tags) { + if (err) { + return alerts.error(err); + } + if (tags) { + response(tags); + } + }); + }, + }); + } + + async function tagTopics() { + await Promise.all(tagModal.find('.tags').map(async (index, el) => { + const topic = topics[index]; + const tagEl = $(el); + topic.tags = await api.put(`/topics/${topic.tid}/tags`, { tags: tagEl.tagsinput('items') }); + Tag.updateTopicTags([topic]); + })); + closeTagModal(); + } + + Tag.updateTopicTags = function (topics) { + topics.forEach((topic) => { + // render "partials/category/tags" or "partials/topic/tags" + const tpl = ajaxify.data.template.topic ? 'partials/topic/tags' : 'partials/category/tags'; + Benchpress.render(tpl, { tags: topic.tags }).then(function (html) { + const tags = $(`[data-tid="${topic.tid}"][component="topic/tags"]`); + tags.fadeOut(250, function () { + tags.toggleClass('hidden', topic.tags.length === 0); + tags.html(html).fadeIn(250); + }); + }); + }); + }; + + function closeTagModal() { + if (tagModal) { + tagModal.remove(); + tagModal = null; + } + } + + return Tag; +}); diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index 4a44418273..da37ddb17c 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -60,27 +60,8 @@ define('forum/topic/threadTools', [ return false; }); - topicContainer.on('click', '[component="topic/event/delete"]', function () { - const eventId = $(this).attr('data-topic-event-id'); - const eventEl = $(this).parents('[component="topic/event"]'); - bootbox.confirm('[[topic:delete-event-confirm]]', (ok) => { - if (ok) { - api.del(`/topics/${tid}/events/${eventId}`, {}) - .then(function () { - eventEl.remove(); - }) - .catch(alerts.error); - } - }); - }); - - // todo: should also use topicCommand, but no write api call exists for this yet topicContainer.on('click', '[component="topic/mark-unread"]', function () { - socket.emit('topics.markUnread', tid, function (err) { - if (err) { - return alerts.error(err); - } - + topicCommand('del', '/read', undefined, () => { if (app.previousUrl && !app.previousUrl.match('^/topic')) { ajaxify.go(app.previousUrl, function () { handleBack.onBackClicked(true); @@ -91,19 +72,28 @@ define('forum/topic/threadTools', [ alerts.success('[[topic:mark_unread.success]]'); }); - return false; }); topicContainer.on('click', '[component="topic/mark-unread-for-all"]', function () { const btn = $(this); - socket.emit('topics.markAsUnreadForAll', [tid], function (err) { - if (err) { - return alerts.error(err); - } + topicCommand('put', '/bump', undefined, () => { alerts.success('[[topic:markAsUnreadForAll.success]]'); btn.parents('.thread-tools.open').find('.dropdown-toggle').trigger('click'); }); - return false; + }); + + topicContainer.on('click', '[component="topic/event/delete"]', function () { + const eventId = $(this).attr('data-topic-event-id'); + const eventEl = $(this).parents('[component="topic/event"]'); + bootbox.confirm('[[topic:delete-event-confirm]]', (ok) => { + if (ok) { + api.del(`/topics/${tid}/events/${eventId}`, {}) + .then(function () { + eventEl.remove(); + }) + .catch(alerts.error); + } + }); }); topicContainer.on('click', '[component="topic/move"]', function () { @@ -133,6 +123,12 @@ define('forum/topic/threadTools', [ }); }); + topicContainer.on('click', '[component="topic/tag"]', function () { + require(['forum/topic/tag'], function (tag) { + tag.init([ajaxify.data], ajaxify.data.tagWhitelist); + }); + }); + topicContainer.on('click', '[component="topic/move-posts"]', function () { require(['forum/topic/move-post'], function (movePosts) { movePosts.init(); diff --git a/public/src/client/topic/votes.js b/public/src/client/topic/votes.js index 7f8a08b500..6f4c624492 100644 --- a/public/src/client/topic/votes.js +++ b/public/src/client/topic/votes.js @@ -113,6 +113,8 @@ define('forum/topic/votes', [ message: html, className: 'vote-modal', show: true, + onEscape: true, + backdrop: true, }); dialog.on('click', function () { diff --git a/public/src/client/unread.js b/public/src/client/unread.js index e331636915..35cf397406 100644 --- a/public/src/client/unread.js +++ b/public/src/client/unread.js @@ -2,8 +2,8 @@ define('forum/unread', [ - 'forum/header/unread', 'topicSelect', 'components', 'topicList', 'categorySelector', 'alerts', -], function (headerUnread, topicSelect, components, topicList, categorySelector, alerts) { + 'forum/header/unread', 'topicSelect', 'components', 'topicList', 'categorySelector', 'alerts', 'api', +], function (headerUnread, topicSelect, components, topicList, categorySelector, alerts, api) { const Unread = {}; Unread.init = function () { @@ -37,11 +37,8 @@ define('forum/unread', [ if (!tids.length) { return; } - socket.emit('topics.markAsRead', tids, function (err) { - if (err) { - return alerts.error(err); - } + Promise.all(tids.map(async tid => api.put(`/topics/${tid}/read`))).then(() => { doneRemovingTids(tids); }); } diff --git a/public/src/modules/autocomplete.js b/public/src/modules/autocomplete.js index a8f1e832e4..ae435e72bd 100644 --- a/public/src/modules/autocomplete.js +++ b/public/src/modules/autocomplete.js @@ -4,21 +4,21 @@ define('autocomplete', ['api', 'alerts'], function (api, alerts) { const module = {}; const _default = { delay: 200, + appendTo: null, }; module.init = (params) => { - const { input, source, onSelect, delay } = { ..._default, ...params }; - + const acParams = { ..._default, ...params }; + const { input, onSelect } = acParams; app.loadJQueryUI(function () { input.autocomplete({ - delay, + ...acParams, open: function () { $(this).autocomplete('widget').css('z-index', 100005); }, select: function (event, ui) { handleOnSelect(input, onSelect, event, ui); }, - source, }); }); }; diff --git a/public/src/modules/helpers.common.js b/public/src/modules/helpers.common.js index e424d650b6..32a8665f4e 100644 --- a/public/src/modules/helpers.common.js +++ b/public/src/modules/helpers.common.js @@ -28,6 +28,7 @@ module.exports = function (utils, Benchpress, relative_path) { generateRepliedTo, generateWrote, register, + isoTimeToLocaleString, __escape: identity, }; @@ -337,6 +338,10 @@ module.exports = function (utils, Benchpress, relative_path) { return `[[topic:wrote-${langSuffix}, ${relative_path}/post/${post.pid}, ${post.timestampISO}]]`; } + function isoTimeToLocaleString(isoTime) { + return new Date(isoTime).toLocaleString().replace(/,/g, ','); + } + function register() { Object.keys(helpers).forEach(function (helperName) { Benchpress.registerHelper(helperName, helpers[helperName]); diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index d85a51491c..1953e4d009 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -662,7 +662,7 @@ define('navigator', [ const postHeight = scrollTo.outerHeight(true); const navbarHeight = components.get('navbar').outerHeight(true) || 0; - const topicHeaderHeight = $('.topic-header').outerHeight(true) || 0; + const topicHeaderHeight = $('.topic-main-buttons').outerHeight(true) || 0; const viewportHeight = $(window).height(); // Temporarily disable navigator update on scroll diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js index 768dd8820b..56cd38e294 100644 --- a/public/src/modules/taskbar.js +++ b/public/src/modules/taskbar.js @@ -1,35 +1,33 @@ 'use strict'; -define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, translator, hooks) { +define('taskbar', ['translator', 'hooks'], function (translator, hooks) { const taskbar = {}; - + let noTaskbar = false; taskbar.init = function () { - const self = this; - - Benchpress.render('modules/taskbar', {}).then(function (html) { - self.taskbar = $(html); - self.tasklist = self.taskbar.find('ul'); - $(document.body).append(self.taskbar); - - self.taskbar.on('click', 'li', async function () { - const $btn = $(this); - const moduleName = $btn.attr('data-module'); - const uuid = $btn.attr('data-uuid'); - - const module = await app.require(moduleName); - if (!$btn.hasClass('active')) { - minimizeAll(); - module.load(uuid); - taskbar.toggleNew(uuid, false); - - taskbar.tasklist.removeClass('active'); - $btn.addClass('active'); - } else { - module.minimize(uuid); - } - return false; - }); + taskbar.taskbar = $('[component="taskbar"]'); + taskbar.tasklist = taskbar.taskbar.find('ul'); + if (!taskbar.taskbar.length || !taskbar.tasklist.length) { + noTaskbar = true; + return; + } + taskbar.taskbar.on('click', 'li', async function () { + const $btn = $(this); + const moduleName = $btn.attr('data-module'); + const uuid = $btn.attr('data-uuid'); + + const module = await app.require(moduleName); + if (!$btn.hasClass('active')) { + minimizeAll(); + module.load(uuid); + taskbar.toggleNew(uuid, false); + + taskbar.tasklist.removeClass('active'); + $btn.addClass('active'); + } else { + module.minimize(uuid); + } + return false; }); $(window).on('action:app.loggedOut', function () { @@ -38,6 +36,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.close = async function (moduleName, uuid) { + if (noTaskbar) { + return; + } // Sends signal to the appropriate module's .close() fn (if present) const btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]'); @@ -50,6 +51,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.closeAll = function (module) { + if (noTaskbar) { + return; + } // module is optional let selector = '[data-uuid]'; @@ -63,6 +67,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.discard = function (module, uuid) { + if (noTaskbar) { + return; + } const btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]'); btnEl.remove(); @@ -71,6 +78,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t taskbar.push = function (module, uuid, options, callback) { callback = callback || function () {}; + if (noTaskbar) { + return callback(); + } const element = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]'); const data = { @@ -90,6 +100,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.get = function (module) { + if (noTaskbar) { + return []; + } const items = $('[data-module="' + module + '"]').map(function (idx, el) { return $(el).data(); }); @@ -98,11 +111,17 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.minimize = function (module, uuid) { + if (noTaskbar) { + return; + } const btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]'); btnEl.toggleClass('active', false); }; taskbar.toggleNew = function (uuid, state, silent) { + if (noTaskbar) { + return; + } const btnEl = taskbar.tasklist.find('[data-uuid="' + uuid + '"]'); btnEl.toggleClass('new', state); @@ -112,7 +131,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.updateActive = function (uuid) { - if (!taskbar.tasklist) { + if (noTaskbar) { return; } @@ -125,11 +144,17 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.isActive = function (uuid) { + if (noTaskbar) { + return false; + } const taskBtn = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]'); return taskBtn.hasClass('active'); }; function update() { + if (noTaskbar) { + return; + } const tasks = taskbar.tasklist.find('li'); if (tasks.length > 0) { @@ -140,10 +165,16 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t } function minimizeAll() { + if (noTaskbar) { + return; + } taskbar.tasklist.find('.active').removeClass('active'); } function createTaskbarItem(data, callback) { + if (noTaskbar) { + return callback(); + } translator.translate(data.options.title, function (taskTitle) { const title = $('
').text(taskTitle || 'NodeBB Task').html(); @@ -196,6 +227,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t }; taskbar.update = function (module, uuid, options) { + if (noTaskbar) { + return; + } const element = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]'); if (!element.length) { return; diff --git a/public/src/modules/topicThumbs.js b/public/src/modules/topicThumbs.js index c7f7c10898..465bd518bd 100644 --- a/public/src/modules/topicThumbs.js +++ b/public/src/modules/topicThumbs.js @@ -55,6 +55,8 @@ define('topicThumbs', [ modal = bootbox.dialog({ title: '[[modules:thumbs.modal.title]]', message: html, + onEscape: true, + backdrop: true, buttons: { add: { label: ' [[modules:thumbs.modal.add]]', diff --git a/src/api/chats.js b/src/api/chats.js index 9f320d764e..2e7fe6dfd7 100644 --- a/src/api/chats.js +++ b/src/api/chats.js @@ -175,9 +175,9 @@ chatsAPI.kick = async (caller, data) => { // Additional checks if kicking vs leaving if (data.uids.length === 1 && parseInt(data.uids[0], 10) === caller.uid) { await messaging.leaveRoom([caller.uid], data.roomId); - } else { - await messaging.removeUsersFromRoom(caller.uid, data.uids, data.roomId); + return []; } + await messaging.removeUsersFromRoom(caller.uid, data.uids, data.roomId); delete data.uids; return chatsAPI.users(caller, data); diff --git a/src/api/groups.js b/src/api/groups.js index 840f5cf97a..2a85a25a27 100644 --- a/src/api/groups.js +++ b/src/api/groups.js @@ -155,13 +155,14 @@ groupsAPI.leave = async function (caller, data) { groups.isMember(data.uid, groupName), ]); - if (!userExists) { - throw new Error('[[error:invalid-uid]]'); - } if (!isMember) { throw new Error('[[error:group-not-member]]'); } + if (!userExists) { + throw new Error('[[error:invalid-uid]]'); + } + if (groupData.disableLeave && isSelf) { throw new Error('[[error:group-leave-disabled]]'); } diff --git a/src/api/posts.js b/src/api/posts.js index d1cb66cf44..cb2621ec81 100644 --- a/src/api/posts.js +++ b/src/api/posts.js @@ -8,6 +8,7 @@ const user = require('../user'); const posts = require('../posts'); const topics = require('../topics'); const groups = require('../groups'); +const plugins = require('../plugins'); const meta = require('../meta'); const events = require('../events'); const privileges = require('../privileges'); @@ -23,17 +24,15 @@ postsAPI.get = async function (caller, data) { posts.getPostData(data.pid), posts.hasVoted(data.pid, caller.uid), ]); - if (!post) { - return null; - } - Object.assign(post, voted); - const userPrivilege = userPrivileges[0]; - if (!userPrivilege.read || !userPrivilege['topics:read']) { + + if (!post || !userPrivilege.read || !userPrivilege['topics:read']) { return null; } + Object.assign(post, voted); post.ip = userPrivilege.isAdminOrMod ? post.ip : undefined; + const selfPost = caller.uid && caller.uid === parseInt(post.uid, 10); if (post.deleted && !(userPrivilege.isAdminOrMod || selfPost)) { post.content = '[[topic:post_is_deleted]]'; @@ -42,6 +41,46 @@ postsAPI.get = async function (caller, data) { return post; }; +postsAPI.getIndex = async (caller, { pid, sort }) => { + const tid = await posts.getPostField(pid, 'tid'); + const topicPrivileges = await privileges.topics.get(tid, caller.uid); + if (!topicPrivileges.read || !topicPrivileges['topics:read']) { + return null; + } + + return await posts.getPidIndex(pid, tid, sort); +}; + +postsAPI.getSummary = async (caller, { pid }) => { + const tid = await posts.getPostField(pid, 'tid'); + const topicPrivileges = await privileges.topics.get(tid, caller.uid); + if (!topicPrivileges.read || !topicPrivileges['topics:read']) { + return null; + } + + const postsData = await posts.getPostSummaryByPids([pid], caller.uid, { stripTags: false }); + posts.modifyPostByPrivilege(postsData[0], topicPrivileges); + return postsData[0]; +}; + +postsAPI.getRaw = async (caller, { pid }) => { + const userPrivileges = await privileges.posts.get([pid], caller.uid); + const userPrivilege = userPrivileges[0]; + if (!userPrivilege['topics:read']) { + return null; + } + + const postData = await posts.getPostFields(pid, ['content', 'deleted']); + const selfPost = caller.uid && caller.uid === parseInt(postData.uid, 10); + + if (postData.deleted && !(userPrivilege.isAdminOrMod || selfPost)) { + return null; + } + postData.pid = pid; + const result = await plugins.hooks.fire('filter:post.getRawPost', { uid: caller.uid, postData: postData }); + return result.postData.content; +}; + postsAPI.edit = async function (caller, data) { if (!data || !data.pid || (meta.config.minimumPostLength !== 0 && !data.content)) { throw new Error('[[error:invalid-data]]'); @@ -347,3 +386,28 @@ postsAPI.deleteDiff = async (caller, { pid, timestamp }) => { await posts.diffs.delete(pid, timestamp, caller.uid); }; + +postsAPI.getReplies = async (caller, { pid }) => { + if (!utils.isNumber(pid)) { + throw new Error('[[error:invalid-data]]'); + } + const { uid } = caller; + const canRead = await privileges.posts.can('topics:read', pid, caller.uid); + if (!canRead) { + return null; + } + + const { topicPostSort } = await user.getSettings(uid); + const pids = await posts.getPidsFromSet(`pid:${pid}:replies`, 0, -1, topicPostSort === 'newest_to_oldest'); + + let [postData, postPrivileges] = await Promise.all([ + posts.getPostsByPids(pids, uid), + privileges.posts.get(pids, uid), + ]); + postData = await topics.addPostData(postData, uid); + postData.forEach((postData, index) => posts.modifyPostByPrivilege(postData, postPrivileges[index])); + postData = postData.filter((postData, index) => postData && postPrivileges[index].read); + postData = await user.blocks.filter(uid, postData); + + return postData; +}; diff --git a/src/api/topics.js b/src/api/topics.js index d8910b1098..7a6cabf966 100644 --- a/src/api/topics.js +++ b/src/api/topics.js @@ -173,6 +173,17 @@ topicsAPI.unfollow = async function (caller, data) { await topics.unfollow(data.tid, caller.uid); }; +topicsAPI.updateTags = async (caller, { tid, tags }) => { + if (!await privileges.topics.canEdit(tid, caller.uid)) { + throw new Error('[[error:no-privileges]]'); + } + + const cid = await topics.getTopicField(tid, 'cid'); + await topics.validateTags(tags, cid, caller.uid, tid); + await topics.updateTopicTags(tid, tags); + return await topics.getTopicTagsObjects(tid); +}; + topicsAPI.addTags = async (caller, { tid, tags }) => { if (!await privileges.topics.canEdit(tid, caller.uid)) { throw new Error('[[error:no-privileges]]'); @@ -180,9 +191,10 @@ topicsAPI.addTags = async (caller, { tid, tags }) => { const cid = await topics.getTopicField(tid, 'cid'); await topics.validateTags(tags, cid, caller.uid, tid); - tags = await topics.filterTags(tags); + tags = await topics.filterTags(tags, cid); await topics.addTags(tags, [tid]); + return await topics.getTopicTagsObjects(tid); }; topicsAPI.deleteTags = async (caller, { tid }) => { @@ -256,3 +268,33 @@ topicsAPI.deleteEvent = async (caller, { tid, eventId }) => { await topics.events.purge(tid, [eventId]); }; + +topicsAPI.markRead = async (caller, { tid }) => { + const hasMarked = await topics.markAsRead([tid], caller.uid); + const promises = [topics.markTopicNotificationsRead([tid], caller.uid)]; + if (hasMarked) { + promises.push(topics.pushUnreadCount(caller.uid)); + } + await Promise.all(promises); +}; + +topicsAPI.markUnread = async (caller, { tid }) => { + if (!tid || caller.uid <= 0) { + throw new Error('[[error:invalid-data]]'); + } + await topics.markUnread(tid, caller.uid); + topics.pushUnreadCount(caller.uid); +}; + +topicsAPI.bump = async (caller, { tid }) => { + if (!tid) { + throw new Error('[[error:invalid-tid]]'); + } + const isAdminOrMod = await privileges.topics.isAdminOrMod(tid, caller.uid); + if (!isAdminOrMod) { + throw new Error('[[error:no-privileges]]'); + } + + await topics.markAsUnreadForAll(tid); + topics.pushUnreadCount(caller.uid); +}; diff --git a/src/categories/recentreplies.js b/src/categories/recentreplies.js index c7ab8e2fa7..7b04974659 100644 --- a/src/categories/recentreplies.js +++ b/src/categories/recentreplies.js @@ -131,7 +131,7 @@ module.exports = function (Categories) { categories.forEach((category) => { if (category) { category.posts = topics.filter(t => t.cid && (t.cid === category.cid || t.parentCids.includes(category.cid))) - .sort((a, b) => b.pid - a.pid) + .sort((a, b) => b.timestamp - a.timestamp) .slice(0, parseInt(category.numRecentReplies, 10)); } }); @@ -147,7 +147,7 @@ module.exports = function (Categories) { const posts = []; getPostsRecursive(category, posts); - posts.sort((a, b) => b.pid - a.pid); + posts.sort((a, b) => b.timestamp - a.timestamp); if (posts.length) { category.posts = [posts[0]]; } @@ -165,7 +165,6 @@ module.exports = function (Categories) { // terrible name, should be topics.moveTopicPosts Categories.moveRecentReplies = async function (tid, oldCid, cid) { - await updatePostCount(tid, oldCid, cid); const [pids, topicDeleted] = await Promise.all([ topics.getPids(tid), topics.getTopicField(tid, 'deleted'), @@ -195,16 +194,4 @@ module.exports = function (Categories) { ]); }, { batch: 500 }); }; - - async function updatePostCount(tid, oldCid, newCid) { - const postCount = await topics.getTopicField(tid, 'postcount'); - if (!postCount) { - return; - } - - await Promise.all([ - db.incrObjectFieldBy(`category:${oldCid}`, 'post_count', -postCount), - db.incrObjectFieldBy(`category:${newCid}`, 'post_count', postCount), - ]); - } }; diff --git a/src/categories/topics.js b/src/categories/topics.js index 020713aabe..10090abaa3 100644 --- a/src/categories/topics.js +++ b/src/categories/topics.js @@ -188,6 +188,20 @@ module.exports = function (Categories) { await Categories.updateRecentTidForCid(cid); }; + Categories.onTopicsMoved = async (cids) => { + await Promise.all(cids.map(async (cid) => { + await Promise.all([ + Categories.setCategoryField( + cid, 'topic_count', await db.sortedSetCard(`cid:${cid}:tids:lastposttime`) + ), + Categories.setCategoryField( + cid, 'post_count', await db.sortedSetCard(`cid:${cid}:pids`) + ), + Categories.updateRecentTidForCid(cid), + ]); + })); + }; + async function filterScheduledTids(tids) { const scores = await db.sortedSetScores('topics:scheduled', tids); const now = Date.now(); diff --git a/src/controllers/404.js b/src/controllers/404.js index 3843d6bace..8b5fda6ebf 100644 --- a/src/controllers/404.js +++ b/src/controllers/404.js @@ -54,11 +54,16 @@ exports.send404 = async function (req, res) { bodyClass: helpers.buildBodyClass(req, res), }); } - + const icons = [ + 'fa-hippo', 'fa-cat', 'fa-otter', + 'fa-dog', 'fa-cow', 'fa-fish', + 'fa-dragon', 'fa-horse', 'fa-dove', + ]; await middleware.buildHeaderAsync(req, res); await res.render('404', { path: validator.escape(path), title: '[[global:404.title]]', bodyClass: helpers.buildBodyClass(req, res), + icon: icons[Math.floor(Math.random() * icons.length)], }); }; diff --git a/src/controllers/admin/plugins.js b/src/controllers/admin/plugins.js index a0b7457f01..62743e00a3 100644 --- a/src/controllers/admin/plugins.js +++ b/src/controllers/admin/plugins.js @@ -15,8 +15,8 @@ pluginsController.get = async function (req, res) { ]); const compatiblePkgNames = compatible.map(pkgData => pkgData.name); - const installedPlugins = compatible.filter(plugin => plugin && plugin.installed); - const activePlugins = all.filter(plugin => plugin && plugin.installed && plugin.active); + const installedPlugins = compatible.filter(plugin => plugin && (plugin.installed || (nconf.get('plugins:active') && plugin.active))); + const activePlugins = all.filter(plugin => plugin && (plugin.installed || nconf.get('plugins:active')) && plugin.active); const trendingScores = trending.reduce((memo, cur) => { memo[cur.label] = cur.value; diff --git a/src/controllers/topics.js b/src/controllers/topics.js index dd536cdf12..33877ba11a 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -22,7 +22,6 @@ const upload_url = nconf.get('upload_url'); topicsController.get = async function getTopic(req, res, next) { const tid = req.params.topic_id; - if ( (req.params.post_index && !utils.isNumber(req.params.post_index) && req.params.post_index !== 'unread') || !utils.isNumber(tid) @@ -207,6 +206,10 @@ async function addTags(topicData, req, res) { } description = description.replace(/\n/g, ' '); + const mainPost = postIndex === 0 && postAtIndex ? + postAtIndex : + await topics.getMainPost(topicData.tid, req.uid); + res.locals.metaTags = [ { name: 'title', @@ -234,7 +237,7 @@ async function addTags(topicData, req, res) { }, { property: 'article:modified_time', - content: utils.toISOString(topicData.lastposttime), + content: utils.toISOString(Math.max(topicData.lastposttime, mainPost && mainPost.edited)), }, { property: 'article:section', diff --git a/src/controllers/write/posts.js b/src/controllers/write/posts.js index f250fb2fc4..529eabfe44 100644 --- a/src/controllers/write/posts.js +++ b/src/controllers/write/posts.js @@ -1,13 +1,77 @@ 'use strict'; +const nconf = require('nconf'); + +const db = require('../../database'); +const topics = require('../../topics'); const posts = require('../../posts'); const api = require('../../api'); const helpers = require('../helpers'); const Posts = module.exports; +Posts.redirectByIndex = async (req, res, next) => { + const { tid } = req.query || req.body; + + let { index } = req.params; + if (index < 0 || !isFinite(index)) { + index = 0; + } + index = parseInt(index, 10); + + let pid; + if (index === 0) { + pid = await topics.getTopicField(tid, 'mainPid'); + } else { + pid = await db.getSortedSetRange(`tid:${tid}:posts`, index - 1, index - 1); + } + pid = Array.isArray(pid) ? pid[0] : pid; + if (!pid) { + return next('route'); + } + + const path = req.path.split('/').slice(3).join('/'); + const urlObj = new URL(nconf.get('url') + req.url); + res.redirect(308, nconf.get('relative_path') + encodeURI(`/api/v3/posts/${pid}/${path}${urlObj.search}`)); +}; + Posts.get = async (req, res) => { - helpers.formatApiResponse(200, res, await api.posts.get(req, { pid: req.params.pid })); + const post = await api.posts.get(req, { pid: req.params.pid }); + if (!post) { + return helpers.formatApiResponse(404, res, new Error('[[error:no-post]]')); + } + + helpers.formatApiResponse(200, res, post); +}; + +Posts.getIndex = async (req, res) => { + const { pid } = req.params; + const { sort } = req.body; + + const index = await api.posts.getIndex(req, { pid, sort }); + if (index === null) { + return helpers.formatApiResponse(404, res, new Error('[[error:no-post]]')); + } + + helpers.formatApiResponse(200, res, { index }); +}; + +Posts.getSummary = async (req, res) => { + const post = await api.posts.getSummary(req, { pid: req.params.pid }); + if (!post) { + return helpers.formatApiResponse(404, res, new Error('[[error:no-post]]')); + } + + helpers.formatApiResponse(200, res, post); +}; + +Posts.getRaw = async (req, res) => { + const content = await api.posts.getRaw(req, { pid: req.params.pid }); + if (content === null) { + return helpers.formatApiResponse(404, res, new Error('[[error:no-post]]')); + } + + helpers.formatApiResponse(200, res, { content }); }; Posts.edit = async (req, res) => { @@ -96,3 +160,12 @@ Posts.deleteDiff = async (req, res) => { helpers.formatApiResponse(200, res, await api.posts.getDiffs(req, { ...req.params })); }; + +Posts.getReplies = async (req, res) => { + const replies = await api.posts.getReplies(req, { ...req.params }); + if (replies === null) { + return helpers.formatApiResponse(404, res, new Error('[[error:no-post]]')); + } + + helpers.formatApiResponse(200, res, { replies }); +}; diff --git a/src/controllers/write/topics.js b/src/controllers/write/topics.js index 920f331b9a..b9691a8da5 100644 --- a/src/controllers/write/topics.js +++ b/src/controllers/write/topics.js @@ -100,13 +100,21 @@ Topics.unfollow = async (req, res) => { helpers.formatApiResponse(200, res); }; +Topics.updateTags = async (req, res) => { + const payload = await api.topics.updateTags(req, { + tid: req.params.tid, + tags: req.body.tags, + }); + helpers.formatApiResponse(200, res, payload); +}; + Topics.addTags = async (req, res) => { - await api.topics.addTags(req, { + const payload = await api.topics.addTags(req, { tid: req.params.tid, tags: req.body.tags, }); - helpers.formatApiResponse(200, res); + helpers.formatApiResponse(200, res, payload); }; Topics.deleteTags = async (req, res) => { @@ -181,3 +189,21 @@ Topics.deleteEvent = async (req, res) => { helpers.formatApiResponse(200, res); }; + +Topics.markRead = async (req, res) => { + await api.topics.markRead(req, { ...req.params }); + + helpers.formatApiResponse(200, res); +}; + +Topics.markUnread = async (req, res) => { + await api.topics.markUnread(req, { ...req.params }); + + helpers.formatApiResponse(200, res); +}; + +Topics.bump = async (req, res) => { + await api.topics.bump(req, { ...req.params }); + + helpers.formatApiResponse(200, res); +}; diff --git a/src/database/mongo/sorted.js b/src/database/mongo/sorted.js index 9dcb1aa2d3..d5db6c3451 100644 --- a/src/database/mongo/sorted.js +++ b/src/database/mongo/sorted.js @@ -363,34 +363,59 @@ module.exports = function (module) { }; module.getSortedSetMembers = async function (key) { - const data = await module.getSortedSetsMembers([key]); + const data = await getSortedSetsMembersWithScores([key], false); + return data && data[0]; + }; + + module.getSortedSetMembersWithScores = async function (key) { + const data = await getSortedSetsMembersWithScores([key], true); return data && data[0]; }; module.getSortedSetsMembers = async function (keys) { + return await getSortedSetsMembersWithScores(keys, false); + }; + + module.getSortedSetsMembersWithScores = async function (keys) { + return await getSortedSetsMembersWithScores(keys, true); + }; + + async function getSortedSetsMembersWithScores(keys, withScores) { if (!Array.isArray(keys) || !keys.length) { return []; } const arrayOfKeys = keys.length > 1; const projection = { _id: 0, value: 1 }; + if (withScores) { + projection.score = 1; + } if (arrayOfKeys) { projection._key = 1; } const data = await module.client.collection('objects').find({ _key: arrayOfKeys ? { $in: keys } : keys[0], - }, { projection: projection }).toArray(); + }, { projection: projection }) + .sort({ score: 1 }) + .toArray(); if (!arrayOfKeys) { - return [data.map(item => item.value)]; + return [withScores ? + data.map(i => ({ value: i.value, score: i.score })) : + data.map(item => item.value), + ]; } const sets = {}; data.forEach((item) => { sets[item._key] = sets[item._key] || []; - sets[item._key].push(item.value); + if (withScores) { + sets[item._key].push({ value: item.value, score: item.score }); + } else { + sets[item._key].push(item.value); + } }); return keys.map(k => sets[k] || []); - }; + } module.sortedSetIncrBy = async function (key, increment, value) { if (!key) { diff --git a/src/database/postgres.js b/src/database/postgres.js index e0ff91bd04..f09041c7c3 100644 --- a/src/database/postgres.js +++ b/src/database/postgres.js @@ -78,9 +78,13 @@ SELECT EXISTS(SELECT * EXISTS(SELECT * FROM "information_schema"."routines" WHERE "routine_schema" = 'public' - AND "routine_name" = 'nodebb_get_sorted_set_members') c`); + AND "routine_name" = 'nodebb_get_sorted_set_members') c, + EXISTS(SELECT * + FROM "information_schema"."routines" + WHERE "routine_schema" = 'public' + AND "routine_name" = 'nodebb_get_sorted_set_members_withscores') d`); - if (res.rows[0].a && res.rows[0].b && res.rows[0].c) { + if (res.rows[0].a && res.rows[0].b && res.rows[0].c && res.rows[0].d) { return; } @@ -282,6 +286,21 @@ STABLE STRICT PARALLEL SAFE`); } + + if (!res.rows[0].d) { + await client.query(` + CREATE FUNCTION "nodebb_get_sorted_set_members_withscores"(TEXT) RETURNS JSON AS $$ + SELECT json_agg(json_build_object('value', z."value", 'score', z."score") ORDER BY z."score" ASC) as item + FROM "legacy_object_live" o + INNER JOIN "legacy_zset" z + ON o."_key" = z."_key" + AND o."type" = z."type" + WHERE o."_key" = $1 + $$ LANGUAGE sql + STABLE + STRICT + PARALLEL SAFE`); + } } catch (ex) { await client.query(`ROLLBACK`); throw ex; diff --git a/src/database/postgres/sorted.js b/src/database/postgres/sorted.js index 06d007ca05..2ed679b683 100644 --- a/src/database/postgres/sorted.js +++ b/src/database/postgres/sorted.js @@ -457,6 +457,11 @@ SELECT o."_key" k return data && data[0]; }; + module.getSortedSetMembersWithScores = async function (key) { + const data = await module.getSortedSetsMembersWithScores([key]); + return data && data[0]; + }; + module.getSortedSetsMembers = async function (keys) { if (!Array.isArray(keys) || !keys.length) { return []; @@ -474,6 +479,23 @@ SELECT "_key" k, return keys.map(k => (res.rows.find(r => r.k === k) || {}).m || []); }; + module.getSortedSetsMembersWithScores = async function (keys) { + if (!Array.isArray(keys) || !keys.length) { + return []; + } + + const res = await module.pool.query({ + name: 'getSortedSetsMembersWithScores', + text: ` +SELECT "_key" k, + "nodebb_get_sorted_set_members_withscores"("_key") m + FROM UNNEST($1::TEXT[]) "_key";`, + values: [keys], + }); + + return keys.map(k => (res.rows.find(r => r.k === k) || {}).m || []); + }; + module.sortedSetIncrBy = async function (key, increment, value) { if (!key) { return; diff --git a/src/database/redis/sorted.js b/src/database/redis/sorted.js index bef347677b..6a38b5eced 100644 --- a/src/database/redis/sorted.js +++ b/src/database/redis/sorted.js @@ -226,6 +226,12 @@ module.exports = function (module) { return await module.client.zrange(key, 0, -1); }; + module.getSortedSetMembersWithScores = async function (key) { + return helpers.zsetToObjectArray( + await module.client.zrange(key, 0, -1, 'WITHSCORES') + ); + }; + module.getSortedSetsMembers = async function (keys) { if (!Array.isArray(keys) || !keys.length) { return []; @@ -235,6 +241,16 @@ module.exports = function (module) { return await helpers.execBatch(batch); }; + module.getSortedSetsMembersWithScores = async function (keys) { + if (!Array.isArray(keys) || !keys.length) { + return []; + } + const batch = module.client.batch(); + keys.forEach(k => batch.zrange(k, 0, -1, 'WITHSCORES')); + const res = await helpers.execBatch(batch); + return res.map(helpers.zsetToObjectArray); + }; + module.sortedSetIncrBy = async function (key, increment, value) { const newValue = await module.client.zincrby(key, increment, value); return parseFloat(newValue); diff --git a/src/groups/posts.js b/src/groups/posts.js index b378f66be6..7e834ab773 100644 --- a/src/groups/posts.js +++ b/src/groups/posts.js @@ -6,7 +6,7 @@ const posts = require('../posts'); module.exports = function (Groups) { Groups.onNewPostMade = async function (postData) { - if (!parseInt(postData.uid, 10)) { + if (!parseInt(postData.uid, 10) || postData.timestamp > Date.now()) { return; } @@ -26,7 +26,7 @@ module.exports = function (Groups) { }; async function truncateMemberPosts(groupName) { - let lastPid = await db.getSortedSetRevRange(`group:${groupName}:member:pids`, 10, 10); + let lastPid = await db.getSortedSetRevRangeByScore(`group:${groupName}:member:pids`, 10, 1, Date.now(), '-inf'); lastPid = lastPid[0]; if (!parseInt(lastPid, 10)) { return; @@ -37,7 +37,7 @@ module.exports = function (Groups) { Groups.getLatestMemberPosts = async function (groupName, max, uid) { const [allPids, groupData] = await Promise.all([ - db.getSortedSetRevRange(`group:${groupName}:member:pids`, 0, max - 1), + db.getSortedSetRevRangeByScore(`group:${groupName}:member:pids`, 0, max, Date.now(), '-inf'), Groups.getGroupFields(groupName, ['memberPostCids']), ]); const cids = groupData.memberPostCidsArray; diff --git a/src/install.js b/src/install.js index d1229de531..ea59843f5b 100644 --- a/src/install.js +++ b/src/install.js @@ -9,6 +9,7 @@ const nconf = require('nconf'); const _ = require('lodash'); const utils = require('./utils'); +const { paths } = require('./constants'); const install = module.exports; const questions = {}; @@ -563,6 +564,16 @@ async function checkUpgrade() { } } +async function installPlugins() { + const pluginInstall = require('./plugins'); + const nbbVersion = require(paths.currentPackage).version; + await Promise.all((await pluginInstall.getActive()).map(async (id) => { + if (await pluginInstall.isInstalled(id)) return; + const version = await pluginInstall.suggest(id, nbbVersion); + await pluginInstall.toggleInstall(id, version.version); + })); +} + install.setup = async function () { try { checkSetupFlagEnv(); @@ -580,6 +591,7 @@ install.setup = async function () { await enableDefaultPlugins(); await setCopyrightWidget(); await copyFavicon(); + if (nconf.get('plugins:autoinstall')) await installPlugins(); await checkUpgrade(); const data = { diff --git a/src/meta/minifier.js b/src/meta/minifier.js index 1434745fd2..f12144ae5c 100644 --- a/src/meta/minifier.js +++ b/src/meta/minifier.js @@ -161,18 +161,21 @@ actions.buildCSS = async function buildCSS(data) { const scssOutput = await sass.compileStringAsync(data.source, { loadPaths: data.paths, }); + let css = scssOutput.css.toString(); async function processScss(direction) { - const postcssArgs = [autoprefixer]; if (direction === 'rtl') { - postcssArgs.unshift(rtlcss()); + css = await postcss([rtlcss()]).process(css, { + from: undefined, + }); } + const postcssArgs = [autoprefixer]; if (data.minify) { postcssArgs.push(clean({ processImportFrom: ['local'], })); } - return await postcss(postcssArgs).process(scssOutput.css.toString(), { + return await postcss(postcssArgs).process(css, { from: undefined, }); } diff --git a/src/middleware/index.js b/src/middleware/index.js index a92501a7b9..0c44b5cfaf 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -270,7 +270,7 @@ middleware.validateAuth = helpers.try(async (req, res, next) => { middleware.checkRequired = function (fields, req, res, next) { // Used in API calls to ensure that necessary parameters/data values are present - const missing = fields.filter(field => !req.body.hasOwnProperty(field)); + const missing = fields.filter(field => !req.body.hasOwnProperty(field) && !req.query.hasOwnProperty(field)); if (!missing.length) { return next(); diff --git a/src/middleware/render.js b/src/middleware/render.js index 7a06b67c6c..223d556150 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -162,6 +162,7 @@ module.exports = function (middleware) { templateValues.configJSON = jsesc(JSON.stringify(res.locals.config), { isScriptContext: true }); + const title = translator.unescape(utils.stripHTMLTags(options.title)); const results = await utils.promiseParallel({ isAdmin: user.isAdministrator(req.uid), isGlobalMod: user.isGlobalModerator(req.uid), @@ -171,7 +172,7 @@ module.exports = function (middleware) { isEmailConfirmSent: req.uid <= 0 ? false : await user.email.isValidationPending(req.uid), languageDirection: translator.translate('[[language:dir]]', res.locals.config.userLang), timeagoCode: languages.userTimeagoCode(res.locals.config.userLang), - browserTitle: translator.translate(controllersHelpers.buildTitle(translator.unescape(options.title))), + browserTitle: translator.translate(controllersHelpers.buildTitle(title)), navigation: navigation.get(req.uid), roomIds: db.getSortedSetRevRange(`uid:${req.uid}:chat:rooms`, 0, 0), }); diff --git a/src/middleware/user.js b/src/middleware/user.js index fb3e5ed84f..57c1db8296 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -6,6 +6,7 @@ const nconf = require('nconf'); const path = require('path'); const util = require('util'); +const meta = require('../meta'); const user = require('../user'); const privileges = require('../privileges'); const plugins = require('../plugins'); @@ -231,12 +232,27 @@ module.exports = function (middleware) { }; middleware.registrationComplete = async function registrationComplete(req, res, next) { - // If the user's session contains registration data, redirect the user to complete registration + /** + * Redirect the user to complete registration if: + * * user's session contains registration data + * * email is required and they have no confirmed email (pending doesn't count, but admins are OK) + */ + const path = req.path.startsWith('/api/') ? req.path.replace('/api', '') : req.path; + if (!req.session.hasOwnProperty('registration')) { + if (req.uid && !path.endsWith('/edit/email')) { + const [confirmed, isAdmin] = await Promise.all([ + user.getUserField(req.uid, 'email:confirmed'), + user.isAdministrator(req.uid), + ]); + if (meta.config.requireEmailAddress && !confirmed && !isAdmin) { + controllers.helpers.redirect(res, '/me/edit/email'); + } + } + return setImmediate(next); } - const path = req.path.startsWith('/api/') ? req.path.replace('/api', '') : req.path; const { allowed } = await plugins.hooks.fire('filter:middleware.registrationComplete', { allowed: ['/register/complete'], }); diff --git a/src/plugins/index.js b/src/plugins/index.js index 3587dc091c..f573202450 100644 --- a/src/plugins/index.js +++ b/src/plugins/index.js @@ -234,6 +234,13 @@ Plugins.normalise = async function (apiReturn) { pluginMap[plugin.id].outdated = semver.gt(pluginMap[plugin.id].latest, pluginMap[plugin.id].version); }); + if (nconf.get('plugins:active')) { + nconf.get('plugins:active').forEach((id) => { + pluginMap[id] = pluginMap[id] || {}; + pluginMap[id].active = true; + }); + } + const pluginArray = Object.values(pluginMap); pluginArray.sort((a, b) => { diff --git a/src/plugins/install.js b/src/plugins/install.js index d358c917a5..82b078403e 100644 --- a/src/plugins/install.js +++ b/src/plugins/install.js @@ -109,7 +109,7 @@ module.exports = function (Plugins) { Plugins.isActive(id), ]); const type = installed ? 'uninstall' : 'install'; - if (active) { + if (active && !nconf.get('plugins:active')) { await Plugins.toggleActive(id); } await runPackageManagerCommandAsync(type, id, version || 'latest'); @@ -121,7 +121,7 @@ module.exports = function (Plugins) { function runPackageManagerCommand(command, pkgName, version, callback) { cproc.execFile(packageManagerExecutable, [ packageManagerCommands[packageManager][command], - pkgName + (command === 'install' ? `@${version}` : ''), + pkgName + (command === 'install' && version ? `@${version}` : ''), '--save', ], (err, stdout) => { if (err) { diff --git a/src/posts/queue.js b/src/posts/queue.js index 24cc3a311c..7cfdb462d8 100644 --- a/src/posts/queue.js +++ b/src/posts/queue.js @@ -32,7 +32,9 @@ module.exports = function (Posts) { } }); const uids = postData.map(data => data && data.uid); - const userData = await user.getUsersFields(uids, ['username', 'userslug', 'picture']); + const userData = await user.getUsersFields(uids, [ + 'username', 'userslug', 'picture', 'joindate', 'postcount', 'reputation', + ]); postData.forEach((postData, index) => { if (postData) { postData.user = userData[index]; @@ -46,7 +48,7 @@ module.exports = function (Posts) { postData = postData.filter(p => p.id === filter.id); } if (options.metadata) { - await Promise.all(postData.map(p => addMetaData(p))); + await Promise.all(postData.map(addMetaData)); } // Filter by tid if present @@ -71,7 +73,7 @@ module.exports = function (Posts) { if (postData.data.cid) { postData.topic = { cid: parseInt(postData.data.cid, 10) }; } else if (postData.data.tid) { - postData.topic = await topics.getTopicFields(postData.data.tid, ['title', 'cid']); + postData.topic = await topics.getTopicFields(postData.data.tid, ['title', 'cid', 'lastposttime']); } postData.category = await categories.getCategoryData(postData.topic.cid); const result = await plugins.hooks.fire('filter:parse.post', { postData: postData.data }); diff --git a/src/posts/summary.js b/src/posts/summary.js index 82468a17d5..364baad1f7 100644 --- a/src/posts/summary.js +++ b/src/posts/summary.js @@ -80,11 +80,13 @@ module.exports = function (Posts) { 'uid', 'tid', 'title', 'cid', 'tags', 'slug', 'deleted', 'scheduled', 'postcount', 'mainPid', 'teaserPid', ]); + const cids = _.uniq(topicsData.map(topic => topic && topic.cid)); const categoriesData = await categories.getCategoriesFields(cids, [ 'cid', 'name', 'icon', 'slug', 'parentCid', 'bgColor', 'color', 'backgroundImage', 'imageClass', ]); + return { topics: topicsData, categories: categoriesData }; } diff --git a/src/routes/write/posts.js b/src/routes/write/posts.js index b6831890a0..a834d26088 100644 --- a/src/routes/write/posts.js +++ b/src/routes/write/posts.js @@ -8,28 +8,37 @@ const routeHelpers = require('../helpers'); const { setupApiRoute } = routeHelpers; module.exports = function () { - const middlewares = [middleware.ensureLoggedIn]; + const middlewares = [middleware.ensureLoggedIn, middleware.assert.post]; - setupApiRoute(router, 'get', '/:pid', [], controllers.write.posts.get); + setupApiRoute(router, 'get', '/:pid', [middleware.assert.post], controllers.write.posts.get); // There is no POST route because you POST to a topic to create a new post. Intuitive, no? - setupApiRoute(router, 'put', '/:pid', [...middlewares, middleware.checkRequired.bind(null, ['content'])], controllers.write.posts.edit); - setupApiRoute(router, 'delete', '/:pid', [...middlewares, middleware.assert.post], controllers.write.posts.purge); + setupApiRoute(router, 'put', '/:pid', [middleware.ensureLoggedIn, middleware.checkRequired.bind(null, ['content'])], controllers.write.posts.edit); + setupApiRoute(router, 'delete', '/:pid', middlewares, controllers.write.posts.purge); - setupApiRoute(router, 'put', '/:pid/state', [...middlewares, middleware.assert.post], controllers.write.posts.restore); - setupApiRoute(router, 'delete', '/:pid/state', [...middlewares, middleware.assert.post], controllers.write.posts.delete); + setupApiRoute(router, 'get', '/:pid/index', [middleware.assert.post], controllers.write.posts.getIndex); + setupApiRoute(router, 'get', '/:pid/raw', [middleware.assert.post], controllers.write.posts.getRaw); + setupApiRoute(router, 'get', '/:pid/summary', [middleware.assert.post], controllers.write.posts.getSummary); - setupApiRoute(router, 'put', '/:pid/move', [...middlewares, middleware.assert.post, middleware.checkRequired.bind(null, ['tid'])], controllers.write.posts.move); + setupApiRoute(router, 'put', '/:pid/state', middlewares, controllers.write.posts.restore); + setupApiRoute(router, 'delete', '/:pid/state', middlewares, controllers.write.posts.delete); - setupApiRoute(router, 'put', '/:pid/vote', [...middlewares, middleware.checkRequired.bind(null, ['delta']), middleware.assert.post], controllers.write.posts.vote); - setupApiRoute(router, 'delete', '/:pid/vote', [...middlewares, middleware.assert.post], controllers.write.posts.unvote); + setupApiRoute(router, 'put', '/:pid/move', [...middlewares, middleware.checkRequired.bind(null, ['tid'])], controllers.write.posts.move); - setupApiRoute(router, 'put', '/:pid/bookmark', [...middlewares, middleware.assert.post], controllers.write.posts.bookmark); - setupApiRoute(router, 'delete', '/:pid/bookmark', [...middlewares, middleware.assert.post], controllers.write.posts.unbookmark); + setupApiRoute(router, 'put', '/:pid/vote', [...middlewares, middleware.checkRequired.bind(null, ['delta'])], controllers.write.posts.vote); + setupApiRoute(router, 'delete', '/:pid/vote', middlewares, controllers.write.posts.unvote); + + setupApiRoute(router, 'put', '/:pid/bookmark', middlewares, controllers.write.posts.bookmark); + setupApiRoute(router, 'delete', '/:pid/bookmark', middlewares, controllers.write.posts.unbookmark); setupApiRoute(router, 'get', '/:pid/diffs', [middleware.assert.post], controllers.write.posts.getDiffs); setupApiRoute(router, 'get', '/:pid/diffs/:since', [middleware.assert.post], controllers.write.posts.loadDiff); - setupApiRoute(router, 'put', '/:pid/diffs/:since', [...middlewares, middleware.assert.post], controllers.write.posts.restoreDiff); - setupApiRoute(router, 'delete', '/:pid/diffs/:timestamp', [...middlewares, middleware.assert.post], controllers.write.posts.deleteDiff); + setupApiRoute(router, 'put', '/:pid/diffs/:since', middlewares, controllers.write.posts.restoreDiff); + setupApiRoute(router, 'delete', '/:pid/diffs/:timestamp', middlewares, controllers.write.posts.deleteDiff); + + setupApiRoute(router, 'get', '/:pid/replies', [middleware.assert.post], controllers.write.posts.getReplies); + + // Shorthand route to access post routes by topic index + router.all('/+byIndex/:index*?', [middleware.checkRequired.bind(null, ['tid'])], controllers.write.posts.redirectByIndex); return router; }; diff --git a/src/routes/write/topics.js b/src/routes/write/topics.js index 3a0c7c306e..1a537fd56d 100644 --- a/src/routes/write/topics.js +++ b/src/routes/write/topics.js @@ -32,7 +32,8 @@ module.exports = function () { setupApiRoute(router, 'put', '/:tid/ignore', [...middlewares, middleware.assert.topic], controllers.write.topics.ignore); setupApiRoute(router, 'delete', '/:tid/ignore', [...middlewares, middleware.assert.topic], controllers.write.topics.unfollow); // intentional, unignore == unfollow - setupApiRoute(router, 'put', '/:tid/tags', [...middlewares, middleware.checkRequired.bind(null, ['tags']), middleware.assert.topic], controllers.write.topics.addTags); + setupApiRoute(router, 'put', '/:tid/tags', [...middlewares, middleware.checkRequired.bind(null, ['tags']), middleware.assert.topic], controllers.write.topics.updateTags); + setupApiRoute(router, 'patch', '/:tid/tags', [...middlewares, middleware.checkRequired.bind(null, ['tags']), middleware.assert.topic], controllers.write.topics.addTags); setupApiRoute(router, 'delete', '/:tid/tags', [...middlewares, middleware.assert.topic], controllers.write.topics.deleteTags); setupApiRoute(router, 'get', '/:tid/thumbs', [], controllers.write.topics.getThumbs); @@ -44,5 +45,9 @@ module.exports = function () { setupApiRoute(router, 'get', '/:tid/events', [middleware.assert.topic], controllers.write.topics.getEvents); setupApiRoute(router, 'delete', '/:tid/events/:eventId', [middleware.assert.topic], controllers.write.topics.deleteEvent); + setupApiRoute(router, 'put', '/:tid/read', [...middlewares, middleware.assert.topic], controllers.write.topics.markRead); + setupApiRoute(router, 'delete', '/:tid/read', [...middlewares, middleware.assert.topic], controllers.write.topics.markUnread); + setupApiRoute(router, 'put', '/:tid/bump', [...middlewares, middleware.assert.topic], controllers.write.topics.bump); + return router; }; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 67a1e4bda0..963267ed9a 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -272,3 +272,13 @@ Sockets.getCountInRoom = function (room) { const roomMap = Sockets.server.sockets.adapter.rooms.get(room); return roomMap ? roomMap.size : 0; }; + +Sockets.warnDeprecated = (socket, replacement) => { + if (socket.previousEvents && socket.emit) { + socket.emit('event:deprecated_call', { + eventName: socket.previousEvents[socket.previousEvents.length - 1], + replacement: replacement, + }); + } + winston.warn(`[deprecated]\n ${new Error('-').stack.split('\n').slice(2, 5).join('\n')}\n use ${replacement}`); +}; diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 21f2ee6d71..9eef769cb3 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -8,32 +8,27 @@ const privileges = require('../privileges'); const plugins = require('../plugins'); const meta = require('../meta'); const topics = require('../topics'); -const user = require('../user'); const notifications = require('../notifications'); const utils = require('../utils'); const events = require('../events'); +const api = require('../api'); +const sockets = require('.'); + const SocketPosts = module.exports; require('./posts/votes')(SocketPosts); require('./posts/tools')(SocketPosts); SocketPosts.getRawPost = async function (socket, pid) { - const canRead = await privileges.posts.can('topics:read', pid, socket.uid); - if (!canRead) { - throw new Error('[[error:no-privileges]]'); - } + sockets.warnDeprecated(socket, 'GET /api/v3/posts/:pid/raw'); - const postData = await posts.getPostFields(pid, ['content', 'deleted']); - if (postData.deleted) { - throw new Error('[[error:no-post]]'); - } - postData.pid = pid; - const result = await plugins.hooks.fire('filter:post.getRawPost', { uid: socket.uid, postData: postData }); - return result.postData.content; + return await api.posts.getRaw(socket, { pid }); }; SocketPosts.getPostSummaryByIndex = async function (socket, data) { + sockets.warnDeprecated(socket, 'GET /api/v3/posts/byIndex/:index/summary?tid=:tid'); + if (data.index < 0) { data.index = 0; } @@ -48,14 +43,7 @@ SocketPosts.getPostSummaryByIndex = async function (socket, data) { return 0; } - const topicPrivileges = await privileges.topics.get(data.tid, socket.uid); - if (!topicPrivileges['topics:read']) { - throw new Error('[[error:no-privileges]]'); - } - - const postsData = await posts.getPostSummaryByPids([pid], socket.uid, { stripTags: false }); - posts.modifyPostByPrivilege(postsData[0], topicPrivileges); - return postsData[0]; + return await api.posts.getSummary(socket, { pid }); }; SocketPosts.getPostTimestampByIndex = async function (socket, data) { @@ -78,19 +66,10 @@ SocketPosts.getPostTimestampByIndex = async function (socket, data) { }; SocketPosts.getPostSummaryByPid = async function (socket, data) { - if (!data || !data.pid) { - throw new Error('[[error:invalid-data]]'); - } - const { pid } = data; - const tid = await posts.getPostField(pid, 'tid'); - const topicPrivileges = await privileges.topics.get(tid, socket.uid); - if (!topicPrivileges['topics:read']) { - throw new Error('[[error:no-privileges]]'); - } + sockets.warnDeprecated(socket, 'GET /api/v3/posts/:pid/summary'); - const postsData = await posts.getPostSummaryByPids([pid], socket.uid, { stripTags: false }); - posts.modifyPostByPrivilege(postsData[0], topicPrivileges); - return postsData[0]; + const { pid } = data; + return await api.posts.getSummary(socket, { pid }); }; SocketPosts.getCategory = async function (socket, pid) { @@ -98,28 +77,26 @@ SocketPosts.getCategory = async function (socket, pid) { }; SocketPosts.getPidIndex = async function (socket, data) { + sockets.warnDeprecated(socket, 'GET /api/v3/posts/:pid/index'); + if (!data) { throw new Error('[[error:invalid-data]]'); } - return await posts.getPidIndex(data.pid, data.tid, data.topicPostSort); + + return await api.posts.getIndex(socket, { + pid: data.pid, + sort: data.topicPostSort, + }); }; SocketPosts.getReplies = async function (socket, pid) { + sockets.warnDeprecated(socket, 'GET /api/v3/posts/:pid/replies'); + if (!utils.isNumber(pid)) { throw new Error('[[error:invalid-data]]'); } - const { topicPostSort } = await user.getSettings(socket.uid); - const pids = await posts.getPidsFromSet(`pid:${pid}:replies`, 0, -1, topicPostSort === 'newest_to_oldest'); - let [postData, postPrivileges] = await Promise.all([ - posts.getPostsByPids(pids, socket.uid), - privileges.posts.get(pids, socket.uid), - ]); - postData = await topics.addPostData(postData, socket.uid); - postData.forEach((postData, index) => posts.modifyPostByPrivilege(postData, postPrivileges[index])); - postData = postData.filter((postData, index) => postData && postPrivileges[index].read); - postData = await user.blocks.filter(socket.uid, postData); - return postData; + return await api.posts.getReplies(socket, { pid }); }; SocketPosts.accept = async function (socket, data) { diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index b0a4fd3abc..3df9cdc1a2 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -50,7 +50,7 @@ SocketTopics.createTopicFromPosts = async function (socket, data) { throw new Error('[[error:invalid-data]]'); } - const result = await topics.createTopicFromPosts(socket.uid, data.title, data.pids, data.fromTid); + const result = await topics.createTopicFromPosts(socket.uid, data.title, data.pids, data.fromTid, data.cid); await events.log({ type: `topic-fork`, uid: socket.uid, diff --git a/src/socket.io/topics/move.js b/src/socket.io/topics/move.js index 5caeaad9f3..e7a164594c 100644 --- a/src/socket.io/topics/move.js +++ b/src/socket.io/topics/move.js @@ -20,13 +20,16 @@ module.exports = function (SocketTopics) { } const uids = await user.getUidsFromSet('users:online', 0, -1); - + const cids = [parseInt(data.cid, 10)]; await async.eachLimit(data.tids, 10, async (tid) => { const canMove = await privileges.topics.isAdminOrMod(tid, socket.uid); if (!canMove) { throw new Error('[[error:no-privileges]]'); } const topicData = await topics.getTopicFields(tid, ['tid', 'cid', 'slug', 'deleted']); + if (!cids.includes(topicData.cid)) { + cids.push(topicData.cid); + } data.uid = socket.uid; await topics.tools.move(tid, data); @@ -45,6 +48,8 @@ module.exports = function (SocketTopics) { toCid: data.cid, }); }); + + await categories.onTopicsMoved(cids); }; @@ -62,6 +67,7 @@ module.exports = function (SocketTopics) { await async.eachLimit(tids, 50, async (tid) => { await topics.tools.move(tid, data); }); + await categories.onTopicsMoved([data.currentCid, data.cid]); await events.log({ type: `topic-move-all`, uid: socket.uid, diff --git a/src/socket.io/topics/unread.js b/src/socket.io/topics/unread.js index 983a9634c6..e32ee59450 100644 --- a/src/socket.io/topics/unread.js +++ b/src/socket.io/topics/unread.js @@ -1,19 +1,19 @@ 'use strict'; -const user = require('../../user'); const topics = require('../../topics'); +const api = require('../../api'); +const sockets = require('..'); + module.exports = function (SocketTopics) { SocketTopics.markAsRead = async function (socket, tids) { + sockets.warnDeprecated(socket, 'PUT /api/v3/topics/:tid/read'); + if (!Array.isArray(tids) || socket.uid <= 0) { throw new Error('[[error:invalid-data]]'); } - const hasMarked = await topics.markAsRead(tids, socket.uid); - const promises = [topics.markTopicNotificationsRead(tids, socket.uid)]; - if (hasMarked) { - promises.push(topics.pushUnreadCount(socket.uid)); - } - await Promise.all(promises); + + await Promise.all(tids.map(async tid => api.topics.markRead(socket, { tid }))); }; SocketTopics.markTopicNotificationsRead = async function (socket, tids) { @@ -37,14 +37,18 @@ module.exports = function (SocketTopics) { }; SocketTopics.markUnread = async function (socket, tid) { + sockets.warnDeprecated(socket, 'DELETE /api/v3/topics/:tid/read'); + if (!tid || socket.uid <= 0) { throw new Error('[[error:invalid-data]]'); } - await topics.markUnread(tid, socket.uid); - topics.pushUnreadCount(socket.uid); + + await api.topics.markUnread(socket, { tid }); }; SocketTopics.markAsUnreadForAll = async function (socket, tids) { + sockets.warnDeprecated(socket, 'PUT /api/v3/topics/:tid/bump'); + if (!Array.isArray(tids)) { throw new Error('[[error:invalid-tid]]'); } @@ -52,18 +56,7 @@ module.exports = function (SocketTopics) { if (socket.uid <= 0) { throw new Error('[[error:no-privileges]]'); } - const isAdmin = await user.isAdministrator(socket.uid); - await Promise.all(tids.map(async (tid) => { - const topicData = await topics.getTopicFields(tid, ['tid', 'cid']); - if (!topicData.tid) { - throw new Error('[[error:no-topic]]'); - } - const isMod = await user.isModerator(socket.uid, topicData.cid); - if (!isAdmin && !isMod) { - throw new Error('[[error:no-privileges]]'); - } - await topics.markAsUnreadForAll(tid); - })); - topics.pushUnreadCount(socket.uid); + + await Promise.all(tids.map(async tid => api.topics.bump(socket, { tid }))); }; }; diff --git a/src/topics/delete.js b/src/topics/delete.js index 2e088f35c5..75472ffc69 100644 --- a/src/topics/delete.js +++ b/src/topics/delete.js @@ -11,44 +11,40 @@ const batch = require('../batch'); module.exports = function (Topics) { Topics.delete = async function (tid, uid) { - await removeTopicPidsFromCid(tid); + const cid = await Topics.getTopicField(tid, 'cid'); + await removeTopicPidsFromCid(tid, cid); await Topics.setTopicFields(tid, { deleted: 1, deleterUid: uid, deletedTimestamp: Date.now(), }); + await categories.updateRecentTidForCid(cid); }; - async function removeTopicPidsFromCid(tid) { - const [cid, pids] = await Promise.all([ - Topics.getTopicField(tid, 'cid'), - Topics.getPids(tid), - ]); + async function removeTopicPidsFromCid(tid, cid) { + const pids = await Topics.getPids(tid); await db.sortedSetRemove(`cid:${cid}:pids`, pids); - await categories.updateRecentTidForCid(cid); } - async function addTopicPidsToCid(tid) { - const [cid, pids] = await Promise.all([ - Topics.getTopicField(tid, 'cid'), - Topics.getPids(tid), - ]); + async function addTopicPidsToCid(tid, cid) { + const pids = await Topics.getPids(tid); let postData = await posts.getPostsFields(pids, ['pid', 'timestamp', 'deleted']); postData = postData.filter(post => post && !post.deleted); const pidsToAdd = postData.map(post => post.pid); const scores = postData.map(post => post.timestamp); await db.sortedSetAdd(`cid:${cid}:pids`, scores, pidsToAdd); - await categories.updateRecentTidForCid(cid); } Topics.restore = async function (tid) { + const cid = await Topics.getTopicField(tid, 'cid'); await Promise.all([ Topics.deleteTopicFields(tid, [ 'deleterUid', 'deletedTimestamp', ]), - addTopicPidsToCid(tid), + addTopicPidsToCid(tid, cid), ]); await Topics.setTopicField(tid, 'deleted', 0); + await categories.updateRecentTidForCid(cid); }; Topics.purgePostsAndTopic = async function (tid, uid) { diff --git a/src/topics/fork.js b/src/topics/fork.js index 4693d4afcc..8ab87b9130 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -9,7 +9,7 @@ const plugins = require('../plugins'); const meta = require('../meta'); module.exports = function (Topics) { - Topics.createTopicFromPosts = async function (uid, title, pids, fromTid) { + Topics.createTopicFromPosts = async function (uid, title, pids, fromTid, cid) { if (title) { title = title.trim(); } @@ -27,7 +27,9 @@ module.exports = function (Topics) { pids.sort((a, b) => a - b); const mainPid = pids[0]; - const cid = await posts.getCidByPid(mainPid); + if (!cid) { + cid = await posts.getCidByPid(mainPid); + } const [postData, isAdminOrMod] = await Promise.all([ posts.getPostData(mainPid), diff --git a/src/topics/scheduled.js b/src/topics/scheduled.js index a386de8869..bd79e1b07c 100644 --- a/src/topics/scheduled.js +++ b/src/topics/scheduled.js @@ -8,6 +8,7 @@ const db = require('../database'); const posts = require('../posts'); const socketHelpers = require('../socket.io/helpers'); const topics = require('./index'); +const groups = require('../groups'); const user = require('../user'); const Scheduled = module.exports; @@ -40,6 +41,7 @@ Scheduled.handleExpired = async function () { await Promise.all([].concat( sendNotifications(uids, topicsData), updateUserLastposttimes(uids, topicsData), + updateGroupPosts(uids, topicsData), ...topicsData.map(topicData => unpin(topicData.tid, topicData)), db.sortedSetsRemoveRangeByScore([`topics:scheduled`], '-inf', now) )); @@ -69,6 +71,11 @@ Scheduled.reschedule = async function ({ cid, tid, timestamp, uid }) { `cid:${cid}:uid:${uid}:tids`, ], timestamp, tid), posts.setPostField(mainPid, 'timestamp', timestamp), + db.sortedSetsAdd([ + 'posts:pid', + `uid:${uid}:posts`, + `cid:${cid}:uid:${uid}:pids`, + ], timestamp, mainPid), shiftPostTimes(tid, timestamp), ]); return topics.updateLastPostTimeFromLastPid(tid); @@ -124,6 +131,16 @@ async function updateUserLastposttimes(uids, topicsData) { return Promise.all(uidsToUpdate.map(uid => user.setUserField(uid, 'lastposttime', tstampByUid[uid]))); } +async function updateGroupPosts(uids, topicsData) { + const postsData = await posts.getPostsData(topicsData.map(t => t && t.mainPid)); + await Promise.all(postsData.map(async (post, i) => { + if (topicsData[i]) { + post.cid = topicsData[i].cid; + await groups.onNewPostMade(post); + } + })); +} + async function shiftPostTimes(tid, timestamp) { const pids = (await posts.getPidsFromSet(`tid:${tid}:posts`, 0, -1, false)); // Leaving other related score values intact, since they reflect post order correctly, and it seems that's good enough diff --git a/src/topics/tools.js b/src/topics/tools.js index 887f166247..be38f97209 100644 --- a/src/topics/tools.js +++ b/src/topics/tools.js @@ -274,10 +274,6 @@ module.exports = function (Topics) { await categories.moveRecentReplies(tid, oldCid, cid); await Promise.all([ - categories.incrementCategoryFieldBy(oldCid, 'topic_count', -1), - categories.incrementCategoryFieldBy(cid, 'topic_count', 1), - categories.updateRecentTidForCid(cid), - categories.updateRecentTidForCid(oldCid), Topics.setTopicFields(tid, { cid: cid, oldCid: oldCid, diff --git a/src/topics/unread.js b/src/topics/unread.js index 8bff23380a..63563525d5 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -291,14 +291,16 @@ module.exports = function (Topics) { db.sortedSetScores(`uid:${uid}:tids_read`, tids), ]); - const topics = topicScores.filter((t, i) => t.lastposttime && (!userScores[i] || userScores[i] < t.lastposttime)); + const now = Date.now(); + const topics = topicScores.filter( + (t, i) => t.lastposttime && (!userScores[i] || userScores[i] < t.lastposttime || userScores[i] > now) + ); tids = topics.map(t => t.tid); if (!tids.length) { return false; } - const now = Date.now(); const scores = topics.map(topic => (topic.scheduled ? topic.lastposttime : now)); const [topicData] = await Promise.all([ Topics.getTopicsFields(tids, ['cid']), diff --git a/src/upgrades/3.1.0/reset_user_bootswatch_skin.js b/src/upgrades/3.1.0/reset_user_bootswatch_skin.js new file mode 100644 index 0000000000..21d5569b39 --- /dev/null +++ b/src/upgrades/3.1.0/reset_user_bootswatch_skin.js @@ -0,0 +1,24 @@ +'use strict'; + + +const db = require('../../database'); + +module.exports = { + name: 'Reset old bootswatch skin for all users', + timestamp: Date.UTC(2023, 4, 1), + method: async function () { + const batch = require('../../batch'); + const css = require('../../meta/css'); + + batch.processSortedSet('users:joindate', async (uids) => { + let settings = await db.getObjects(uids.map(uid => `user:${uid}:settings`)); + settings = settings.filter( + s => s && s.bootswatchSkin && !css.supportedSkins.includes(s.bootswatchSkin) + ); + + await db.setObjectBulk(settings.map(s => ([`user:${s.uid}`, { bootswatchSkin: '' }]))); + }, { + batch: 500, + }); + }, +}; diff --git a/src/user/interstitials.js b/src/user/interstitials.js index fe4c080be7..cbb82ba9f7 100644 --- a/src/user/interstitials.js +++ b/src/user/interstitials.js @@ -28,9 +28,10 @@ Interstitials.email = async (data) => { return data; } - const [isAdminOrGlobalMod, hasPassword] = await Promise.all([ + const [isAdminOrGlobalMod, hasPassword, hasPending] = await Promise.all([ user.isAdminOrGlobalMod(data.req.uid), user.hasPassword(data.userData.uid), + user.email.isValidationPending(data.userData.uid), ]); let email; @@ -44,6 +45,7 @@ Interstitials.email = async (data) => { email, requireEmailAddress: meta.config.requireEmailAddress, issuePasswordChallenge: !!data.userData.uid && hasPassword, + hasPending, }, callback: async (userData, formData) => { if (formData.email) { diff --git a/src/views/400.tpl b/src/views/400.tpl index 6658e27f99..fb10fcfa81 100644 --- a/src/views/400.tpl +++ b/src/views/400.tpl @@ -1,9 +1,12 @@ -
- [[global:400.title]] +
+

[[global:400.title]]

-

{{{ if error }}}{error}{{{ else }}}[[global:400.message, {config.relative_path}]]{{{ end }}}

- - {{{ if returnLink }}} -

[[error:goback]]

- {{{ end }}} +
+
+
+ +
+ {{{ if error }}}{error}{{{ else }}}[[global:400.message, {config.relative_path}]]{{{ end }}} +
+
diff --git a/src/views/403.tpl b/src/views/403.tpl index a68d8672f8..806eceb30c 100644 --- a/src/views/403.tpl +++ b/src/views/403.tpl @@ -1,13 +1,15 @@ -
- [[global:403.title]] +
+

[[global:403.title]]

-

{{{ if error }}}{error}{{{ else }}}[[global:403.message]]{{{ end }}}

- - {{{ if returnLink }}} -

[[error:goback]]

- {{{ end }}} - - {{{ if !loggedIn }}} -

[[global:403.login, {config.relative_path}]]

- {{{ end }}} -
\ No newline at end of file +
+
+
+ +
+ {{{ if error }}}{error}{{{ else }}}[[global:403.message]]{{{ end }}} + {{{ if !loggedIn }}} + [[global:403.login, {config.relative_path}]] + {{{ end }}} +
+
+
diff --git a/src/views/404.tpl b/src/views/404.tpl index 5d1fb9d43c..e0a3d68ed2 100644 --- a/src/views/404.tpl +++ b/src/views/404.tpl @@ -1,4 +1,12 @@ -
- {path} [[global:404.title]] -

{{{ if error }}}{error}{{{ else }}}[[global:404.message, {config.relative_path}]]{{{ end }}}

-
\ No newline at end of file +
+

[[global:404.title]]

+ +
+
+
+ +
+ {{{ if error }}}{error}{{{ else }}}[[global:404.message, {config.relative_path}]]{{{ end }}} +
+
+
diff --git a/src/views/500.tpl b/src/views/500.tpl index e0ddffae26..b24f7342a3 100644 --- a/src/views/500.tpl +++ b/src/views/500.tpl @@ -1,10 +1,13 @@ -
- [[global:500.title]] -

[[global:500.message]]

-

{path}

- {{{ if error }}}

{error}

{{{ end }}} +
+

[[global:500.title]]

- {{{ if returnLink }}} -

[[error:goback]]

- {{{ end }}} -
+
+
+
+ +
+ [[global:500.message]] + {{{ if error }}}
{error}
{{{ end }}} +
+
+
\ No newline at end of file diff --git a/src/views/503.tpl b/src/views/503.tpl index 2654ab8429..800de34b7d 100644 --- a/src/views/503.tpl +++ b/src/views/503.tpl @@ -1,12 +1,15 @@ -

[[pages:maintenance.text, {site_title}]]

-

-{{{ if message }}} -
-
-

[[pages:maintenance.messageIntro]]

-
- {message} +
+

[[pages:maintenance.text, {site_title}]]

+ +
+
+
+ +
+ {{{ if message }}} + [[pages:maintenance.messageIntro]] +
{message}
+ {{{ end }}}
-{{{ end }}} \ No newline at end of file diff --git a/src/views/admin/manage/groups.tpl b/src/views/admin/manage/groups.tpl index 92ef545dcc..a51fdd20bb 100644 --- a/src/views/admin/manage/groups.tpl +++ b/src/views/admin/manage/groups.tpl @@ -35,7 +35,7 @@ [[admin/manage/groups:private]] {{{ end }}} {{{ if ./hidden }}} - [[admin/manage/groups:hidden]] + [[admin/manage/groups:hidden]] {{{ end }}} diff --git a/src/views/admin/partials/widget-settings.tpl b/src/views/admin/partials/widget-settings.tpl index 260f111d0b..24f28bcb8a 100644 --- a/src/views/admin/partials/widget-settings.tpl +++ b/src/views/admin/partials/widget-settings.tpl @@ -10,6 +10,17 @@ +
+
+ + +
+
+ + +
+
+
diff --git a/src/views/admin/partials/widgets/show_hide_groups.tpl b/src/views/admin/partials/widgets/show_hide_groups.tpl index 583a405947..766dad3b92 100644 --- a/src/views/admin/partials/widgets/show_hide_groups.tpl +++ b/src/views/admin/partials/widgets/show_hide_groups.tpl @@ -1,6 +1,6 @@
- +
- +
- +
+ +
+ +
+
+