diff --git a/.eslintrc b/.eslintrc index d655626005..bbaa357442 100644 --- a/.eslintrc +++ b/.eslintrc @@ -40,6 +40,7 @@ "allowTemplateLiterals": true }], "no-else-return": [ "error", { "allowElseIf": true } ], + "operator-linebreak": [ "error", "after" ], // ES6 "prefer-rest-params": "off", diff --git a/.travis.yml b/.travis.yml index 696b9673b6..178fe2b63d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ before_script: - sleep 15 # wait for mongodb to be ready - "mongo mydb_test --eval 'db.createUser({user:\"travis\", pwd: \"test\", roles: []});'" - sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":0}\"; fi" - - sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":0}\"; fi" + - sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567/forum\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":0}\"; fi" - sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database nodebb;' -U postgres; psql -c 'create database travis_ci_test;' -U postgres; node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"postgres\\\",\\\"postgres:host\\\":\\\"127.0.0.1\\\",\\\"postgres:port\\\":5432,\\\"postgres:password\\\":\\\"\\\",\\\"postgres:database\\\":\\\"nodebb\\\",\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":5432,\\\"username\\\":\\\"postgres\\\",\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi" after_success: - "npm run coveralls" diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..b3a227c5e0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,89 @@ +### 1.11.0 (2018-11-28) + +##### Chores + +* **deps:** + * update dependency lint-staged to v8.1.0 (dd7f8a14) + * update dependency husky to v1.2.0 (aee21628) + * update node:8.12.0 docker digest to 5dae8ea (0ef451dd) + * update dependency husky to v1.1.4 (95d6ab06) + * update dependency eslint to v5.9.0 (92441794) + * pin dependencies (b0483f21) + * update dependency eslint-config-airbnb-base to v13 (#6599) (64b9dabf) + * update node.js to v8.12.0 (fa3afbd2) + * update dependency husky to v1.1.3 (6cee5b8e) + * update dependency lint-staged to v8.0.4 (9d258668) + * update dependency lint-staged to v8.0.3 (aaa6fe9e) + * update dependency lint-staged to v8 (95d7a5fa) + * update dependency jsdom to v13 (52f141c9) +* **husky:** setting up husky as recommended in docs (e8a3d929) + +##### New Features + +* enabling commitlint (c58a41ed) +* allow disabling of GDPR features via ACP toggle, closes #6847 (4919e9ef) + +##### Bug Fixes + +* **deps:** + * update dependency nodebb-theme-vanilla to v10.1.12 (cf928f44) + * update dependency nodebb-theme-persona to v9.1.0 (179be9ed) + * update dependency nodebb-theme-persona to v9.0.63 (#7019) (68ae3eb6) + * update dependency nodebb-plugin-markdown to v8.8.5 (d3ab7d1b) + * update dependency nodebb-theme-persona to v9.0.60 (#6984) (cbd50a80) + * update dependency nodebb-theme-vanilla to v10.1.10 (#6982) (4c769487) + * update dependency nodebb-theme-slick to v1.2.15 (#6981) (acaf1a05) + * update dependency nodebb-theme-persona to v9.0.59 (#6980) (5863bb2c) + * update dependency lru-cache to v4.1.4 (#6977) (375ab769) + * update dependency connect-mongo to v2.0.2 (#6975) (e1597b83) + * update dependency nodebb-plugin-markdown to v8.8.4 (84d1013d) + * update dependency nodebb-plugin-composer-default to v6.1.8 (fee7e336) + * update dependency nodebb-plugin-markdown to v8.8.3 (b182a195) + * update dependency nodebb-plugin-composer-default to v6.1.7 (#6966) (1101f327) + * update dependency nodebb-theme-persona to v9.0.58 (#6964) (6ade156b) + * update dependency mongodb to v3.1.10 (#6962) (662215fa) + * update dependency nodebb-theme-persona to v9.0.57 (#6956) (1bf1a439) + * update dependency nodebb-theme-persona to v9.0.55 (#6955) (e06683f7) + * update dependency nodebb-plugin-composer-default to v6.1.6 (c51ceaf0) + * update dependency nodebb-theme-persona to v9.0.54 (bb940b01) + * update dependency nodebb-plugin-mentions to v2.2.12 (#6936) (e12a803b) + * update dependency nodebb-theme-vanilla to v10.1.9 (#6935) (b480c321) + * update dependency nodebb-theme-slick to v1.2.14 (#6934) (9cdd5316) + * update dependency nodebb-theme-persona to v9.0.53 (#6933) (9ee1c2f8) + * update dependency nodebb-plugin-dbsearch to v2.0.23 (#6931) (dba1db9c) + * update dependency jsesc to v2.5.2 (511b4edc) + * update dependency validator to v10.9.0 (032caafa) + * update dependency spdx-license-list to v5 (a639b6b8) + * update dependency nodebb-theme-vanilla to v10.1.8 (eb0a322d) + * update dependency nodebb-theme-persona to v9.0.52 (6566a0cb) + * update dependency nodebb-plugin-dbsearch to v2.0.22 (#6916) (7808e58c) + * update dependency mongodb to v3.1.9 (#6914) (9a9f2af9) + * update dependency nodebb-theme-persona to v9.0.51 (e2274fe0) + * update dependency nodebb-theme-slick to v1.2.13 (3005428d) + * update dependency nodebb-theme-persona to v9.0.50 (#6902) (22140a20) + * update dependency nodebb-plugin-markdown to v8.8.2 (0b4c9a80) + * update dependency nodebb-theme-vanilla to v10.1.7 (3150a2fc) + * update dependency nodebb-theme-slick to v1.2.12 (#6881) (9bcda7f7) + * update dependency nodebb-theme-persona to v9.0.49 (#6880) (e0dc00da) + * update dependency nodebb-theme-persona to v9.0.48 (2b6f5eec) +* added admin/manage/uploads to tx config (7357926f) +* #7013, add cache buster to js-enabled.css (f6b92c1d) +* removal of scroll anchoring code in favour of browser handling (98c14e0e) +* custom navigation item not showing groups (d9452bf3) +* flags detail page crash if reporter blocks author (d027207f) +* #6922, skin assets not including plugin LESS files (a5022ce4) +* #6921, allow square brackets in usernames (da10ca08) +* interstitial redirects failing if done via ajaxify (3c8939a8) +* username trim on login, closes #6894 (157bea69) +* **uploads:** ugly filenames on uploaded asset downloading (f96208a0) +* **acp:** + * small UI fixes for ACP privileges category selector (#6946) (57b39d5b) + * hard-to-discover dropdown selector in ACP (b3f96d28) +* **l10n:** some translations (34cbd1fc) + +##### Code Style Changes + +* **eslint:** + * newlines in public/src as well (f7bd398e) + * enforcing newline on chained calls (95cc27f1) + diff --git a/Dockerfile b/Dockerfile index 2e1a9caadf..dcfa024379 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # The base image is the latest 8.x node (LTS) -FROM node:8.13.0@sha256:3ecf259bf23f8a75555cf0b92ac5ad3c746e7e2262e937a9bed9ca1685f8e1c7 +FROM node:8.14.0@sha256:dd2381fe1f68df03a058094097886cd96b24a47724ff5a588b90921f13e875b7 RUN mkdir -p /usr/src/app WORKDIR /usr/src/app diff --git a/install/data/defaults.json b/install/data/defaults.json index 391fb0178d..c1c01f4a5e 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -66,6 +66,7 @@ "reputation:disabled": 0, "downvote:disabled": 0, "disableSignatures": 0, + "min:rep:downvote": 0, "min:rep:flag": 0, "min:rep:profile-picture": 0, "min:rep:cover-picture": 0, diff --git a/install/package.json b/install/package.json index bf89421f70..b9a6495f8a 100644 --- a/install/package.json +++ b/install/package.json @@ -46,7 +46,7 @@ "compression": "^1.7.1", "connect-ensure-login": "^0.1.1", "connect-flash": "^0.1.1", - "connect-mongo": "2.0.2", + "connect-mongo": "2.0.3", "connect-multiparty": "^2.1.0", "connect-pg-simple": "^5.0.0", "connect-redis": "3.4.0", @@ -70,7 +70,7 @@ "less": "^2.7.3", "lodash": "^4.17.10", "logrotate-stream": "^0.2.5", - "lru-cache": "4.1.4", + "lru-cache": "4.1.5", "material-design-lite": "^1.3.0", "mime": "^2.2.0", "mkdirp": "^0.5.1", @@ -79,18 +79,18 @@ "mousetrap": "^1.6.1", "mubsub-nbb": "^1.5.0", "nconf": "^0.10.0", - "nodebb-plugin-composer-default": "6.1.10", + "nodebb-plugin-composer-default": "6.1.17", "nodebb-plugin-dbsearch": "3.0.3", "nodebb-plugin-emoji": "^2.2.5", "nodebb-plugin-emoji-android": "2.0.0", - "nodebb-plugin-markdown": "8.8.5", + "nodebb-plugin-markdown": "8.8.6", "nodebb-plugin-mentions": "2.3.0", "nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-spam-be-gone": "0.5.5", "nodebb-rewards-essentials": "0.0.13", "nodebb-theme-lavender": "5.0.8", - "nodebb-theme-persona": "9.1.0", - "nodebb-theme-slick": "1.2.15", + "nodebb-theme-persona": "9.1.4", + "nodebb-theme-slick": "1.2.18", "nodebb-theme-vanilla": "10.1.12", "nodebb-widget-essentials": "4.0.11", "nodemailer": "^4.6.5", @@ -98,7 +98,7 @@ "passport-local": "1.0.0", "pg": "^7.4.0", "pg-cursor": "^1.3.0", - "postcss": "7.0.5", + "postcss": "7.0.6", "postcss-clean": "1.1.0", "promise-polyfill": "^8.0.0", "prompt": "^1.0.0", @@ -111,18 +111,17 @@ "serve-favicon": "^2.4.5", "sharp": "0.21.0", "sitemap": "^2.0.0", - "socket.io": "2.1.1", + "socket.io": "2.2.0", "socket.io-adapter-cluster": "^1.0.1", "socket.io-adapter-mongo": "^2.0.1", "socket.io-adapter-postgres": "^1.0.1", - "socket.io-client": "2.1.1", + "socket.io-client": "2.2.0", "socket.io-redis": "5.2.0", "socketio-wildcard": "2.0.0", "spdx-license-list": "^5.0.0", "spider-detector": "1.0.18", "toobusy-js": "^0.5.1", "uglify-es": "^3.3.9", - "util.promisify": "1.0.0", "validator": "10.9.0", "winston": "3.1.0", "xml": "^1.0.1", @@ -138,7 +137,7 @@ "eslint-plugin-import": "2.14.0", "grunt": "1.0.3", "grunt-contrib-watch": "1.1.0", - "husky": "1.2.0", + "husky": "1.2.1", "jsdom": "13.0.0", "lint-staged": "8.1.0", "mocha": "5.2.0", @@ -150,7 +149,7 @@ "url": "https://github.com/NodeBB/NodeBB/issues" }, "engines": { - "node": ">=6" + "node": ">=8" }, "maintainers": [ { diff --git a/loader.js b/loader.js index cbb1a79586..6320c6ab6a 100644 --- a/loader.js +++ b/loader.js @@ -7,6 +7,7 @@ var path = require('path'); var fork = require('child_process').fork; var async = require('async'); var logrotate = require('logrotate-stream'); +var mkdirp = require('mkdirp'); var file = require('./src/file'); var pkg = require('./package.json'); @@ -18,7 +19,14 @@ nconf.argv().env().file({ }); var pidFilePath = path.join(__dirname, 'pidfile'); -var outputLogFilePath = path.join(__dirname, 'logs/output.log'); + +var outputLogFilePath = path.join(__dirname, nconf.get('logFile') || 'logs/output.log'); + +var logDir = path.dirname(outputLogFilePath); +if (!fs.existsSync(logDir)) { + mkdirp.sync(path.dirname(outputLogFilePath)); +} + var output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true }); var silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false; var numProcs; diff --git a/public/language/README.md b/public/language/README.md new file mode 100644 index 0000000000..a578e1e68b --- /dev/null +++ b/public/language/README.md @@ -0,0 +1,14 @@ +# Important note about localising NodeBB + +The files here are read-only and overwritten daily (if there are changes) by the +helper bot [Misty](https://github.com/nodebb-misty). + +Our localisation efforts are handled via [our Transifex Project](https://www.transifex.com/nodebb/nodebb/), +and any pull requests made to this directory will be automatically closed because +localisations can go out-of-sync when edited directly. + +If there are non-localised strings and you cannot find them in Transifex, please +[open a new issue on our bug tracker](https://github.com/NodeBB/NodeBB/issues/new) +so we can take a look. + +Thank you for helping localise NodeBB! \ No newline at end of file diff --git a/public/language/TODO b/public/language/TODO deleted file mode 100644 index f15cb142c1..0000000000 --- a/public/language/TODO +++ /dev/null @@ -1,3 +0,0 @@ -NPM INSTALL -For now, language packs will be stored here. Eventually, will be moved to server side to allow for npm install-ability. -When that happens, server code will generate compressed JSON language files in this folder. \ No newline at end of file diff --git a/public/language/ar/admin/advanced/database.json b/public/language/ar/admin/advanced/database.json index 3386067a83..95538f5ff3 100644 --- a/public/language/ar/admin/advanced/database.json +++ b/public/language/ar/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "الذاكرة الإفتراضية", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "إجمالي الاتصالات المستلمة", "redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/ar/admin/manage/uploads.json b/public/language/ar/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/ar/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/ar/email.json b/public/language/ar/email.json index 855cdc2681..396281bc08 100644 --- a/public/language/ar/email.json +++ b/public/language/ar/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "تم طلب إعادة تعيين كلمة المرور - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "مرحبًا بك في %1", "invite": "دعوة من %1", "greeting_no_name": "مرحبًا", diff --git a/public/language/ar/error.json b/public/language/ar/error.json index 047d7f18f5..b3d3d43487 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟", "reputation-system-disabled": "نظام السمعة معطل", "downvoting-disabled": "التصويتات السلبية معطلة", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/ar/notifications.json b/public/language/ar/notifications.json index 9a934b2f3a..aa100c29d0 100644 --- a/public/language/ar/notifications.json +++ b/public/language/ar/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "استمر إلى %1", "return_to": "عودة إى %1", - "new_notification": "تنبيه جديد", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "لديك تنبيهات غير مقروءة.", "all": "All", "topics": "Topics", diff --git a/public/language/ar/user.json b/public/language/ar/user.json index da511cb086..020355aaf8 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -84,7 +84,6 @@ "digest_daily": "يوميا", "digest_weekly": "أسبوعيًّا", "digest_monthly": "شهريًّا", - "settings-require-reload": "تغيير بعض اﻹعدادات يتطلب تحديث الصفحة. إضغط هنا لتحديث الصفحة", "has_no_follower": "هذا المستخدم ليس لديه أية متابعين :(", "follows_no_one": "هذا المستخدم لا يتابع أحد :(", "has_no_posts": "هذا المستخدم لم يشارك حتى الآن.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة", "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع", "topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.", - "delay_image_loading": "تأخير عرض الصور", - "image_load_delay_help": "إذا تم تمكينه، فلن يتم تحميل الصور في المواضيع حتى يتم تمريرها في الشاشة", "scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها", "follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها", diff --git a/public/language/bg/admin/advanced/database.json b/public/language/bg/admin/advanced/database.json index 07b450d974..649bf03fb8 100644 --- a/public/language/bg/admin/advanced/database.json +++ b/public/language/bg/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Текущо активна памет", "mongo.virtual-memory": "Виртуална памет", "mongo.mapped-memory": "Заделена памет", + "mongo.bytes-in": "Байтове ВХ", + "mongo.bytes-out": "Байтове ИЗХ", + "mongo.num-requests": "Брой заявки", "mongo.raw-info": "Сурови данни от MongoDB", "redis": "Redis", "redis.version": "Версия на Redis", + "redis.keys": "Ключове", + "redis.expires": "Изтичания", + "redis.avg-ttl": "Средно време на живот (TTL)", "redis.connected-clients": "Свързани клиенти", "redis.connected-slaves": "Свързани второстепенни сървъри", "redis.blocked-clients": "Блокирани клиенти", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Общо получени свързвания", "redis.total-commands-processed": "Общо обработени команди", "redis.iops": "Едновременни операции в секунда", + "redis.iinput": "Едновременен вход в секунда", + "redis.ioutput": "Едновременен изход в секунда", + "redis.total-input": "Общ вход", + "redis.total-output": "Общ изход", + "redis.keyspace-hits": "Успешни търсения на ключове", "redis.keyspace-misses": "Неуспешни търсения на ключове", "redis.raw-info": "Сурови данни от Redis", diff --git a/public/language/bg/admin/manage/uploads.json b/public/language/bg/admin/manage/uploads.json new file mode 100644 index 0000000000..bc8e7830cf --- /dev/null +++ b/public/language/bg/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Качване на файл", + "filename": "Име на файла", + "usage": "Използване в публикации", + "orphaned": "Без ползвания", + "size/filecount": "Размер / брой файлове", + "confirm-delete": "Наистина ли искате да изтриете този файл?", + "filecount": "%1 файла" +} \ No newline at end of file diff --git a/public/language/bg/email.json b/public/language/bg/email.json index 4c113852d5..d849fd31d0 100644 --- a/public/language/bg/email.json +++ b/public/language/bg/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Изпратена е заявка за подновяване на паролата – %1!", + "test-email.subject": "Пробно е-писмо", + "password-reset-requested": "Изпратена е заявка за подновяване на паролата!", "welcome-to": "Добре дошли в %1", "invite": "Покана от %1", "greeting_no_name": "Здравейте", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 198db9441f..25e2d2f199 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Можете да редактирате съобщенията си в разговорите до %1 секунда/и, след като ги пуснете", "chat-delete-duration-expired": "Можете да изтривате съобщенията си в разговорите до %1 секунда/и след пускането им", "chat-deleted-already": "Това съобщение вече е изтрито.", - "chat-restored'already": "Това съобщение вече е възстановено.", + "chat-restored-already": "Това съобщение вече е възстановено.", "already-voting-for-this-post": "Вече сте дали глас за тази публикация.", "reputation-system-disabled": "Системата за репутация е изключена.", "downvoting-disabled": "Отрицателното гласуване е изключено", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Публикацията не може да бъде преместена в същата тема!", "cannot-block-self": "Не можете да блокирате себе си!", "cannot-block-privileged": "Не можете да блокирате администратори и глобални модератори", + "cannot-block-guest": "Гостите не могат да блокират други потребители", + "already-blocked": "Този потребител вече е блокиран", + "already-unblocked": "Този потребител вече е отблокиран", "no-connection": "Изглежда има проблем с връзката Ви с Интернет" } \ No newline at end of file diff --git a/public/language/bg/notifications.json b/public/language/bg/notifications.json index c260ce6f1b..4105dcdbdf 100644 --- a/public/language/bg/notifications.json +++ b/public/language/bg/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Напускате %1", "continue_to": "Продължаване към %1", "return_to": "Връщане към %1", - "new_notification": "Ново известие", - "new_notification_from": "Имате ново известие от %1", + "new_notification": "Имате ново известие", "you_have_unread_notifications": "Имате непрочетени известия", "all": "Всички", "topics": "Теми", diff --git a/public/language/bg/user.json b/public/language/bg/user.json index 507178f329..b764dff7c7 100644 --- a/public/language/bg/user.json +++ b/public/language/bg/user.json @@ -84,7 +84,6 @@ "digest_daily": "Ежедневно", "digest_weekly": "Ежеседмично", "digest_monthly": "Ежемесечно", - "settings-require-reload": "Някои промени в настройките изискват презареждане. Натиснете тук, за да презаредите страницата.", "has_no_follower": "Този потребител няма последователи :(", "follows_no_one": "Този потребител не следва никого :(", "has_no_posts": "Този потребител не е публикувал нищо досега.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Отваряне на външните връзки в нов подпрозорец", "enable_topic_searching": "Включване на търсенето в темите", "topic_search_help": "Ако е включено, търсенето в темата ще замени стандартното поведение на браузъра при търсене в страницата и ще Ви позволи да претърсвате цялата тема, а не само това, което се вижда на екрана", - "delay_image_loading": "Отлагане на зареждането на изображения", - "image_load_delay_help": "Ако е включено, изображенията в темите няма да бъдат зареждани, докато не превъртите страницата до мястото, на което се намират", "scroll_to_my_post": "След публикуване на отговор, да се показва новата публикация", "follow_topics_you_reply_to": "Следене на темите, в които отговаряте", "follow_topics_you_create": "Следене на темите, които създавате", diff --git a/public/language/bn/admin/advanced/database.json b/public/language/bn/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/bn/admin/advanced/database.json +++ b/public/language/bn/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/bn/admin/manage/uploads.json b/public/language/bn/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/bn/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/bn/email.json b/public/language/bn/email.json index aefda25871..b3e443d4d2 100644 --- a/public/language/bn/email.json +++ b/public/language/bn/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "পাসওয়ার্ড রিসেটের জন্য অনুরোধ করা হয়েছে - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "%1 এ স্বাগতম", "invite": "%1 থেকে আমন্ত্রণ", "greeting_no_name": "স্বাগতম", diff --git a/public/language/bn/error.json b/public/language/bn/error.json index f05875c3d6..32c6a68796 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে", "downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/bn/notifications.json b/public/language/bn/notifications.json index b69faabc9b..747f8039b2 100644 --- a/public/language/bn/notifications.json +++ b/public/language/bn/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "%1 তে আগান", "return_to": "%1 এ ফেরত যান", - "new_notification": "নতুন বিজ্ঞপ্তি", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "আপনার অপঠিত বিজ্ঞপ্তি আছে।", "all": "All", "topics": "Topics", diff --git a/public/language/bn/user.json b/public/language/bn/user.json index 94b7ef6574..8f636c8899 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -84,7 +84,6 @@ "digest_daily": "দৈনিক", "digest_weekly": "সাপ্তাহিক", "digest_monthly": "মাসিক", - "settings-require-reload": "কিছু কিছু পরিবর্তনের জন্য রিলোড করা আবশ্যক। পেজটি রিলোড করতে এখানে ক্লিক করুন", "has_no_follower": "এই সদস্যের কোন ফলোয়ার নেই :(", "follows_no_one": "এই সদস্য কাউকে ফলো করছেন না :(", "has_no_posts": "এই সদস্য এখন পর্যন্ত কোন পোস্ট করেন নি", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "আউটগোয়িং লিংকগুলো নতুন ট্যাবে খুলুন", "enable_topic_searching": "In-Topic সার্চ সক্রীয় করো", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/cs/admin/advanced/database.json b/public/language/cs/admin/advanced/database.json index 7a2017a06b..dca29c8437 100644 --- a/public/language/cs/admin/advanced/database.json +++ b/public/language/cs/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Residentní paměť", "mongo.virtual-memory": "Virtuální paměť", "mongo.mapped-memory": "Namapovaná paměť", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Raw informace MongoDB", "redis": "Redis", "redis.version": "Verze Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Připojených klientů", "redis.connected-slaves": "Druhotná připojení", "redis.blocked-clients": "Blokovaných klientů", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Souhrné množství připojení", "redis.total-commands-processed": "Souhrnně zpracováno příkazů", "redis.iops": "Okamžité zpracování za sekundu", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Zpracováno klíčů", "redis.keyspace-misses": "Chyby klíče", "redis.raw-info": "Informace Redis Raw", diff --git a/public/language/cs/admin/manage/uploads.json b/public/language/cs/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/cs/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/cs/email.json b/public/language/cs/email.json index 7f406006de..137b828384 100644 --- a/public/language/cs/email.json +++ b/public/language/cs/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Požadována obnova hesla – %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Vítejte v %1", "invite": "Pozvánka od %1", "greeting_no_name": "Dobrý den", diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 2627204a43..90e8889566 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Je vám umožněno upravit konverzační zprávy pod dobu %1 sekund/y po jejich odeslání", "chat-delete-duration-expired": "Je vám umožněno odstranit konverzační zprávy pod dobu %1 sekund/y po jejich odeslání", "chat-deleted-already": "Tato konverzační zpráva již byla odstraněna.", - "chat-restored'already": "Tato konverzační zpráva byla obnovena.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Již jste v tomto příspěvku hlasoval.", "reputation-system-disabled": "Systém reputací je zakázán.", "downvoting-disabled": "Systém nesouhlasu je zakázán", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Není možné přesunout příspěvek do stejného tématu!", "cannot-block-self": "Nemůžete zablokovat sebe sama!", "cannot-block-privileged": "Nemůžete zablokovat správce nebo hlavní moderátory", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Zdá se, že nastal problém s připojením k internetu" } \ No newline at end of file diff --git a/public/language/cs/notifications.json b/public/language/cs/notifications.json index 284b394c6f..e1568104df 100644 --- a/public/language/cs/notifications.json +++ b/public/language/cs/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Opouštíte %1", "continue_to": "Pokračovat na %1", "return_to": "Vrátit se na %1", - "new_notification": "Nové oznámení", - "new_notification_from": "Máte nové upozornění od %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Máte nepřečtená upozornění.", "all": "Vše", "topics": "Témata", diff --git a/public/language/cs/user.json b/public/language/cs/user.json index b65c33c281..8a8a23f4d1 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -84,7 +84,6 @@ "digest_daily": "Denně", "digest_weekly": "Týdně", "digest_monthly": "Měsíčně", - "settings-require-reload": "Některá nastavení vyžadují znovu načtení. Pro znovu načtení stránky, klikněte zde.", "has_no_follower": "Tohoto uživatele nikdo nesleduje :(", "follows_no_one": "Tento uživatel nikoho nesleduje :(", "has_no_posts": "Tento uživatel ještě nic nenapsal.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Otevřít odchozí odkaz v nové záložce", "enable_topic_searching": "Povolit vyhledávání v tématu", "topic_search_help": "Je-li povoleno, hledání v tématu přepíše výchozí chování vyhledávání v prohlížeči a umožní vám prohledávat celé téma, namísto pouze toho, co je zobrazeno na obrazovce", - "delay_image_loading": "Zpoždění načtení obrázku", - "image_load_delay_help": "Je-li povoleno, obrázky v tématech se nebudou načítat, dokud nebude proveden posun do zobrazení", "scroll_to_my_post": "Po odeslání odpovědi, zobrazit nový příspěvek", "follow_topics_you_reply_to": "Sledovat témata, do kterých přispějete", "follow_topics_you_create": "Sledovat témata, která vytvoříte", diff --git a/public/language/da/admin/advanced/database.json b/public/language/da/admin/advanced/database.json index a0a4167e87..348798c1ad 100644 --- a/public/language/da/admin/advanced/database.json +++ b/public/language/da/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Hukommelse", "mongo.virtual-memory": "Virtuel Hukommelse", "mongo.mapped-memory": "Kortlagt Hukommelse", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Rå Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Forbundne Klienter", "redis.connected-slaves": "Forbundne Slaver", "redis.blocked-clients": "Blokerede Klienter", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Totale Forbindelser Modtaget", "redis.total-commands-processed": "Totale Kommandoer Behandlet", "redis.iops": "Øjeblikkelige Ops. pr. sekund", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Mellemrums Tryk", "redis.keyspace-misses": "Mellemrums Misses", "redis.raw-info": "Redis Rå Info", diff --git a/public/language/da/admin/manage/uploads.json b/public/language/da/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/da/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/da/email.json b/public/language/da/email.json index c7658d01c2..db25a806ef 100644 --- a/public/language/da/email.json +++ b/public/language/da/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Vi skal anmode dig om at nulstille dit kodeord - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Velkommen til %1", "invite": "Invitation fra %1", "greeting_no_name": "Hej", diff --git a/public/language/da/error.json b/public/language/da/error.json index db9493a84a..81fb8b159e 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Vurderingssystem er slået fra.", "downvoting-disabled": "Nedvurdering er slået fra", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/da/notifications.json b/public/language/da/notifications.json index 85d0276864..edf3ea6ff2 100644 --- a/public/language/da/notifications.json +++ b/public/language/da/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Du forlader nu %1", "continue_to": "Fortsæt til %1", "return_to": "Returnere til %t", - "new_notification": "Ny notifikation", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Du har ulæste notifikationer.", "all": "All", "topics": "Topics", diff --git a/public/language/da/user.json b/public/language/da/user.json index a153c76bd2..e4fec860bf 100644 --- a/public/language/da/user.json +++ b/public/language/da/user.json @@ -84,7 +84,6 @@ "digest_daily": "Daglig", "digest_weekly": "Ugentlig", "digest_monthly": "Månedlig", - "settings-require-reload": "Nogle indstillinger kræver en genindlæsning. Klik her for at genindlæse siden.", "has_no_follower": "Denne bruger har ingen følgere :(", "follows_no_one": "Denne bruger følger ikke nogen :(", "has_no_posts": "Denne bruger har ikke skrevet noget endnu.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Åben udgående link i en ny tab", "enable_topic_searching": "Slå In-Topic søgning til", "topic_search_help": "Hvis slået til, så vil in-topic søgning overskrive browserens almindelige søge function og tillade dig at søge hele emnet, istedet for kun det der er vist på skærmen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Vis emner du har oprettet", diff --git a/public/language/de/admin/advanced/database.json b/public/language/de/admin/advanced/database.json index 5535827f35..2f25cc17af 100644 --- a/public/language/de/admin/advanced/database.json +++ b/public/language/de/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Permanenter Speicher", "mongo.virtual-memory": "Virtueller Speicher", "mongo.mapped-memory": "Zugeordneter Speicher", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Rohinfo", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Verbundene Clients", "redis.connected-slaves": "Verbundene Slaves", "redis.blocked-clients": "Blockierte Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Gesamte empfangen Verbindungen", "redis.total-commands-processed": "Insgesamt Kommandos ausgeführt", "redis.iops": "Durchschnittliche Anzahl von Ein-/Ausgaben pro Sekunde", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Schlüsselraum Treffer", "redis.keyspace-misses": "Schlüsselraum Verfehlungen", "redis.raw-info": "Redis Rohinfo", diff --git a/public/language/de/admin/manage/categories.json b/public/language/de/admin/manage/categories.json index 8027a0f322..2d007891b8 100644 --- a/public/language/de/admin/manage/categories.json +++ b/public/language/de/admin/manage/categories.json @@ -29,7 +29,7 @@ "select-category": "Kategorie auswählen", "set-parent-category": "Übergeordnete Kategorie festlegen", - "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. Select the domain of effect from the dropdown below.", + "privileges.description": "In diesem Bereich können die Zugriffsberechtigungen für diese Kategorie konfiguriert werden. Berechtigungen können pro Benutzer oder pro Gruppe gewährt werden. Du kannst einen neuen Benutzer zu dieser Tabelle hinzufügen, indem du sie in dem folgenden Formular suchst. ", "privileges.category-selector": "Konfiguriere Privilegien für", "privileges.warning": "Hinweis: Die Zugriffsberechtigungen werden sofort wirksam. Es ist nicht notwendig, die Kategorie zu speichern, nachdem du die Einstellungen angepasst hast.", "privileges.section-viewing": "Ansichtsberechtigungen", diff --git a/public/language/de/admin/manage/uploads.json b/public/language/de/admin/manage/uploads.json new file mode 100644 index 0000000000..7b226dc8c9 --- /dev/null +++ b/public/language/de/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Datei hochladen", + "filename": "Dateiname", + "usage": "Beitragsnutzung", + "orphaned": "Verwaist", + "size/filecount": "Größe / Dateianzahl", + "confirm-delete": "Bist du sicher, dass du diese Datei löschen willst?", + "filecount": "%1 Dateien" +} \ No newline at end of file diff --git a/public/language/de/email.json b/public/language/de/email.json index bb10d5ae44..1ed7a3711d 100644 --- a/public/language/de/email.json +++ b/public/language/de/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Zurücksetzung des Passworts beantragt - %1!", + "test-email.subject": "Test E-Mail", + "password-reset-requested": "Zurücksetzung des Passworts beantragt!", "welcome-to": "Willkommen bei %1", "invite": "Einladung von %1", "greeting_no_name": "Hallo", diff --git a/public/language/de/error.json b/public/language/de/error.json index ed74c64713..769f655411 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Du darfst Chat-Nachrichten nur bis zu %1 Sekunde(n) nach der erstellung verändern", "chat-delete-duration-expired": "Du darfst Chat-Nachrichten nur bis zu %1 Sekunde(n) nach der erstellung löschen", "chat-deleted-already": "Diese Chatnachricht wurde bereits gelöscht.", - "chat-restored'already": "Diese Chatnachricht wurde bereits Wiederhergestellt.", + "chat-restored-already": "Diese Chatnachricht wurde bereits wiederhergestellt.", "already-voting-for-this-post": "Du hast diesen Beitrag bereits bewertet.", "reputation-system-disabled": "Das Reputationssystem ist deaktiviert.", "downvoting-disabled": "Downvotes sind deaktiviert.", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Du kannst den Beitrag nicht in das selbe Thema schieben!", "cannot-block-self": "Du kannst dich nicht selbst blocken!", "cannot-block-privileged": "Du kannst keine Administratoren bzw. Globale Moderatoren blocken.", + "cannot-block-guest": "Gäste können andere Nutzer nicht blockieren.", + "already-blocked": "Dieser Nutzer ist bereits gesperrt", + "already-unblocked": "Dieser Nutzer ist bereits entsperrt", "no-connection": "Es scheint als gäbe es ein Problem mit deiner Internetverbindung" } \ No newline at end of file diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json index 93858808b7..b83521cb49 100644 --- a/public/language/de/notifications.json +++ b/public/language/de/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Du verlässt nun %1", "continue_to": "Fortfahren zu %1", "return_to": "Kehre zurück zu %1", - "new_notification": "Neue Benachrichtigung", - "new_notification_from": "Du hast eine neue Nachricht von %1", + "new_notification": "Du hast eine neue Benachrichtigung", "you_have_unread_notifications": "Du hast ungelesene Benachrichtigungen.", "all": "Alle", "topics": "Themen", diff --git a/public/language/de/user.json b/public/language/de/user.json index 35a6906fd0..26a93620f9 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -84,7 +84,6 @@ "digest_daily": "Täglich", "digest_weekly": "Wöchentlich", "digest_monthly": "Monatlich", - "settings-require-reload": "Einige Einstellungsänderung benötigen eine Aktualisierung. Hier klicken um die Seite neu zu laden.", "has_no_follower": "Diesem Benutzer folgt noch niemand. :(", "follows_no_one": "Dieser Benutzer folgt noch niemandem. :(", "has_no_posts": "Dieser Benutzer hat noch nichts geschrieben.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Ausgehende Links in neuem Tab öffnen", "enable_topic_searching": "Suchen innerhalb von Themen aktivieren", "topic_search_help": "Wenn aktiviert, ersetzt die im-Thema-Suche die Standardsuche des Browsers. Dadurch kannst du im ganzen Thema suchen, nicht nur im sichtbaren Abschnitt.", - "delay_image_loading": "Bilder nachladen", - "image_load_delay_help": "Wenn aktiviert, werden Bilder in Themen erst dann geladen, wenn sie in den sichtbaren Bereich gescrollt werden", "scroll_to_my_post": "Zeige eigene Antwort nach dem Erstellen im Thema an", "follow_topics_you_reply_to": "Themen folgen, in denen du geantwortet hast", "follow_topics_you_create": "Themen folgen, die du erstellst", diff --git a/public/language/el/admin/advanced/database.json b/public/language/el/admin/advanced/database.json index e6ac336f6c..77105661c2 100644 --- a/public/language/el/admin/advanced/database.json +++ b/public/language/el/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Έκδοση Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/el/admin/manage/uploads.json b/public/language/el/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/el/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/el/email.json b/public/language/el/email.json index 95152debb8..fff8f6dc45 100644 --- a/public/language/el/email.json +++ b/public/language/el/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Ζητήθηκε Επαναφορά Κωδικου - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Καλωσόρισες στο %1", "invite": "Invitation from %1", "greeting_no_name": "Γειά σου", diff --git a/public/language/el/error.json b/public/language/el/error.json index f5598c126e..5913687970 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Το σύστημα φήμης έχει απενεργοποιηθεί.", "downvoting-disabled": "Η καταψήφιση έχει απενεργοποιηθεί", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/el/notifications.json b/public/language/el/notifications.json index 5730d9c642..65cf962be5 100644 --- a/public/language/el/notifications.json +++ b/public/language/el/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Continue to %1", "return_to": "Return to %1", - "new_notification": "New Notification", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "You have unread notifications.", "all": "All", "topics": "Topics", diff --git a/public/language/el/user.json b/public/language/el/user.json index f0e4fe4d19..93c1d83e49 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -84,7 +84,6 @@ "digest_daily": "Ημερήσια", "digest_weekly": "Εβδομαδιαίως", "digest_monthly": "Μηνιαία", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Αυτός ο χρήστης δεν έχει κανέναν ακόλουθο :(", "follows_no_one": "Αυτός ο χρήστης δεν ακολουθεί κανέναν :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/en-GB/admin/advanced/database.json b/public/language/en-GB/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/en-GB/admin/advanced/database.json +++ b/public/language/en-GB/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/en-GB/error.json b/public/language/en-GB/error.json index 6308bb6183..5adc3351e2 100644 --- a/public/language/en-GB/error.json +++ b/public/language/en-GB/error.json @@ -144,7 +144,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Reputation system is disabled.", @@ -185,5 +185,8 @@ "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } diff --git a/public/language/en-GB/notifications.json b/public/language/en-GB/notifications.json index 50214f3f95..70bc156f63 100644 --- a/public/language/en-GB/notifications.json +++ b/public/language/en-GB/notifications.json @@ -9,8 +9,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Continue to %1", "return_to": "Return to %1", - "new_notification": "New Notification", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "You have unread notifications.", "all": "All", diff --git a/public/language/en-GB/user.json b/public/language/en-GB/user.json index cb8b3e8a05..5c94a03779 100644 --- a/public/language/en-GB/user.json +++ b/public/language/en-GB/user.json @@ -89,7 +89,6 @@ "digest_daily": "Daily", "digest_weekly": "Weekly", "digest_monthly": "Monthly", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", diff --git a/public/language/en-US/admin/advanced/database.json b/public/language/en-US/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/en-US/admin/advanced/database.json +++ b/public/language/en-US/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/en-US/admin/manage/uploads.json b/public/language/en-US/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/en-US/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/en-US/email.json b/public/language/en-US/email.json index b639351dff..51506cf884 100644 --- a/public/language/en-US/email.json +++ b/public/language/en-US/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Password Reset Requested - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Welcome to %1", "invite": "Invitation from %1", "greeting_no_name": "Hello", diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index 4ced02d7db..9a140cbb8d 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/en-US/notifications.json b/public/language/en-US/notifications.json index cbb80a396e..cff71bdf47 100644 --- a/public/language/en-US/notifications.json +++ b/public/language/en-US/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Continue to %1", "return_to": "Return to %1", - "new_notification": "New Notification", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "You have unread notifications.", "all": "All", "topics": "Topics", diff --git a/public/language/en-US/user.json b/public/language/en-US/user.json index a2873952dc..c617da50ba 100644 --- a/public/language/en-US/user.json +++ b/public/language/en-US/user.json @@ -84,7 +84,6 @@ "digest_daily": "Daily", "digest_weekly": "Weekly", "digest_monthly": "Monthly", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behavior and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/en-x-pirate/admin/advanced/database.json b/public/language/en-x-pirate/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/en-x-pirate/admin/advanced/database.json +++ b/public/language/en-x-pirate/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/en-x-pirate/admin/manage/uploads.json b/public/language/en-x-pirate/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/en-x-pirate/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/en-x-pirate/email.json b/public/language/en-x-pirate/email.json index f2ecdf8a42..6ef582f0be 100644 --- a/public/language/en-x-pirate/email.json +++ b/public/language/en-x-pirate/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Password Reset Requested - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Ahoy thar %1!", "invite": "Ye be invited by %1", "greeting_no_name": "Hello", diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json index 4ced02d7db..9a140cbb8d 100644 --- a/public/language/en-x-pirate/error.json +++ b/public/language/en-x-pirate/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/en-x-pirate/notifications.json b/public/language/en-x-pirate/notifications.json index 81473f4a92..b1508ddfee 100644 --- a/public/language/en-x-pirate/notifications.json +++ b/public/language/en-x-pirate/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Continue to %1", "return_to": "Return to %1", - "new_notification": "New Notification", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "You have unread notifications.", "all": "All", "topics": "Topics", diff --git a/public/language/en-x-pirate/user.json b/public/language/en-x-pirate/user.json index 08ad328891..7f7d59e4cf 100644 --- a/public/language/en-x-pirate/user.json +++ b/public/language/en-x-pirate/user.json @@ -84,7 +84,6 @@ "digest_daily": "Daily", "digest_weekly": "Weekly", "digest_monthly": "Monthly", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "This user doesn't have any followers :(", "follows_no_one": "This user isn't following anyone :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/es/admin/advanced/database.json b/public/language/es/admin/advanced/database.json index 7cef76555b..71e50d1e76 100644 --- a/public/language/es/admin/advanced/database.json +++ b/public/language/es/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Memoria Residente", "mongo.virtual-memory": "Memoria Virtual", "mongo.mapped-memory": "Memoria Mapeada", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Fila de Información MongoDB", "redis": "Redis", "redis.version": "Versión de Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Clientes Conectados", "redis.connected-slaves": "Esclavos Conectados", "redis.blocked-clients": "Clientes Bloqueados", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total de Conexiones Recividas ", "redis.total-commands-processed": "Total de Comandos Procesados", "redis.iops": "Operaciones Instantáneas por Segundo", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Pulsaciones de espaciado del teclado", "redis.keyspace-misses": "Fallos de espaciado del teclado", "redis.raw-info": "Fila de Información de Redis", diff --git a/public/language/es/admin/manage/uploads.json b/public/language/es/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/es/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/es/email.json b/public/language/es/email.json index 85a5cf369a..562e1ea2b8 100644 --- a/public/language/es/email.json +++ b/public/language/es/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Reinicio de contraseña solicitado - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Bienvenido a %1", "invite": "Invitación de %1", "greeting_no_name": "Hola", diff --git a/public/language/es/error.json b/public/language/es/error.json index b0420d050f..82f1f87150 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Sólo se te permite editar mensajes de chat durante %1 segundo(s) después de enviar el mensaje", "chat-delete-duration-expired": "Sólo se te permite borrar mensajes de chat durante %1 segundo(s) después de enviar el mensaje", "chat-deleted-already": "Este mensaje de chat ya ha sido borrado.", - "chat-restored'already": "Este mensaje de chat ya ha sido restaurado.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Ya has votado a este mensaje.", "reputation-system-disabled": "El sistema de reputación está deshabilitado.", "downvoting-disabled": "La votación negativa está deshabilitada.", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "¡No puedes mover el mensaje al mismo tema!", "cannot-block-self": "¡No puedes bloquearte a tí mismo!", "cannot-block-privileged": "No puedes bloquear administradores o moderadores globales", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Parece haber un problema con tu conexión a internet" } \ No newline at end of file diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json index 921270ca75..377fa231b7 100644 --- a/public/language/es/notifications.json +++ b/public/language/es/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Ahora estás saliendo %1", "continue_to": "Continuar a %1", "return_to": "Regresar a %1", - "new_notification": "Nueva notificación", - "new_notification_from": "Tiene una nueva Notificación de %1:", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Tienes notificaciones sin leer.", "all": "Todo", "topics": "Temas", diff --git a/public/language/es/user.json b/public/language/es/user.json index a6c89ffcc1..623e26793e 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -84,7 +84,6 @@ "digest_daily": "Diariamente", "digest_weekly": "Semanalmente", "digest_monthly": "Mensualmente", - "settings-require-reload": "Algunos cambios de configuración requieren una recarga la página. Haz click aquí para recargar la página.", "has_no_follower": "Este usuario no tiene seguidores :(", "follows_no_one": "Este miembro no sigue a nadie :(", "has_no_posts": "Este usuario no ha publicado nada aún.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Abrir los enlaces externos en una nueva pestaña", "enable_topic_searching": "Activar la búsqueda \"dentro del tema\"", "topic_search_help": "Si está activada, la búsqueda 'dentro del tema' al usar el buscador de la barra de navegación automáticamente buscaras solo en el tema actual.", - "delay_image_loading": "Retrasar la carga de imágenes", - "image_load_delay_help": "Si se habilita, las imágenes no cargarán hasta que se vean en pantalla", "scroll_to_my_post": "Luego de enviar una respuesta, mostrar el nuevo mensaje", "follow_topics_you_reply_to": "Seguir temas a los que respondes", "follow_topics_you_create": "Seguir temas creados por ti", diff --git a/public/language/et/admin/advanced/database.json b/public/language/et/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/et/admin/advanced/database.json +++ b/public/language/et/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/et/admin/manage/uploads.json b/public/language/et/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/et/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/et/email.json b/public/language/et/email.json index 1bd3d95060..282c9ed0cd 100644 --- a/public/language/et/email.json +++ b/public/language/et/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Parooli muutmise taotlus - %1", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Tere tulemast %1 foorumisse", "invite": "Kutse %1-lt", "greeting_no_name": "Tere", diff --git a/public/language/et/error.json b/public/language/et/error.json index be068b9665..2d5be07a5c 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Sa oled juba hääletanud sellel postitusel.", "reputation-system-disabled": "Reputatsiooni süsteem ei ole aktiveeritud", "downvoting-disabled": "Negatiivsete häälte andmine ei ole võimaldatud", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json index fb06480814..63cd373727 100644 --- a/public/language/et/notifications.json +++ b/public/language/et/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Lahkud %1", "continue_to": "Jätka %1", "return_to": "Pöördu tagasi %1", - "new_notification": "Uus teade", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Sul ei ole lugemata teateid.", "all": "All", "topics": "Topics", diff --git a/public/language/et/user.json b/public/language/et/user.json index a22dbe9e71..0436624647 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -84,7 +84,6 @@ "digest_daily": "Igapäevaselt", "digest_weekly": "Iga nädal", "digest_monthly": "Iga kuu", - "settings-require-reload": "Muudatused seadetes nõuavad lehe uuesti laadimist. Lehe värskendamiseks vajuta siia.", "has_no_follower": "Sellel kasutajal pole ühtegi jälgijat :(", "follows_no_one": "See kasutaja ei jälgi kedagi :(", "has_no_posts": "Antud kasutaja pole veel midagi postitanud.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Ava väljaminevad lingid uues aknas", "enable_topic_searching": "Võimalda teemasisene otsing", "topic_search_help": "Kui see on sisse lükatud, siis teemasisene otsing võtab üle brauseri tavapärase otsingu ning võimaldab otsida ainult ekraanile mahtuva teema asemel terve teema ulatuses.", - "delay_image_loading": "Viivita pildi laadimisega", - "image_load_delay_help": "Kui lubatud, pildid teemades ei lae kuni nad on nähtavuses", "scroll_to_my_post": "Pärast vastuse postitamist, näita uut postitust", "follow_topics_you_reply_to": "Jälgi teemasid, millele vastad", "follow_topics_you_create": "Jälgi teemasid, mille lood", diff --git a/public/language/fa-IR/admin/advanced/database.json b/public/language/fa-IR/admin/advanced/database.json index 85b26214a2..b85c642f93 100644 --- a/public/language/fa-IR/admin/advanced/database.json +++ b/public/language/fa-IR/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "حافظۀ مجازی", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/fa-IR/admin/manage/uploads.json b/public/language/fa-IR/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/fa-IR/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/fa-IR/email.json b/public/language/fa-IR/email.json index 638f8a699e..dea5fda19f 100644 --- a/public/language/fa-IR/email.json +++ b/public/language/fa-IR/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "درخواست بازیابی گذرواژه- %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "به %1 خوش آمدید", "invite": "دعوتنامه از %1", "greeting_no_name": "سلام", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index 07315602ad..9da7cc8e9b 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "شما قادر هستید پیام های چت را فقط بعد از %1 ثانیه ویرایش کنید", "chat-delete-duration-expired": "شما قادر هستید پیام های چت را فقط بعد از %1 ثانیه پاک کنید", "chat-deleted-already": "این پیام قبلا حذف شده است", - "chat-restored'already": "این پیام قبلا بازگردانده شده است", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "شما قبلا به این پست رای داده اید.", "reputation-system-disabled": "سیستم اعتبار غیر فعال شده است", "downvoting-disabled": "رأی منفی غیر فعال شده است", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "نمی توان پست یک تاپیک را به همان تاپیک انتقال داد !", "cannot-block-self": "شما نمی توانید خودتان را بلاک کنید!", "cannot-block-privileged": "شما نمی توانید ادمین ها یا مدیر ها را بلاک کنید", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "به نظر می رسد اینترنت شما مشکل دارد" } \ No newline at end of file diff --git a/public/language/fa-IR/notifications.json b/public/language/fa-IR/notifications.json index 02fce2b862..18ca7e936a 100644 --- a/public/language/fa-IR/notifications.json +++ b/public/language/fa-IR/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "شما در حال ترک %1 هستید", "continue_to": "ادامه به %1", "return_to": "بازگشت به %1", - "new_notification": "آگاه‌سازی‌ تازه", - "new_notification_from": "شما یک اعلان جدید از طرف %1 دارید", + "new_notification": "You have a new notification", "you_have_unread_notifications": "شما آگاه‌سازی‌‌های نخوانده دارید.", "all": "همه", "topics": "موضوع ها", diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index 1eb75e8265..cef401a447 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -84,7 +84,6 @@ "digest_daily": "روزانه", "digest_weekly": "هفتگی", "digest_monthly": "ماهانه", - "settings-require-reload": "تغییر برخی تنظیمات مستلزم بارگذاری مجدد هستند. برای بارگذاری مجدد صفحه اینجا کلیک کنید.", "has_no_follower": "این کاربر هیچ دنبال‌کننده‌ای ندارد :(", "follows_no_one": "این کاربر هیچ کسی را دنبال نمی‌کند :(", "has_no_posts": "این کاربر تا به حال هیچ چیزی ارسال نکرده است.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "پیوندهای به بیرون را در برگ جدید باز کن", "enable_topic_searching": "فعال کردن جستجوی داخل-موضوع", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "تاخیر در حال بارگذاری عکس", - "image_load_delay_help": "اگر فعال باشد، تصاویر در تاپیک ها بارگذاری نمی شود تا زمانی که از طریق اسکرول روی آن بروید قابل مشاهده است", "scroll_to_my_post": "پس از ارسال پست، اولین پست جدید نشان بده", "follow_topics_you_reply_to": "موضوع‌های که جواب دادید را پیگیری نمائید", "follow_topics_you_create": "موضوع‌های که ایجاد کردید را پیگیری نمائید", diff --git a/public/language/fi/admin/advanced/database.json b/public/language/fi/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/fi/admin/advanced/database.json +++ b/public/language/fi/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/fi/admin/manage/uploads.json b/public/language/fi/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/fi/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/fi/email.json b/public/language/fi/email.json index cc02f42b37..71d18c1f48 100644 --- a/public/language/fi/email.json +++ b/public/language/fi/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Pyydetty salasanan palautuskoodia - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "%1 - Tervetuloa", "invite": "Kutsu henkilöltä %1", "greeting_no_name": "Hei", diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 7655bb1e12..6a50aa71f6 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json index 561076543d..35e73e39df 100644 --- a/public/language/fi/notifications.json +++ b/public/language/fi/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Olet nyt poistumassa %1", "continue_to": "Continue to %1", "return_to": "Return to %1", - "new_notification": "Uusi ilmoitus", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Sinulla on lukemattomia ilmoituksia.", "all": "All", "topics": "Topics", diff --git a/public/language/fi/user.json b/public/language/fi/user.json index 2be4d396b0..5400db1afc 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -84,7 +84,6 @@ "digest_daily": "Päivittäin", "digest_weekly": "Viikottain", "digest_monthly": "Kuukausittain", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Kukaan ei seuraa tätä käyttäjää :(", "follows_no_one": "Tämä käyttäjä ei seuraa ketään :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Salli aiheen sisäiset haut", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/fr/admin/advanced/database.json b/public/language/fr/admin/advanced/database.json index d37b48dbc7..dbf8bf2c69 100644 --- a/public/language/fr/admin/advanced/database.json +++ b/public/language/fr/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Mémoire résidente", "mongo.virtual-memory": "Mémoire virtuelle", "mongo.mapped-memory": "Configuration de mémoire", + "mongo.bytes-in": "Octets entrés", + "mongo.bytes-out": "Octets sortants", + "mongo.num-requests": "Nombre de requêtes", "mongo.raw-info": "Informations brutes MongoDB", "redis": "Redis", "redis.version": "Version de Redis", + "redis.keys": "Clés", + "redis.expires": "Expire", + "redis.avg-ttl": "TTL moyen", "redis.connected-clients": "Clients connectés", "redis.connected-slaves": "Esclaves connectés", "redis.blocked-clients": "Clients bloqués", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Connexions totales reçues", "redis.total-commands-processed": "Commandes totales exécutées", "redis.iops": "Opérations instantanées par seconde", + "redis.iinput": "Entrée instantanée par seconde", + "redis.ioutput": "Sortie instantanée par seconde", + "redis.total-input": "Total des entrées", + "redis.total-output": "Total des sorties", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Informations brutes Redis", diff --git a/public/language/fr/admin/general/dashboard.json b/public/language/fr/admin/general/dashboard.json index ec08dfb7ab..874c6ba3c2 100644 --- a/public/language/fr/admin/general/dashboard.json +++ b/public/language/fr/admin/general/dashboard.json @@ -65,9 +65,9 @@ "high-presence-topics": "Sujets populaires", "graphs.page-views": "Pages vues", - "graphs.page-views-registered": "Pages vues par les membres", - "graphs.page-views-guest": "Pages vues par les invités", - "graphs.page-views-bot": "Pages vues par les Bots", + "graphs.page-views-registered": "Membres", + "graphs.page-views-guest": "Invités", + "graphs.page-views-bot": "Robots", "graphs.unique-visitors": "Visiteurs uniques", "graphs.registered-users": "Utilisateurs enregistrés", "graphs.anonymous-users": "Utilisateurs anonymes", diff --git a/public/language/fr/admin/manage/uploads.json b/public/language/fr/admin/manage/uploads.json new file mode 100644 index 0000000000..f1538fb3e6 --- /dev/null +++ b/public/language/fr/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Envoyer un fichier", + "filename": "Nom du fichier", + "usage": "Utilisé dans le message", + "orphaned": "Orphelin", + "size/filecount": "Taille / nombre de fichiers", + "confirm-delete": "Voulez-vous vraiment supprimer ce fichier?", + "filecount": "%1 fichiers" +} \ No newline at end of file diff --git a/public/language/fr/email.json b/public/language/fr/email.json index a3f7d6657d..0105fb5a03 100644 --- a/public/language/fr/email.json +++ b/public/language/fr/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Demande de réinitialisation du mot de passe - %1!", + "test-email.subject": "Email Test", + "password-reset-requested": "Demande de réinitialisation de mot de passe!", "welcome-to": "Bienvenue sur %1", "invite": "Invitation de %1", "greeting_no_name": "Bonjour", diff --git a/public/language/fr/error.json b/public/language/fr/error.json index d9b2fccf2d..7294e5b458 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Vous n'êtes autorisé à modifier des messages que pendant %1 seconde(s) après les avoir postés", "chat-delete-duration-expired": "Vous n'êtes autorisé à supprimer des messages que pendant %1 seconde(s) après les avoir postés", "chat-deleted-already": "Ce message a déjà été supprimé.", - "chat-restored'already": "Ce message a déjà été restauré.", + "chat-restored-already": "Ce message de discussion a déjà été restauré.", "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", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Impossible de déplacer le message dans le même sujet !", "cannot-block-self": "Vous ne pouvez pas vous bloquer !", "cannot-block-privileged": "Vous ne pouvez pas bloquer les administrateurs ou les modérateurs global", + "cannot-block-guest": "Les Invités ne peut pas bloquer d'autres utilisateurs", + "already-blocked": "Cet utilisateur est déjà bloqué", + "already-unblocked": "Cet utilisateur est déjà débloqué", "no-connection": "Il semble y avoir un problème avec votre connexion Internet" } \ No newline at end of file diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json index 03cac9bb9d..3bd87c7968 100644 --- a/public/language/fr/notifications.json +++ b/public/language/fr/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Vous quittez %1", "continue_to": "Continuer vers %1", "return_to": "Revenir à %1", - "new_notification": "Nouvelle notification", - "new_notification_from": "Vous avez une nouvelle notification de %1", + "new_notification": "Vous avez une nouvelle notification", "you_have_unread_notifications": "Vous avez des notifications non-lues", "all": "Tout", "topics": "Sujets", diff --git a/public/language/fr/user.json b/public/language/fr/user.json index a5c8bdd998..01a5e6529c 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -84,7 +84,6 @@ "digest_daily": "Quotidien", "digest_weekly": "Hebdomadaire", "digest_monthly": "Mensuel", - "settings-require-reload": "Certains réglages nécessitent un rechargement. Cliquez ici pour recharger la page.", "has_no_follower": "Personne n'est abonné à cet utilisateur :(", "follows_no_one": "Cet utilisateur n'est abonné à personne :(", "has_no_posts": "Cet utilisateur n'a encore rien posté.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Ouvrir les liens externes dans un nouvel onglet", "enable_topic_searching": "Activer la recherche dans les sujets", "topic_search_help": "Une fois activé, la recherche dans les sujets va remplacer la recherche de page du navigateur et vous permettra de rechercher dans l'intégralité d'un sujet au lieu des seuls posts affichés à l'écran.", - "delay_image_loading": "Délayer le chargement des images", - "image_load_delay_help": "Lorsque cette option est activée, les images des sujets ne seront pas chargées avant qu'elles ne soient visibles dans la fenêtre.", "scroll_to_my_post": "Après avoir répondu, montrer le nouveau message", "follow_topics_you_reply_to": "S'abonner aux sujets auxquels vous répondez", "follow_topics_you_create": "S'abonner aux sujets que vous créez", diff --git a/public/language/gl/admin/advanced/database.json b/public/language/gl/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/gl/admin/advanced/database.json +++ b/public/language/gl/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/gl/admin/manage/uploads.json b/public/language/gl/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/gl/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/gl/email.json b/public/language/gl/email.json index 391115d818..5eff709386 100644 --- a/public/language/gl/email.json +++ b/public/language/gl/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Reinicio de contrasinal solicitado - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Benvido a %1", "invite": "Invitación de %1", "greeting_no_name": "Ola", diff --git a/public/language/gl/error.json b/public/language/gl/error.json index 1e24dd334b..0792da9ad1 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Xa votache esta mensaxe.", "reputation-system-disabled": "O sistema de reputación está deshabilitado", "downvoting-disabled": "Os votos negativos están deshabilitados", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/gl/notifications.json b/public/language/gl/notifications.json index f5e6f5bfbc..947cbc0cea 100644 --- a/public/language/gl/notifications.json +++ b/public/language/gl/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Estás saíndo %1", "continue_to": "Continuar a %1", "return_to": "Volver a %1", - "new_notification": "Nova Notificación", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Tes notificacións non lidas", "all": "All", "topics": "Topics", diff --git a/public/language/gl/user.json b/public/language/gl/user.json index 86be263088..f6e30aeb29 100644 --- a/public/language/gl/user.json +++ b/public/language/gl/user.json @@ -84,7 +84,6 @@ "digest_daily": "Diariamente", "digest_weekly": "Semanalmente", "digest_monthly": "Mensualmente", - "settings-require-reload": "Algúns cambios nas opcións requiren recarga-la páxina. Pica aquí para facelo.", "has_no_follower": "Ninguén segue a este usuario :(", "follows_no_one": "Este usuario non sigue a ninguén :(", "has_no_posts": "Este usuario aínda non posteu.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Abrir ligazóns externos nunca nova pestaña", "enable_topic_searching": "Permitir buscar dentro dun tema", "topic_search_help": "Se se activa, o buscador do NodeBB superporase ao propio do navegador dentro de cada tema, permitindo buscar en todo o tema e non só naquilo que se presenta na pantalla.", - "delay_image_loading": "Retrasar a carga de imaxes", - "image_load_delay_help": "Se se habilita, as imaxes non cargarán hasta que sexan visibles na pantalla", "scroll_to_my_post": "Logo de enviar unha resposta, mostrar a nova mensaxe", "follow_topics_you_reply_to": "Segui-los temas aos que respondes", "follow_topics_you_create": "Segui-los temas que creaches ti", diff --git a/public/language/he/admin/advanced/database.json b/public/language/he/admin/advanced/database.json index f3fd3d7866..f3bbcb8d34 100644 --- a/public/language/he/admin/advanced/database.json +++ b/public/language/he/admin/advanced/database.json @@ -18,23 +18,34 @@ "mongo.resident-memory": "זכרון קיים", "mongo.virtual-memory": "זיכרון וירטואלי", "mongo.mapped-memory": "זיכרון ממופה", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "מידע לא מעובד מMongoDB", "redis": "Redis", "redis.version": "גרסת Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "לקוחות מחוברים", - "redis.connected-slaves": "Connected Slaves", + "redis.connected-slaves": "לקוחות מחוברים", "redis.blocked-clients": "לקוחות חסומים", "redis.used-memory": "זכרון בשימוש", "redis.memory-frag-ratio": "יחס פיצול זכרון", "redis.total-connections-recieved": "סך כל החיבורים שהתקבלו", "redis.total-commands-processed": "סך כל הפקודות שעובדו", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "מידע לא מעובד מRedis", "postgres": "Postgres", - "postgres.version": "PostgreSQL Version", - "postgres.raw-info": "Postgres Raw Info" + "postgres.version": "גרסאת PostgreSQL", + "postgres.raw-info": "מידע לא מעובד מ Postgres" } diff --git a/public/language/he/admin/manage/uploads.json b/public/language/he/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/he/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/he/email.json b/public/language/he/email.json index 029b6735cc..21845ed71d 100644 --- a/public/language/he/email.json +++ b/public/language/he/email.json @@ -1,11 +1,12 @@ { - "password-reset-requested": "בקשת איפוס הסיסמה נשלחה - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "ברוכים הבאים ל%1", "invite": "הזמנה מ%1", "greeting_no_name": "שלום", "greeting_with_name": "שלום %1", - "email.verify-your-email.subject": "Please verify your email", - "email.verify.text1": "Your email address has changed!", + "email.verify-your-email.subject": "בבקשה אמת את המייל שלך.", + "email.verify.text1": "כתובת המייל שלך שונתה!", "welcome.text1": "תודה שנרשמת ל%1!", "welcome.text2": "על מנת להפעיל את החשבון שלך, אנו צריכים לוודא שאתה בעל חשבון המייל שנרשמת איתו.", "welcome.text3": "מנהל אישר את ההרשמה שלך.\nאתה יכול להתחבר עם השם משתמש והסיסמא שלך מעכשיו.", diff --git a/public/language/he/error.json b/public/language/he/error.json index bc720868ec..31dade5372 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -18,7 +18,7 @@ "invalid-username-or-password": "אנא הגדר שם משתמש וסיסמה", "invalid-search-term": "מילת חיפוש לא תקינה", "invalid-url": "שגיאה בכתובת URL", - "local-login-disabled": "Local login system has been disabled for non-privileged accounts.", + "local-login-disabled": "מערכת הכניסה המקומית הושבתה עבור חשבונות שאינם מורשים.", "csrf-invalid": "אין באפשרותנו לחבר אותך למערכת, מכיוון שעבר זמן רב מידי. אנא נסה שנית.", "invalid-pagination-value": "ערך דף לא חוקי, חייב להיות לפחות %1 ולא מעל %2", "username-taken": "שם משתמש תפוס", @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "הצבעת כבר בנושא זה", "reputation-system-disabled": "מערכת המוניטין לא פעילה.", "downvoting-disabled": "היכולת להצביע נגד לא פעילה", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/he/notifications.json b/public/language/he/notifications.json index 0b9d8d4744..d68e6ef820 100644 --- a/public/language/he/notifications.json +++ b/public/language/he/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "אתה עוזב עכשיו את %1", "continue_to": "המשך ל %1", "return_to": "חזור ל %1", - "new_notification": "התראה חדשה", - "new_notification_from": "יש לך התראה חדשה מ %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "יש לך התראות שלא נקראו.", "all": "הכל", "topics": "נושאים", diff --git a/public/language/he/uploads.json b/public/language/he/uploads.json index 656acb5181..57c63805f4 100644 --- a/public/language/he/uploads.json +++ b/public/language/he/uploads.json @@ -3,7 +3,7 @@ "select-file-to-upload": "בחר קובץ להעלאה!", "upload-success": "הקובץ הועלה בהצלחה!", "maximum-file-size": "מקסימום %1 קילובייט", - "no-uploads-found": "No uploads found", - "public-uploads-info": "Uploads are public, all visitors can see them.", - "private-uploads-info": "Uploads are private, only logged in users can see them." + "no-uploads-found": "לא נמצאו העלאות!", + "public-uploads-info": "העלאות הינם ציבוריות. כל הגולשים יוכלו לראותם.", + "private-uploads-info": "העלאות הינם פרטיות. רק משתמשים מחוברים יוכלו לראותם." } \ No newline at end of file diff --git a/public/language/he/user.json b/public/language/he/user.json index e7de561af3..e21859a7d4 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -32,8 +32,8 @@ "following": "עוקב אחרי", "blocks": "Blocks", "block_toggle": "Toggle Block", - "block_user": "Block User", - "unblock_user": "Unblock User", + "block_user": "חסום משתמש", + "unblock_user": "בטל חסימת משתמש", "aboutme": "אודותי", "signature": "חתימה", "birthday": "יום הולדת", @@ -84,7 +84,6 @@ "digest_daily": "יומי", "digest_weekly": "שבועי", "digest_monthly": "חודשי", - "settings-require-reload": "כמה שינויים בהגדרות דורשים ריענון לדף. לחץ כאן כדי לרענן את הדף.", "has_no_follower": "למשתמש זה אין עוקבים :(", "follows_no_one": "משתמש זה אינו עוקב אחרי אחרים :(", "has_no_posts": "המשתמש טרם יצר פוסטים כלשהם.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "פתח קישורים חיצוניים בכרטיסייה חדשה", "enable_topic_searching": "הפעל חיפוש בתוך נושא", "topic_search_help": "אם מאופשר, החיפוש בתוך הנושא יעקוף את שיטת החיפוש של הדפדפן, ויאפשר לך לחפש בכל הנושא - ולא רק במה שמוצג על המסך", - "delay_image_loading": "עכב טעינת תמונות", - "image_load_delay_help": "אם מאופשר, תמונות שנמצאות בתחתית העמוד יטענו רק כאשר תגלול אליהן", "scroll_to_my_post": "הצג את הפוסט לאחר פרסום התגובה", "follow_topics_you_reply_to": "עקוב אחר נושאים שהגבת עליהם", "follow_topics_you_create": "עקוב אחר נושאים שפרסמת", diff --git a/public/language/he/users.json b/public/language/he/users.json index d13d34b869..25b61a87db 100644 --- a/public/language/he/users.json +++ b/public/language/he/users.json @@ -10,7 +10,7 @@ "filter-by": "פלטר על-פי", "online-only": "אונליין בלבד", "invite": "הזמן", - "prompt-email": "Emails:", + "prompt-email": "מיילים:", "invitation-email-sent": "מייל הזמנה נשלח ל%1", "user_list": "רשימת משתמשים", "recent_topics": "נושאים אחרונים", diff --git a/public/language/hr/admin/advanced/database.json b/public/language/hr/admin/advanced/database.json index 1936b2d04c..eb28162b48 100644 --- a/public/language/hr/admin/advanced/database.json +++ b/public/language/hr/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Rezidentna memorija", "mongo.virtual-memory": "Virtualna memorija", "mongo.mapped-memory": "Mapirana memorija", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB sirove informacije", "redis": "Redis", "redis.version": "Redis verzija", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Spojeni klijenti", "redis.connected-slaves": "Povezani robovi", "redis.blocked-clients": "Blokirani klijenti", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Ukupno primljeni veza", "redis.total-commands-processed": "Ukupne prcesirane komande", "redis.iops": "Instante operacije po sekundi", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis sirova informacija", diff --git a/public/language/hr/admin/manage/uploads.json b/public/language/hr/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/hr/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/hr/email.json b/public/language/hr/email.json index 587e7ae0ba..7dad832731 100644 --- a/public/language/hr/email.json +++ b/public/language/hr/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Zatraženo ponovno kreiranje lozinke - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Dobrodošli na %1", "invite": "Poziv s %1", "greeting_no_name": "Zdravo", diff --git a/public/language/hr/error.json b/public/language/hr/error.json index 8e904904d0..0ee4aacbf0 100644 --- a/public/language/hr/error.json +++ b/public/language/hr/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Već ste glasali za ovu objavu", "reputation-system-disabled": "Sistem reputacije onemogućen.", "downvoting-disabled": "Oduzimanje glasova je onemogućeno", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/hr/notifications.json b/public/language/hr/notifications.json index 4e0c2d5ebf..14b92c7c82 100644 --- a/public/language/hr/notifications.json +++ b/public/language/hr/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Napuštate %1", "continue_to": "Nastavite na %1", "return_to": "Vratite se na %1", - "new_notification": "Nova obavijest", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Nepročitane obavijesti.", "all": "Sve", "topics": "Teme", diff --git a/public/language/hr/user.json b/public/language/hr/user.json index 5f85e9ff7e..e3ed734d0f 100644 --- a/public/language/hr/user.json +++ b/public/language/hr/user.json @@ -84,7 +84,6 @@ "digest_daily": "Dnevno", "digest_weekly": "Tjedno", "digest_monthly": "Mjesečno", - "settings-require-reload": "Neke promjene zahtjevaju osvježenje. Kliknite ovdje za osvježavanje stranice.", "has_no_follower": "Ovaj korisnik nema pratitelja :(.", "follows_no_one": "Ovaj korisnik nikog ne prati :(", "has_no_posts": "Ovaj korisnik nema objava.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Otvori odlazne poveznice u novom tabu", "enable_topic_searching": "Omogući pretragu unutar tema", "topic_search_help": "Ako uključeno,pretraga unutar tema će zamijeniti pretragu ključnih riječi vašeg pretraživača kojemu je omogućeno pretraživanje samo onoga što je na ekranu,za razliku od ove opcije koja omogućava pretragu na cijeloj temi", - "delay_image_loading": "Odgodi učitavanje slika.", - "image_load_delay_help": "Ako omogućeno,slike u ovoj temi se neće učitavati dok nisu u potpunosti unutar ruba ekrana.", "scroll_to_my_post": "Nakon objavljivanja,prikaži objavu", "follow_topics_you_reply_to": "Prati teme na koje objavljuješ", "follow_topics_you_create": "Prati teme koje si napravio", diff --git a/public/language/hu/admin/advanced/database.json b/public/language/hu/admin/advanced/database.json index 96161dee05..5d805a2fac 100644 --- a/public/language/hu/admin/advanced/database.json +++ b/public/language/hu/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Rezidens memória", "mongo.virtual-memory": "Virtuális memória", "mongo.mapped-memory": "Leképezett memória", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB nyers információ", "redis": "Redis", "redis.version": "Redis verzió", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Csatlakozott kliensek", "redis.connected-slaves": "Csatlakozott szolgák", "redis.blocked-clients": "Blokkolt kliensek", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Összes fogadott csatlakozás", "redis.total-commands-processed": "Összes feldolgozott parancs", "redis.iops": "Pillanatnyi művelet mpercenként", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Kulcstér találatok", "redis.keyspace-misses": "Kulcstér tévesztések", "redis.raw-info": "Redis nyers információ", diff --git a/public/language/hu/admin/manage/uploads.json b/public/language/hu/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/hu/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/hu/email.json b/public/language/hu/email.json index 1ec0454153..9fc6787020 100644 --- a/public/language/hu/email.json +++ b/public/language/hu/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Jelszó visszaállítási kérelem - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Üdvözlet a(z) %1 oldalon", "invite": "Meghívó a(z) %1 oldalra", "greeting_no_name": "Helló", diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 8b8d9c7a6d..074c3c2efb 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Hírnév funkció kikapcsolva.", "downvoting-disabled": "Leszavazás funkció kikapcsolva", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/hu/notifications.json b/public/language/hu/notifications.json index da4c65a72b..7fafe411b3 100644 --- a/public/language/hu/notifications.json +++ b/public/language/hu/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Most elhagyod az oldalt: %1", "continue_to": "%1 megnyitása", "return_to": "Vissza - %1", - "new_notification": "Új értesítés", - "new_notification_from": "Új értesítésed van (%1)", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Olvasatlan értesítéseid vannak.", "all": "Mind", "topics": "Témakör", diff --git a/public/language/hu/user.json b/public/language/hu/user.json index f7ab1af2c0..0cb9bd1c3d 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -84,7 +84,6 @@ "digest_daily": "Napi", "digest_weekly": "Heti", "digest_monthly": "Havi", - "settings-require-reload": "Néhány módosítás újratöltést igényel. Kattints ide az oldal frissítéséhez.", "has_no_follower": "Ezt a felhasználót nem követi senki :(", "follows_no_one": "Ez a felhasználó nem követ senkit :(", "has_no_posts": "A felhasználó még nem szólt hozzá semmihez.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Kimenő hivatkozások megnyitása új lapon", "enable_topic_searching": "Témakörön belüli keresés engedélyezése", "topic_search_help": "Ha engedélyezett, a témakörön belüli keresés felülírja az alapértelmezett keresési viselkedést, és ezáltal az egész témakörben keresel, nem csak a képernyőn megjelenőkben", - "delay_image_loading": "Képbetöltési késleltetés", - "image_load_delay_help": "Ha engedélyezett, a témakör képei csak a nézetbe kerüléskor töltődnek be", "scroll_to_my_post": "Válaszolást követően az új hozzászólás megjelenítése", "follow_topics_you_reply_to": "Témakör figyelése, melyre válaszolsz", "follow_topics_you_create": "Témakör figyelése, amit létrehozol", diff --git a/public/language/id/admin/advanced/database.json b/public/language/id/admin/advanced/database.json index fe2720e989..5daf6500a6 100644 --- a/public/language/id/admin/advanced/database.json +++ b/public/language/id/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Versi Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/id/admin/manage/uploads.json b/public/language/id/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/id/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/id/email.json b/public/language/id/email.json index 9ac7544bc7..1e2c3edaba 100644 --- a/public/language/id/email.json +++ b/public/language/id/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Permintaan atur ulang Kata Sandi - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Selamat datang di %1", "invite": "Undangan dari %1", "greeting_no_name": "Hai", diff --git a/public/language/id/error.json b/public/language/id/error.json index e93dc53d50..4cf65a0436 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Sistem reputasi ditiadakan.", "downvoting-disabled": "Downvoting ditiadakan", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/id/notifications.json b/public/language/id/notifications.json index 0ce32cb76d..61f6ae8cff 100644 --- a/public/language/id/notifications.json +++ b/public/language/id/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Lanjut ke %1", "return_to": "Kembali ke %1", - "new_notification": "Pemberitahuan Baru", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Kamu memiliki pemberitahuan yang belum dibaca.", "all": "All", "topics": "Topics", diff --git a/public/language/id/user.json b/public/language/id/user.json index 24f2527445..703caef891 100644 --- a/public/language/id/user.json +++ b/public/language/id/user.json @@ -84,7 +84,6 @@ "digest_daily": "Harian", "digest_weekly": "Mingguan", "digest_monthly": "Bulanan", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "User ini tidak memiliki pengikut :(", "follows_no_one": "User ini tidak mengikuti seorangpun :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Gunakan Pencarian Di dalam Topik", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/it/admin/advanced/database.json b/public/language/it/admin/advanced/database.json index 6b2f85cdd4..49716dfaf1 100644 --- a/public/language/it/admin/advanced/database.json +++ b/public/language/it/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Memoria Allocata", "mongo.virtual-memory": "Memoria Virtuale", "mongo.mapped-memory": "Memoria Mappata", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Versione Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Clients Connessi", "redis.connected-slaves": "Slaves connessi", "redis.blocked-clients": "Clients Bloccati", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Totale Connessioni Ricevute", "redis.total-commands-processed": "Totale Comandi Processati", "redis.iops": "Operazioni Instantanee al Secondo", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/it/admin/manage/uploads.json b/public/language/it/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/it/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/it/email.json b/public/language/it/email.json index bdfb2efbab..46307a44ad 100644 --- a/public/language/it/email.json +++ b/public/language/it/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Richiesta di reset della password - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Benvenuto in %1", "invite": "Invito da %1", "greeting_no_name": "Ciao", diff --git a/public/language/it/error.json b/public/language/it/error.json index 1d0a77e651..4533f50eb0 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Sei l'unico che ha il permesso di editare i messaggi per %1 secondi(o) dopo il loro invio", "chat-delete-duration-expired": "Sei l'unico che ha il permesso di eliminare i messaggi per %1 secondi(o) dopo il loro invio", "chat-deleted-already": "Il messaggio è già stato eliminato.", - "chat-restored'already": "Il messaggio è già stato ripristinato.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Hai già votato per questo post", "reputation-system-disabled": "Il sistema di reputazione è disabilitato.", "downvoting-disabled": "Il Downvoting è disabilitato", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Non puoi spostare il post nella stessa discussione!", "cannot-block-self": "Non puoi auto bloccarti!", "cannot-block-privileged": "Impossibile bloccare amministratori o moderatori globali", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Sembra ci sia un problema con la tua connessione internet" } \ No newline at end of file diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json index 4b61946289..5271035074 100644 --- a/public/language/it/notifications.json +++ b/public/language/it/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Stai lasciando %1", "continue_to": "Continua a %1", "return_to": "Ritorna a %1", - "new_notification": "Nuova Notifica", - "new_notification_from": "Notifica dal %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Hai notifiche non lette.", "all": "Tutte", "topics": "Discussioni", diff --git a/public/language/it/user.json b/public/language/it/user.json index 2bd34510e4..9418426c49 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -84,7 +84,6 @@ "digest_daily": "Quotidiano", "digest_weekly": "Settimanale", "digest_monthly": "Mensile", - "settings-require-reload": "Alcuni cambiamenti di impostazioni richiedono un ricaricamento. Clicca qui per ricaricare la pagina.", "has_no_follower": "Questo utente non è seguito da nessuno :(", "follows_no_one": "Questo utente non segue nessuno :(", "has_no_posts": "Questo utente non ha ancora scritto niente.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Apri i link web in una nuova pagina", "enable_topic_searching": "Abilita la ricerca negli argomenti", "topic_search_help": "Se abilitata, la ricerca negli argomenti ignorerà il comportamento predefinito del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo", - "delay_image_loading": "Ritarda il caricamento delle immagini", - "image_load_delay_help": "Se selezionato, le immagini nelle discussioni non saranno caricate finché non sono visibili nello schermo", "scroll_to_my_post": "Dopo aver postato una risposta, mostra il nuovo post", "follow_topics_you_reply_to": "Segui le discussioni a cui rispondi", "follow_topics_you_create": "Segui le discussioni che crei", diff --git a/public/language/ja/admin/admin.json b/public/language/ja/admin/admin.json index 76499032d2..d48f8b93c8 100644 --- a/public/language/ja/admin/admin.json +++ b/public/language/ja/admin/admin.json @@ -1,5 +1,5 @@ { - "alert.confirm-rebuild-and-restart": "Are you sure you wish to rebuild and restart NodeBB?", + "alert.confirm-rebuild-and-restart": "NodeBBを再構築して再起動してもよろしいですか?", "alert.confirm-restart": "NodeBBを本当に再起動しますか?", "acp-title": "%1| NodeBB管理画面", diff --git a/public/language/ja/admin/advanced/database.json b/public/language/ja/admin/advanced/database.json index a02f6bc4c1..dd8ee5aa0f 100644 --- a/public/language/ja/admin/advanced/database.json +++ b/public/language/ja/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "常駐メモリ", "mongo.virtual-memory": "仮想メモリ", "mongo.mapped-memory": "マップされたメモリ", + "mongo.bytes-in": "バイト数", + "mongo.bytes-out": "バイトアウト", + "mongo.num-requests": "リクエスト数", "mongo.raw-info": "MongoDBのRaw情報", "redis": "Redis", "redis.version": "Redisのバージョン", + "redis.keys": "キー", + "redis.expires": "期限切れ", + "redis.avg-ttl": "平均TTL", "redis.connected-clients": "接続されたクライアント", "redis.connected-slaves": "接続されたスレーヴ", "redis.blocked-clients": "ブロックされたクライアント", @@ -30,11 +36,16 @@ "redis.total-connections-recieved": "受け取った総接続数", "redis.total-commands-processed": "処理された総コマンド数", "redis.iops": "秒ごとの瞬間操作数", + "redis.iinput": "瞬時入力/秒", + "redis.ioutput": "瞬時出力/秒", + "redis.total-input": "合計入力", + "redis.total-output": "合計出力", + "redis.keyspace-hits": "ヒットしたキー・スペース", "redis.keyspace-misses": "見逃したキー・スペース", "redis.raw-info": "RedisのRaw情報", "postgres": "Postgres", "postgres.version": "PostgreSQL Version", - "postgres.raw-info": "Postgres Raw Info" + "postgres.raw-info": "Postgres のRaw情報" } diff --git a/public/language/ja/admin/manage/uploads.json b/public/language/ja/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/ja/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/ja/email.json b/public/language/ja/email.json index 0685b075a8..d8c824666d 100644 --- a/public/language/ja/email.json +++ b/public/language/ja/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "パスワードのリセットをリクエストしました - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "%1へようこそ!", "invite": "%1からの招待です", "greeting_no_name": "こんにちは", diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 4563f3f065..d96468198f 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "あなたはすでにこの投稿を評価しました。", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "管理者またはグローバルモデレーターはブロックできません", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json index ce635ae28c..1be1639f93 100644 --- a/public/language/ja/notifications.json +++ b/public/language/ja/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "%1から離れようとしています", "continue_to": "%1へ行く", "return_to": "%1へ戻る", - "new_notification": "新しい通知", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "未読の通知があります。", "all": "全て", "topics": "スレッド", diff --git a/public/language/ja/user.json b/public/language/ja/user.json index f6bc22000f..d762ea9aba 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -1,7 +1,7 @@ { "banned": "BANされた", "offline": "オフライン", - "deleted": "Deleted", + "deleted": "削除されました", "username": "ユーザー名", "joindate": "参加日", "postcount": "投稿数", @@ -12,7 +12,7 @@ "ban_account_confirm": "本当にこのユーザーをBANしますか?", "unban_account": "禁止アカウント解除します", "delete_account": "アカウント削除します", - "delete_account_confirm": "Are you sure you want to delete your account?
This action is irreversible and you will not be able to recover any of your data

Enter your password to confirm that you wish to destroy this account.", + "delete_account_confirm": "本当に自分のアカウントを削除しますか?
この操作を実行すると元に戻せません。データは回復できません。

続けるには自分のユーザー名を入力してください。", "delete_this_account_confirm": "本当にこのアカウントを削除しますか?
実行するとアカウントのデータは全て削除されます。

", "account-deleted": "アカウントが解除されました", "fullname": "フルネーム", @@ -25,7 +25,7 @@ "profile_views": "閲覧数", "reputation": "評価", "bookmarks": "ブックマーク", - "watched_categories": "Watched categories", + "watched_categories": "ウォッチ中のカテゴリ", "watched": "ウォッチ済み", "ignored": "無視済み", "followers": "フォロワー", @@ -84,7 +84,6 @@ "digest_daily": "デイリー", "digest_weekly": "ウィークリー", "digest_monthly": "マンスリー", - "settings-require-reload": "設定を変更するにはページを更新する必要があります。ここを押して、ページを更新します。", "has_no_follower": "フォロワーはまだいません :(", "follows_no_one": "フォロー中のユーザーはまだいません :(", "has_no_posts": "このユーザーはまだ一つも投稿していません", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "外部リンクを新しいタブで開く", "enable_topic_searching": "スレッド内検索を有効にする", "topic_search_help": "有効にしたら、インースレッドの検索はブラウザの既定機能を無視して、スクリーンに示したよりスレッド内からの全部を検索します", - "delay_image_loading": "画像読み込みを遅延させる", - "image_load_delay_help": "有効の場合、スレッド内の画像はスクロールされるまで読み込みません", "scroll_to_my_post": "返信を投稿した後、新しい投稿を表示する", "follow_topics_you_reply_to": "あなたが返信したスレッドをウォッチする", "follow_topics_you_create": "あなたが作成したスレッドをウォッチする", diff --git a/public/language/ko/admin/advanced/database.json b/public/language/ko/admin/advanced/database.json index 56ad994c1f..2f3b2dad8a 100644 --- a/public/language/ko/admin/advanced/database.json +++ b/public/language/ko/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis 버젼", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "연결된 클라이언트", "redis.connected-slaves": "연결된 slaves", "redis.blocked-clients": "차단된 클라이언트", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "받은 총 커넥션 수", "redis.total-commands-processed": "처리된 총 커맨드 수", "redis.iops": "초당 Instantaneous Ops", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace 히트", "redis.keyspace-misses": "Keyspace 미스", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/ko/admin/manage/uploads.json b/public/language/ko/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/ko/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/ko/email.json b/public/language/ko/email.json index eb8bee4035..3b56627055 100644 --- a/public/language/ko/email.json +++ b/public/language/ko/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "비밀번호 재설정을 요청했습니다 - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "%1에 오신 것을 환영합니다.", "invite": "%1 님이 초대하였습니다.", "greeting_no_name": "안녕하세요", diff --git a/public/language/ko/error.json b/public/language/ko/error.json index d797e6a090..58e62f625f 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "이미 삭제된 대화 메시지입니다.", - "chat-restored'already": "이미 복원된 대화 메시지입니다.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "이미 이 포스트에 투표하셨습니다.", "reputation-system-disabled": "인지도 시스템이 비활성 상태입니다.", "downvoting-disabled": "비추천 기능이 비활성 상태입니다.", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "관리자나 글로벌 매니저는 차단할 수 없습니다", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json index a6f3f77b1e..391e826e58 100644 --- a/public/language/ko/notifications.json +++ b/public/language/ko/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "%1 를 떠납니다.", "continue_to": "%1 사이트로 이동", "return_to": "%1 사이트로 돌아가기", - "new_notification": "새 알림", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "읽지 않은 알림이 있습니다.", "all": "모든 알림", "topics": "게시물", diff --git a/public/language/ko/user.json b/public/language/ko/user.json index 9266ffba4d..1d9947dbd7 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -84,7 +84,6 @@ "digest_daily": "매일", "digest_weekly": "매주", "digest_monthly": "매월", - "settings-require-reload": "일부 설정 변경은 새로고침이 필요합니다. 여기를 눌러서 페이지를 새로고침 해주세요.", "has_no_follower": "이 사용자는 팔로워가 없습니다 :(", "follows_no_one": "이 사용자는 아무도 팔로우하고 있지 않습니다 :(", "has_no_posts": "이 사용자가 작성한 포스트가 없습니다.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "외부 링크를 새로운 탭에서 열람", "enable_topic_searching": "게시물 내 검색 허용", "topic_search_help": "만약 활성화된다면, 브라우저의 기본 검색 기능은 무효화되고 게시물 내 검색을 통해 화면에 보여지는 것 뿐만 아니라 게시물 전체의 내용을 검색할 수 있습니다.", - "delay_image_loading": "이미지 로딩 지연", - "image_load_delay_help": "만약 활성화된다면, 이미지 위치로 스크롤을 움직이기 전까지 이미지가 로드 되지 않습니다.", "scroll_to_my_post": "답글 게시 후 새 포스트 보여주기", "follow_topics_you_reply_to": "내가 답글을 단 게시물을 관심 목록에 추가", "follow_topics_you_create": "내가 작성한 게시물을 관심 목록에 추가", diff --git a/public/language/lt/admin/advanced/database.json b/public/language/lt/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/lt/admin/advanced/database.json +++ b/public/language/lt/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/lt/admin/manage/uploads.json b/public/language/lt/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/lt/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/lt/email.json b/public/language/lt/email.json index e54708cf6f..a95806010e 100644 --- a/public/language/lt/email.json +++ b/public/language/lt/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Slaptažodžio atstatymas būtinas - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Sveiki atvykę į %1", "invite": "Pakvietimas nuo %1", "greeting_no_name": "Sveiki", diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 2cd92f97d7..523d83fecb 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Redaguoti susirašinėjimo žinutes galima tik %1 sekundę(-es/-ių) po paskelbimo", "chat-delete-duration-expired": "Trinti žinutes galima tik %1 sekundę(-es/-ių) po paskelbimo", "chat-deleted-already": "Ši žinutė buvo pašalinta", - "chat-restored'already": "Ši žinutė buvo atkurta", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Jūs jau balsavote už šį pranešimą.", "reputation-system-disabled": "Reputacijos sistema išjungta.", "downvoting-disabled": "Downvoting yra išjungtas", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Negalima perkelti įrašo į tą pačią temą!", "cannot-block-self": "Savęs užblokuoti negalima!", "cannot-block-privileged": "Negalima blokuoti administratorių arba visuotinių moderatorių", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Panašu, jog yra problema su jūsų interneto prieiga" } \ No newline at end of file diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json index 56a4698eeb..51892af7a8 100644 --- a/public/language/lt/notifications.json +++ b/public/language/lt/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Tęsti į %1", "return_to": "Grįžti į %1", - "new_notification": "Naujas pranešimas", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Jūs turite neperskaitytų pranešimų.", "all": "All", "topics": "Topics", diff --git a/public/language/lt/user.json b/public/language/lt/user.json index 9acc4ea130..f63b071d04 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -84,7 +84,6 @@ "digest_daily": "Kas dieną", "digest_weekly": "Kas savaitę", "digest_monthly": "Kas mėnesį", - "settings-require-reload": "Kai kurie nustatymų pakeitimai reikalauja perkrovimo. Spauskite čia kad perkrauti puslapį", "has_no_follower": "Šis vartotojas neturi jokių sekėjų :(", "follows_no_one": "Šis vartotojas nieko neseka :(", "has_no_posts": "Šis vartotojas pakolkas neparašė jokių pranešimų", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Atidaryti išeinančias nuorodas naujam skirtuke", "enable_topic_searching": "Įjungti Temų Ieškojimą ", "topic_search_help": "Jeigu įjungtas, temų ieškojimas, nepaisys naršyklės puslapio ieškojimo, ir pradės ieškoti tik toje temoje kuri bus rodoma ekrane", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "Jei įjungta, paveikslėliai temose nesikraus, kol nebus iki jų nuslinkta", "scroll_to_my_post": "Po parašyto atsakymo, rodyti naują pranešimą", "follow_topics_you_reply_to": "Peržiūrėti temas, kuriose Jūs atsakėte", "follow_topics_you_create": "Peržiūrėti temas, kurias Jūs sukūrėte", diff --git a/public/language/lv/admin/advanced/database.json b/public/language/lv/admin/advanced/database.json index b1693431bf..c1959b2f8b 100644 --- a/public/language/lv/admin/advanced/database.json +++ b/public/language/lv/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Aizņemtā atmiņa", "mongo.virtual-memory": "Virtuālā atmiņa", "mongo.mapped-memory": "Saistītā atmiņa", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB info kods", "redis": "Redis", "redis.version": "Redis versija", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Savienotie klienti", "redis.connected-slaves": "Savienotās kopijas", "redis.blocked-clients": "Bloķētie klienti", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Kopēji saņemtie savienojumi", "redis.total-commands-processed": "Kopēji apstrādātas operācijas", "redis.iops": "Momentānais operāciju skaits sekundē", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Atrasto atslēgu skaits", "redis.keyspace-misses": "Neatrasto atslēgu skaits", "redis.raw-info": "Redis info kods", diff --git a/public/language/lv/admin/manage/uploads.json b/public/language/lv/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/lv/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/lv/email.json b/public/language/lv/email.json index 755959ed9c..11069051a6 100644 --- a/public/language/lv/email.json +++ b/public/language/lv/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Paroles atiestatīšana pieprasīta - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Sveiks %1", "invite": "Uzaicinājums no %1", "greeting_no_name": "Sveiki", diff --git a/public/language/lv/error.json b/public/language/lv/error.json index c1a71e5c0c..8fdba5a4dd 100644 --- a/public/language/lv/error.json +++ b/public/language/lv/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Pēc publicēšanas ir atļauts tikai %1 sekundes laika rediģēt sarunu", "chat-delete-duration-expired": "Pēc publicēšanas ir atļauts tikai %1 sekundes laika izdzēst sarunu", "chat-deleted-already": "Saruna jau ir izdzēsta.", - "chat-restored'already": "Saruna jau ir atjaunota.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Tu jau balsoji par šo rakstu.", "reputation-system-disabled": "Ranga punktu sistēma ir atspējota.", "downvoting-disabled": "Balsošana \"pret\" ir atspējota", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Nevar pārnest uz savu pašu tematu!", "cannot-block-self": "Nevar pats sevi bloķēt!", "cannot-block-privileged": "Nevar bloķēt administratorus vai globālos moderatorus", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Šķiet, ka pastāv problēma ar Tavu interneta savienojumu" } \ No newline at end of file diff --git a/public/language/lv/notifications.json b/public/language/lv/notifications.json index 6f19fc9a73..76ff3f1e45 100644 --- a/public/language/lv/notifications.json +++ b/public/language/lv/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Tu tagad atstāj %1", "continue_to": "Turpināt uz %1", "return_to": "Atgriezties pie %1", - "new_notification": "Jauns paziņojums", - "new_notification_from": "Ir jauns paziņojums no %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Ir nelasīti paziņojumi.", "all": "Visi", "topics": "Par tematiem", diff --git a/public/language/lv/user.json b/public/language/lv/user.json index 378d177523..ad1f37946d 100644 --- a/public/language/lv/user.json +++ b/public/language/lv/user.json @@ -84,7 +84,6 @@ "digest_daily": "Ik dienas", "digest_weekly": "Ik nedēļas", "digest_monthly": "Ik mēnesi", - "settings-require-reload": "Dažām iestatījumu izmaiņām ir nepieciešama pārlādēšana. Noklikšķināt, lai pārlādētu lapu.", "has_no_follower": "Šim lietotājam nav nevienu sekotāju :(", "follows_no_one": "Šis lietotājs neseko nevienam :(", "has_no_posts": "Lietotājs vēl nav neko rakstījis(-jusi).", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Atvērt izejošās saites jaunā cilnē", "enable_topic_searching": "Iespējot meklēšanu tematu saturā", "topic_search_help": "Ja ir iespējots, meklēšana tematos ignorē pārlūka noklusējuma lapu meklēšanas uzvedību un meklē visā tematā, ne tikai tā temata daļā, kas tiek rādīta ekrānā", - "delay_image_loading": "Pakavēt bilžu ielādi", - "image_load_delay_help": "Ja ir iespējots, bildes tematos netiks ielādētas, kamēr tās neieslīd skatā", "scroll_to_my_post": "Rādīt jauno rakstu pēc publicēšanas", "follow_topics_you_reply_to": "Novērot tematus, kuros esi rakstījis(-jusi)", "follow_topics_you_create": "Novērot tematus, kurus esi izveidojis(-jusi)", diff --git a/public/language/ms/admin/advanced/database.json b/public/language/ms/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/ms/admin/advanced/database.json +++ b/public/language/ms/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/ms/admin/manage/uploads.json b/public/language/ms/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/ms/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/ms/email.json b/public/language/ms/email.json index afa3e5e896..c3157facea 100644 --- a/public/language/ms/email.json +++ b/public/language/ms/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Permintaan set semula kata lalaun - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Selamat datang ke %1", "invite": "Jemputan daripada %1", "greeting_no_name": "Salam", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index d183e988c4..6827bf326f 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Sistem reputasi dilumpuhkan.", "downvoting-disabled": "Undi turun dilumpuhkan", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json index 96280e297e..7346cb552b 100644 --- a/public/language/ms/notifications.json +++ b/public/language/ms/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Anda sedang meninggalkan %1", "continue_to": "Sambung ke %1", "return_to": "Kembali ke %1", - "new_notification": "Pemberitahuan baru", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Ada pemberitahuan yang belum dibaca", "all": "All", "topics": "Topics", diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 012f98a62a..fe77d4c974 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -84,7 +84,6 @@ "digest_daily": "Harian", "digest_weekly": "Mingguan", "digest_monthly": "Bulanan", - "settings-require-reload": "Sebahagian perubahan tetapan memerlukan segar semula. Klik sini untuk segar semula halaman ini.", "has_no_follower": "Pengguna ini tiada pengikut :(", "follows_no_one": "Pengguna ini tidak mengikuti sesiapa :(", "has_no_posts": "Pengguna ini belum menulis sebarang kiriman lagi.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Buka pautan luar di tab yang baru", "enable_topic_searching": "Aktifkan Pencarian Dalam-Topik", "topic_search_help": "Jika diaktifkan, pencarian dalam-topik akan membatalkan fungsi asal pencarian pelayan dan membenarkan anda untuk mencari seluruh topik, daripada menunjukkan apa yang terdapat pada skrin sahaja", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/nb/admin/advanced/database.json b/public/language/nb/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/nb/admin/advanced/database.json +++ b/public/language/nb/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/nb/admin/manage/uploads.json b/public/language/nb/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/nb/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/nb/email.json b/public/language/nb/email.json index ca1f57dc27..22893eb989 100644 --- a/public/language/nb/email.json +++ b/public/language/nb/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Tilbakestilling av passord forespurt - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Velkommen til %1", "invite": "Invitasjon fra %1", "greeting_no_name": "Hei", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index c280c5be6f..b6167a46ba 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Ryktesystemet er deaktivert.", "downvoting-disabled": "Nedstemming er deaktivert", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index 905f415d69..7825e4cc85 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Fortsett til %1", "return_to": "Gå tilbake til %1", - "new_notification": "Nytt varsel", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Du har uleste varsler.", "all": "All", "topics": "Topics", diff --git a/public/language/nb/user.json b/public/language/nb/user.json index 4bd6fb0b2c..49c7521284 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -84,7 +84,6 @@ "digest_daily": "Daglig", "digest_weekly": "Ukentlig", "digest_monthly": "Månedlig", - "settings-require-reload": "Noen innstillingsendringer krever at du laster siden på nytt. Klikk her for å laste på nytt.", "has_no_follower": "Denne brukeren har ingen følgere :(", "follows_no_one": "Denne brukeren følger ingen :(", "has_no_posts": "Denne brukeren har ikke skrevet noe enda.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Åpne utgående lenker i en ny fane", "enable_topic_searching": "Aktiver søk-i-emne", "topic_search_help": "Hvis søk-i-emne er aktivert, overstyres nettleserens standard sidesøk og gir mulighet til å søke gjennom hele emnet, ikke bare det som vises på skjermen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/nl/admin/advanced/database.json b/public/language/nl/admin/advanced/database.json index 135411c502..a3187bb795 100644 --- a/public/language/nl/admin/advanced/database.json +++ b/public/language/nl/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident geheugen", "mongo.virtual-memory": "Virtueel geheugen", "mongo.mapped-memory": "Mapped geheugen", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis versie", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Verbonden clients", "redis.connected-slaves": "Verbonden slaves", "redis.blocked-clients": "Geblokkeerde clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Totaal inkomende verbindingen", "redis.total-commands-processed": "Totaal verwerkte commando's", "redis.iops": "Gelijktijdige operaties per sec.", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/nl/admin/manage/uploads.json b/public/language/nl/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/nl/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/nl/email.json b/public/language/nl/email.json index 65d75c893c..78b7b6c1e8 100644 --- a/public/language/nl/email.json +++ b/public/language/nl/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Wachtwoord reset gevraagd - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Welkom bij %1", "invite": "Uitnodiging van %1 ", "greeting_no_name": "Hallo", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 1d125c91da..b45124a929 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Het is slechts toegestaan om binnen %1 seconde(n) na plaatsen van het chat bericht, deze te bewerken.", "chat-delete-duration-expired": "Het is slechts toegestaan om binnen %1 seconde(n) na plaatsen van het chat bericht, deze te verwijderen.", "chat-deleted-already": "Dit chat bericht is al verwijderd.", - "chat-restored'already": "Dit chat bericht is al hersteld.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Je hebt al gestemd voor deze post.", "reputation-system-disabled": "Reputatie systeem is uitgeschakeld.", "downvoting-disabled": "Negatief stemmen is uitgeschakeld", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Een bericht kan niet naar hetzelfde onderwerp worden verplaatst!", "cannot-block-self": "Je kan jezelf niet blokkeren!", "cannot-block-privileged": "Je kan geen administrators of global moderators blokkeren", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Er lijkt een probleem te zijn met je internetverbinding" } \ No newline at end of file diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json index 78ec3289b5..61ad176be9 100644 --- a/public/language/nl/notifications.json +++ b/public/language/nl/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "U verlaat nu %1", "continue_to": "Door naar %1", "return_to": "Terug naar %1", - "new_notification": "Nieuwe notificatie", - "new_notification_from": "Je hebt een nieuwe notificatie van %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Je hebt nieuwe notificaties.", "all": "Alles", "topics": "Onderwerpen", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index 76a808bc2b..f7ab6390dc 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -84,7 +84,6 @@ "digest_daily": "Dagelijks", "digest_weekly": "Wekelijks", "digest_monthly": "Maandelijks", - "settings-require-reload": "Sommige veranderingen vereisen het herladen van de pagina: klik hier om de pagina te herladen.", "has_no_follower": "Deze gebruiker heeft geen volgers :(", "follows_no_one": "Deze gebruiker volgt niemand :(", "has_no_posts": "Deze gebruiker heeft nog geen berichten geplaatst", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open uitgaande links naar een externe site in een nieuw tabblad", "enable_topic_searching": "Inschakelen mogelijkheid op onderwerp te kunnen zoeken", "topic_search_help": "Wanneer ingeschakeld zal de standaard zoekfunctie, met een aangepaste methode voor onderwerpen, overschreven worden", - "delay_image_loading": "Afbeeldingen Laden Uitstellen", - "image_load_delay_help": "Indien ingeschakeld zullen afbeeldingen in topics niet laden totdat ze het scherm inscrollen", "scroll_to_my_post": "Toon het nieuwe bericht na het plaatsen van een antwoord", "follow_topics_you_reply_to": "Ontvang meldingen van berichten waar je op hebt gereageerd", "follow_topics_you_create": "Ontvang meldingen van berichten die je hebt gemaakt", diff --git a/public/language/pl/admin/advanced/database.json b/public/language/pl/admin/advanced/database.json index 322804336c..6f0e4364f4 100644 --- a/public/language/pl/admin/advanced/database.json +++ b/public/language/pl/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Pamięć przydzielona", "mongo.virtual-memory": "Pamięc wirtualna", "mongo.mapped-memory": "Pamięc zmapowana", + "mongo.bytes-in": "Bajtów wejścia", + "mongo.bytes-out": "Bajtów wyjścia", + "mongo.num-requests": "Liczba żądań", "mongo.raw-info": "Informacje MongoDB", "redis": "Redis", "redis.version": "Wersja Redis", + "redis.keys": "Klucze", + "redis.expires": "Wygasa", + "redis.avg-ttl": "Przeciętny TTL", "redis.connected-clients": "Połączonych klientów", "redis.connected-slaves": "Połączonych urządzeń podrzędnych", "redis.blocked-clients": "Zablokowanych klientów", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Otrzymanych połączeń", "redis.total-commands-processed": "Przetworzonych komend", "redis.iops": "Natychmiastowe Operacje Na Sekundę", + "redis.iinput": "Chwilowe wejście na sekundę", + "redis.ioutput": "Natychmiastowe wyjście na sekundę", + "redis.total-input": "Całkowite wejście", + "redis.total-output": "Całkowite wyjście", + "redis.keyspace-hits": "Trafione Klucze", "redis.keyspace-misses": "Nietrafione Klucze", "redis.raw-info": "Informacje Redis", diff --git a/public/language/pl/admin/development/info.json b/public/language/pl/admin/development/info.json index 83289fbba2..489b482c0a 100644 --- a/public/language/pl/admin/development/info.json +++ b/public/language/pl/admin/development/info.json @@ -4,11 +4,11 @@ "host": "host", "pid": "pid", "nodejs": "nodejs", - "online": "online", + "online": "dostępny", "git": "git", "memory": "pamięć", "load": "obciążenie", - "uptime": "uptime", + "uptime": "czas działania", "registered": "Zarejestrowane", "sockets": "Sockety", diff --git a/public/language/pl/admin/general/dashboard.json b/public/language/pl/admin/general/dashboard.json index 94cbe1b486..7160a73eeb 100644 --- a/public/language/pl/admin/general/dashboard.json +++ b/public/language/pl/admin/general/dashboard.json @@ -67,7 +67,7 @@ "graphs.page-views": "Wyświetlenia strony", "graphs.page-views-registered": "Wyświetlenia użytkowników", "graphs.page-views-guest": "Wyświetlenia gości", - "graphs.page-views-bot": "Wyświetlenia bot'ów", + "graphs.page-views-bot": "Wyświetlenia botów", "graphs.unique-visitors": "Unikalni użytkownicy", "graphs.registered-users": "Zarejestrowani użytkownicy", "graphs.anonymous-users": "Anonimowi użytkownicy", diff --git a/public/language/pl/admin/manage/uploads.json b/public/language/pl/admin/manage/uploads.json new file mode 100644 index 0000000000..56a7433536 --- /dev/null +++ b/public/language/pl/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Wyślij plik", + "filename": "Nazwa pliku", + "usage": "Wykorzystany w poście", + "orphaned": "Osierocone", + "size/filecount": "Rozmiar / Liczba plików", + "confirm-delete": "Czy na pewno chcesz usunąć ten plik?", + "filecount": "%1 plików" +} \ No newline at end of file diff --git a/public/language/pl/admin/menu.json b/public/language/pl/admin/menu.json index 83a2f8109a..7a2f223f5a 100644 --- a/public/language/pl/admin/menu.json +++ b/public/language/pl/admin/menu.json @@ -57,7 +57,7 @@ "section-advanced": "Zaawansowane", "advanced/database": "Baza danych", "advanced/events": "Zdarzenia", - "advanced/hooks": "Haki (hooks)", + "advanced/hooks": "Hooks", "advanced/logs": "Logi", "advanced/errors": "Błędy", "advanced/cache": "Pamięć", diff --git a/public/language/pl/admin/settings/user.json b/public/language/pl/admin/settings/user.json index 9c2689e44c..718d668ec7 100644 --- a/public/language/pl/admin/settings/user.json +++ b/public/language/pl/admin/settings/user.json @@ -30,9 +30,9 @@ "session-time": "Czas sesji", "session-time-days": "Dni", "session-time-seconds": "Sekund", - "session-time-help": "Te wartości określają czas, przez jaki użytkownik pozostaje zalogowany, gdy sprawdzą " Zapamiętaj mnie " przy logowaniu. Zwróć uwagę, że zostanie użyta tylko jedna z tych wartości. Jeśli nie ma sekund, cofamy się do kilku dni. Jeśli nie ma wartości dni, domyślnie jest to 14 dni.", + "session-time-help": "Te wartości określają czas, przez jaki użytkownik pozostaje zalogowany, gdy zaznaczy opcję "Zapamiętaj mnie" przy logowaniu. Użyta zostanie tylko jedna z tych wartości. Jeśli nie ma wartości sekundach, dostępne będą dni. W razie braku wartości w dniach domyślną wartością będzie 14 dni.", "online-cutoff": "Po tylu minutach użytkownik zostaje uznany za nieaktywnego.", - "online-cutoff-help": "Jeśli użytkownik nie wykona żadnych działań w określonym czasie, zostaje on uznany jako nieaktywny i nie otrzyma aktualizacji w czasie rzeczywistym.", + "online-cutoff-help": "Jeśli użytkownik nie wykona żadnych działań w określonym czasie, zostaje on uznany za nieaktywnego i nie otrzyma aktualizacji w czasie rzeczywistym.", "registration": "Rejestracja użytkownika", "registration-type": "Typ rejestracji", "registration-type.normal": "Standardowa", diff --git a/public/language/pl/email.json b/public/language/pl/email.json index 58309fc2ea..bfbf7cdffa 100644 --- a/public/language/pl/email.json +++ b/public/language/pl/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Zgłoszono prośbę o reset hasła – %1", + "test-email.subject": "Testowy email", + "password-reset-requested": "Wymagane zrestartowanie hasła!", "welcome-to": "Witaj na %1", "invite": "Zaproszenie od %1", "greeting_no_name": "Witaj", diff --git a/public/language/pl/error.json b/public/language/pl/error.json index 07399d1804..c8a6b4ffab 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Możesz edytować komunikat czatu tylko przez %1 sekund(y) po napisaniu.", "chat-delete-duration-expired": "Możesz skasować komunikat czatu tylko przez %1 sekund(y) po napisaniu.", "chat-deleted-already": "Ten komunikat czatu jest już skasowany", - "chat-restored'already": "Ten komunikat czatu jest już odzyskany.", + "chat-restored-already": "Ta wiadomość została już przywrócona", "already-voting-for-this-post": "Już zagłosowałeś na ten post", "reputation-system-disabled": "System reputacji jest wyłączony.", "downvoting-disabled": "Negatywna ocena postów jest wyłączona", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Nie można przenieść wpisu do tego samego tematu!", "cannot-block-self": "Nie możesz zablokować samego siebie!", "cannot-block-privileged": "Nie możesz blokować administratorów ani globalnych moderatorów", + "cannot-block-guest": "Goście nie mogą blokować innych użytkowników", + "already-blocked": "Ten użytkownik jest już zablokowany", + "already-unblocked": "Ten użytkownik jest już odblokowany", "no-connection": "Sprawdź swoje połączenie z internetem" } \ No newline at end of file diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json index 78b9288957..b0bc4c4e72 100644 --- a/public/language/pl/notifications.json +++ b/public/language/pl/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Opuszczasz %1", "continue_to": "Przejdź do %1", "return_to": "Wróć do %1", - "new_notification": "Nowe powiadomienie", - "new_notification_from": "Masz nowe powiadomienie od %1", + "new_notification": "Masz nowe powiadomienie", "you_have_unread_notifications": "Masz nieprzeczytane powiadomienia.", "all": "Wszystko", "topics": "Tematy", diff --git a/public/language/pl/user.json b/public/language/pl/user.json index 1c533ce58b..160ac88452 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -84,7 +84,6 @@ "digest_daily": "Codziennie", "digest_weekly": "Co tydzień", "digest_monthly": "Co miesiąc", - "settings-require-reload": "Niektóre zmiany ustawień wymagają przeładowania. Kliknij tutaj, aby przeładować stronę.", "has_no_follower": "Ten użytkownik nie ma jeszcze żadnych obserwujących", "follows_no_one": "Ten użytkownik jeszcze nikogo nie obserwuje", "has_no_posts": "Ten użytkownik nic jeszcze nie napisał.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Otwieraj odnośniki wychodzące w nowej karcie", "enable_topic_searching": "Włącz szukanie w temacie", "topic_search_help": "Zaznacz, jeśli chcesz, by wyszukiwanie w temacie zastąpiło przeszukiwanie strony poprzez przeglądarkę, a tym samym umożliwiło przeszukiwanie całego tematu, a nie tylko treści aktualnie wyświetlanych na ekranie", - "delay_image_loading": "Opóźnienie ładowania zdjęć", - "image_load_delay_help": "Zaznacz, jeśli chcesz, by zdjęcia w temacie ładowały się dopiero w miarę przewijania", "scroll_to_my_post": "Wyświetl nowy post po zamieszczeniu odpowiedzi", "follow_topics_you_reply_to": "Obserwuj tematy, w których uczestniczysz", "follow_topics_you_create": "Obserwuj tematy, które utworzyłeś", diff --git a/public/language/pt-BR/admin/advanced/database.json b/public/language/pt-BR/admin/advanced/database.json index 20205fa0d4..f16cb6fee0 100644 --- a/public/language/pt-BR/admin/advanced/database.json +++ b/public/language/pt-BR/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Memória Virtual", "mongo.mapped-memory": "Memória Mapeada", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Informação Raw do MongoDB", "redis": "Redis", "redis.version": "Versão do Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Clientes Conectados", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Clientes Bloqueados", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total de Conexões Recebidas", "redis.total-commands-processed": "Total de Comandos Processados", "redis.iops": "Ops. Instantâneas Por Segundo", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Informação Raw do Redis", diff --git a/public/language/pt-BR/admin/general/dashboard.json b/public/language/pt-BR/admin/general/dashboard.json index 5080e8d40c..d5dda63976 100644 --- a/public/language/pt-BR/admin/general/dashboard.json +++ b/public/language/pt-BR/admin/general/dashboard.json @@ -38,7 +38,7 @@ "control-panel": "Controle do Sistema", "rebuild-and-restart": "Rebuild & Restart", - "restart": "Restart", + "restart": "Reiniciar", "restart-warning": "Rebuilding or Restarting your NodeBB will drop all existing connections for a few seconds.", "restart-disabled": "Rebuilding and Restarting your NodeBB has been disabled as you do not seem to be running it via the appropriate daemon.", "maintenance-mode": "Modo de Manutenção", diff --git a/public/language/pt-BR/admin/manage/privileges.json b/public/language/pt-BR/admin/manage/privileges.json index 07d0a4de50..357ae46430 100644 --- a/public/language/pt-BR/admin/manage/privileges.json +++ b/public/language/pt-BR/admin/manage/privileges.json @@ -9,7 +9,7 @@ "ban": "Ban", "search-content": "Search Content", "search-users": "Search Users", - "search-tags": "Search Tags", + "search-tags": "Pesquisar Tags", "allow-local-login": "Local Login", "find-category": "Find Category", @@ -17,7 +17,7 @@ "access-topics": "Access Topics", "create-topics": "Create Topics", "reply-to-topics": "Reply to Topics", - "tag-topics": "Tag Topics", + "tag-topics": "Definir tag em tópicos", "edit-posts": "Edit Posts", "view-edit-history": "View Edit History", "delete-posts": "Delete Posts", diff --git a/public/language/pt-BR/admin/manage/tags.json b/public/language/pt-BR/admin/manage/tags.json index 0238b8b673..876859f45c 100644 --- a/public/language/pt-BR/admin/manage/tags.json +++ b/public/language/pt-BR/admin/manage/tags.json @@ -6,7 +6,7 @@ "description": "Escolha tags clicando e/ou arrastando, use shift para escolher diversas.", "create": "Criar Tag", "modify": "Modificar Tags", - "rename": "Rename Tags", + "rename": "Renomear Tags", "delete": "Excluir Tags Selecionadas", "search": "Pesquisar por tags...", "settings": "Clique aqui para visitar a página de configurações de tag.", diff --git a/public/language/pt-BR/admin/manage/uploads.json b/public/language/pt-BR/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/pt-BR/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/pt-BR/admin/menu.json b/public/language/pt-BR/admin/menu.json index 9cf82fe376..2f706c0da5 100644 --- a/public/language/pt-BR/admin/menu.json +++ b/public/language/pt-BR/admin/menu.json @@ -14,7 +14,7 @@ "manage/users": "Usuários", "manage/admins-mods": "Admins & Mods", "manage/registration": "Fila de Registro", - "manage/post-queue": "Fileira da Posts", + "manage/post-queue": "File de Posts", "manage/groups": "Grupos", "manage/ip-blacklist": "Lista Negra de IPs", "manage/uploads": "Uploads", @@ -69,7 +69,7 @@ "logout": "Sair da Conta", "view-forum": "Ver Fórum", - "search.placeholder": "Search for settings", + "search.placeholder": "Pesquisar configurações", "search.no-results": "Sem resultados...", "search.search-forum": "Pesquisar o fórum por ", "search.keep-typing": "Digite para ver mais resultados...", diff --git a/public/language/pt-BR/email.json b/public/language/pt-BR/email.json index a29132e787..4cd0db0493 100644 --- a/public/language/pt-BR/email.json +++ b/public/language/pt-BR/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Reconfiguração de Senha Solicitada - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Bem vindo a %1", "invite": "Convite de %1", "greeting_no_name": "Olá", diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index 5fd7d19509..0c985d02ed 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Você só pode editar mensagens de chat %1 segundo(s) após postar", "chat-delete-duration-expired": "Você só pode deletar mensagens de chat %1 segundo(s) após postar", "chat-deleted-already": "Essa mensagem de chat já foi deletada", - "chat-restored'already": "Essa mensagem de chat já foi restaurada", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Você já votou neste post.", "reputation-system-disabled": "O sistema de reputação está desabilitado.", "downvoting-disabled": "Negativação está desabilitada", @@ -129,8 +129,8 @@ "not-enough-reputation-min-rep-website": "Você não possui reputação suficiente para adicionar um site", "not-enough-reputation-min-rep-aboutme": "Você não possui reputação suficiente para adicionar um sobre mim", "not-enough-reputation-min-rep-signature": "Você não possui reputação suficiente para adicionar uma assinatura", - "not-enough-reputation-min-rep-profile-picture": "You do not have enough reputation to add a profile picture", - "not-enough-reputation-min-rep-cover-picture": "You do not have enough reputation to add a cover picture", + "not-enough-reputation-min-rep-profile-picture": "Você não possui reputação suficiente para adicionar uma imagem de perfil", + "not-enough-reputation-min-rep-cover-picture": "Você não possui reputação suficiente para adicionar uma imagem de capa", "already-flagged": "Você já sinalizou esse post", "self-vote": "Você não pode votar no seu próprio post", "reload-failed": "O NodeBB encontrou um problema ao recarregar: \"%1\". O NodeBB continuará a servir os assets existentes no lado do cliente, apesar de que você deve desfazer o que você fez antes de recarregar.", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Não é possível mover um post para o mesmo tópico!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "Você não pode bloquear administradores e moderadores globais", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/pt-BR/global.json b/public/language/pt-BR/global.json index 987e11317f..4be8ef553f 100644 --- a/public/language/pt-BR/global.json +++ b/public/language/pt-BR/global.json @@ -53,7 +53,7 @@ "topics": "Tópicos", "posts": "Posts", "best": "Melhor", - "votes": "Votes", + "votes": "Votos", "upvoters": "Votos positivos", "upvoted": "Votou positivamente", "downvoters": "Votos negativos", diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json index 275a86b43c..d415a911ab 100644 --- a/public/language/pt-BR/notifications.json +++ b/public/language/pt-BR/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Você está saindo de %1", "continue_to": "Continuar para %1", "return_to": "Voltar para %1", - "new_notification": "Nova Notificação", - "new_notification_from": "Você possui uma nova notificação de %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Você possui notificações não lidas.", "all": "Tudo", "topics": "Tópicos", @@ -51,8 +50,8 @@ "notification_only": "Apenas Notificações", "email_only": "Apenas Email", "notification_and_email": "Notificações e Email", - "notificationType_upvote": "When someone upvotes your post", - "notificationType_new-topic": "When someone you follow posts a topic", + "notificationType_upvote": "Quando alguém dá um voto positivo em seu post", + "notificationType_new-topic": "Quando alguém que você segue posta um tópico", "notificationType_new-reply": "Quando uma nova resposta é postada em um tópico que você está observando", "notificationType_follow": "Quando alguém começar a seguir você", "notificationType_new-chat": "Quando você receber uma mensagem de chat", diff --git a/public/language/pt-BR/pages.json b/public/language/pt-BR/pages.json index e58ca1a415..61bd93a1ee 100644 --- a/public/language/pt-BR/pages.json +++ b/public/language/pt-BR/pages.json @@ -23,7 +23,7 @@ "users/search": "Pesquisa de Usuários", "notifications": "Notificações", "tags": "Tags", - "tag": "Topics tagged under "%1"", + "tag": "Tópicos com a tag "%1"", "register": "Registrar uma conta", "registration-complete": "Registro completado", "login": "Entrar na sua conta", @@ -45,7 +45,7 @@ "account/posts": "Posts feitos por %1", "account/topics": "Tópicos criados por %1", "account/groups": "Grupos de %1", - "account/watched_categories": "%1's Watched Categories", + "account/watched_categories": "Categorias Acompanhadas de %1", "account/bookmarks": "Posts Favoritos de %1's", "account/settings": "Configurações de Usuário", "account/watched": "Tópicos assistidos por %1", diff --git a/public/language/pt-BR/search.json b/public/language/pt-BR/search.json index 3debe16f24..49ea52b527 100644 --- a/public/language/pt-BR/search.json +++ b/public/language/pt-BR/search.json @@ -17,7 +17,7 @@ "at-most": "No máximo", "relevance": "Relevância", "post-time": "Data da postagem", - "votes": "Votes", + "votes": "Votos", "newer-than": "Mais novo que", "older-than": "Mais antigo que", "any-date": "Qualquer data", diff --git a/public/language/pt-BR/topic.json b/public/language/pt-BR/topic.json index b4a00cb837..51ce9b3566 100644 --- a/public/language/pt-BR/topic.json +++ b/public/language/pt-BR/topic.json @@ -56,7 +56,7 @@ "not-watching.description": "Não me notificar de novas respostas.
Mostrar tópico em não-lido se a categoria não estiver sendo ignorada.", "ignoring.description": "Não me notificar de novas respostas.
Não mostrar tópico em não-lido.", "thread_tools.title": "Ferramentas de Tópico", - "thread_tools.markAsUnreadForAll": "Mark Unread For All", + "thread_tools.markAsUnreadForAll": "Marcar como não lido para todos", "thread_tools.pin": "Fixar Tópico", "thread_tools.unpin": "Desfixar Tópico", "thread_tools.lock": "Trancar Tópico", diff --git a/public/language/pt-BR/user.json b/public/language/pt-BR/user.json index 032625a498..fb8e71069e 100644 --- a/public/language/pt-BR/user.json +++ b/public/language/pt-BR/user.json @@ -25,7 +25,7 @@ "profile_views": "Visualizações de perfil", "reputation": "Reputação", "bookmarks": "Favoritos", - "watched_categories": "Watched categories", + "watched_categories": "Categorias acompanhadas", "watched": "Acompanhado", "ignored": "Ignorado", "followers": "Seguidores", @@ -84,7 +84,6 @@ "digest_daily": "Diariamente", "digest_weekly": "Semanalmente", "digest_monthly": "Mensalmente", - "settings-require-reload": "Algumas mudanças de configuração exigem que recarregue. Clique aqui para recarregar a página.", "has_no_follower": "Este usuário não possui seguidores :(", "follows_no_one": "Este usuário não está seguindo ninguém :(", "has_no_posts": "Esse usuário ainda não postou nada.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Abrir links externos em nova aba", "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro do tópico irá substituir a pesquisa padrão do seu navegador. Assim, você poderá pesquisar pelo tópico inteiro, e não apenas pelo o que está sendo exibido na tela.", - "delay_image_loading": "Aguardar para Carregar Imagens", - "image_load_delay_help": "Se habilitado, imagens em tópicos não serão carregadas até que eles sejam rolados à visão", "scroll_to_my_post": "Após postar uma réplica, mostre o novo post", "follow_topics_you_reply_to": "Assistir os tópicos que você responde", "follow_topics_you_create": "Assistir aos tópicos que você cria", diff --git a/public/language/pt-PT/admin/advanced/database.json b/public/language/pt-PT/admin/advanced/database.json index c39b311ded..c4efe2a9ee 100644 --- a/public/language/pt-PT/admin/advanced/database.json +++ b/public/language/pt-PT/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Memória Virtual", "mongo.mapped-memory": "Memória Mapeada", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Informação MongoDB", "redis": "Redis", "redis.version": "Versão Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Clientes Conectados", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Clientes Bloqueados", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total de Conexões Recebidas", "redis.total-commands-processed": "Total de Comandos Processados", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/pt-PT/admin/advanced/errors.json b/public/language/pt-PT/admin/advanced/errors.json index a21e177964..c17d2f0ac5 100644 --- a/public/language/pt-PT/admin/advanced/errors.json +++ b/public/language/pt-PT/admin/advanced/errors.json @@ -1,13 +1,13 @@ { - "figure-x": "Figure %1", + "figure-x": "Figura %1", "error-events-per-day": "%1 eventos por dia", "error.404": "404 Não Encontrado", "error.503": "503 Serviço Indisponível ", "manage-error-log": "Gerir Registo de Erros", "export-error-log": "Exportar Registo de Erros (CSV)", "clear-error-log": "Limpar Registo de Erros", - "route": "Route", - "count": "Count", + "route": "Caminho", + "count": "Contagem", "no-routes-not-found": "Boa! Não existem erros 404!", "clear404-confirm": "Tens a certeza que pretendes limpar o registo de erros 404?", "clear404-success": "Erros \"404 Não Encontrado\" limpos" diff --git a/public/language/pt-PT/admin/extend/plugins.json b/public/language/pt-PT/admin/extend/plugins.json index 5ec3f709a5..2076169c40 100644 --- a/public/language/pt-PT/admin/extend/plugins.json +++ b/public/language/pt-PT/admin/extend/plugins.json @@ -18,7 +18,7 @@ "order.explanation": "Aqui os plugins carregam numa ordem específica, desde o topo até ao fundo", "plugin-item.themes": "Temas", - "plugin-item.deactivate": "Desativados", + "plugin-item.deactivate": "Desativar", "plugin-item.activate": "Ativar", "plugin-item.install": "Instalar", "plugin-item.uninstall": "Desinstalar", @@ -28,7 +28,7 @@ "plugin-item.upgrade": "Atualizar", "plugin-item.more-info": "Para mais informações:", "plugin-item.unknown": "Desconhecido", - "plugin-item.unknown-explanation": "The state of this plugin could not be determined, possibly due to a misconfiguration error.", + "plugin-item.unknown-explanation": "Não foi possível determinar o estado deste plugin, possivelmente devido a um erro de configuração incorreta.", "alert.enabled": "Plugin Ativado", "alert.disabled": "Plugin Desativado", diff --git a/public/language/pt-PT/admin/general/dashboard.json b/public/language/pt-PT/admin/general/dashboard.json index dedbe2a2ba..7af4f0233b 100644 --- a/public/language/pt-PT/admin/general/dashboard.json +++ b/public/language/pt-PT/admin/general/dashboard.json @@ -1,9 +1,9 @@ { "forum-traffic": "Tráfego do Fórum", - "page-views": "Visualizadores de páginas", - "unique-visitors": "Visitantes Únicos", - "users": "Users", - "posts": "Posts", + "page-views": "Visualizações de páginas", + "unique-visitors": "Visitantes únicos", + "users": "Utilizadores", + "posts": "Publicações", "topics": "Tópicos", "page-views-seven": "Últimos 7 Dias", "page-views-thirty": "Últimos 30 Dias", @@ -29,14 +29,14 @@ "running-in-development": "Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator.", "latest-lookup-failed": "

Ocorreu uma falha a obter a versão mais recente disponível para o NodeBB

", - "notices": "Notices", - "restart-not-required": "Restart not required", - "restart-required": "Restart required", - "search-plugin-installed": "Plugin de Pesquisa instalado", - "search-plugin-not-installed": "Plugin de Pesquisa não instalado", + "notices": "Avisos", + "restart-not-required": "Não é necessário reiniciar", + "restart-required": "É necessário reiniciar", + "search-plugin-installed": "Plugin de pesquisa instalado", + "search-plugin-not-installed": "Plugin de pesquisa não instalado", "search-plugin-tooltip": "Instala um plugin de pesquisa a partir da página de Plugins para conseguires ativar a funcionalidade de pesquisa", - "control-panel": "Sistema de Controlo", + "control-panel": "Controlo do Sistema", "rebuild-and-restart": "Reconstruir e Reiniciar", "restart": "Reiniciar", "restart-warning": "Reconstruir ou Reiniciar o teu NodeBB irá terminar todas as conexões existentes por alguns segundos.", @@ -64,11 +64,11 @@ "high-presence-topics": " Alta Presença em Tópicos", - "graphs.page-views": "Visualizadores de páginas", - "graphs.page-views-registered": "Page Views Registered", - "graphs.page-views-guest": "Page Views Guest", - "graphs.page-views-bot": "Page Views Bot", - "graphs.unique-visitors": "Visitantes Únicos", + "graphs.page-views": "Visualizações de páginas", + "graphs.page-views-registered": "Visualizações de páginas por utilizadores registados", + "graphs.page-views-guest": "Visualizações de páginas por convidados", + "graphs.page-views-bot": "Visualizações de páginas por bots", + "graphs.unique-visitors": "Visitantes únicos", "graphs.registered-users": "Utilizadores Registados", "graphs.anonymous-users": "Utilizadores Anónimos", "last-restarted-by": "Última vez reiniciado por", diff --git a/public/language/pt-PT/admin/general/homepage.json b/public/language/pt-PT/admin/general/homepage.json index 7626b025dc..b155da978b 100644 --- a/public/language/pt-PT/admin/general/homepage.json +++ b/public/language/pt-PT/admin/general/homepage.json @@ -4,5 +4,5 @@ "home-page-route": "Caminho da Página Principal", "custom-route": "Caminho personalizado", "allow-user-home-pages": "Permitir página principal personalizada para os utilizadores", - "home-page-title": "Title of the home page (default \"Home\")" + "home-page-title": "Título da página inicial (predefinido \"Página inicial\")" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/general/social.json b/public/language/pt-PT/admin/general/social.json index 82d8334642..96c9ea4fd7 100644 --- a/public/language/pt-PT/admin/general/social.json +++ b/public/language/pt-PT/admin/general/social.json @@ -1,5 +1,5 @@ { "post-sharing": "Partilhar Publicações", - "info-plugins-additional": "Plugins can add additional networks for sharing posts.", + "info-plugins-additional": "Os plugins podem adicionar outras redes sociais para partilhar publicações.", "save-success": "Successfully saved Post Sharing Networks!" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/manage/uploads.json b/public/language/pt-PT/admin/manage/uploads.json new file mode 100644 index 0000000000..cc9b698349 --- /dev/null +++ b/public/language/pt-PT/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Enviar Ficheiro", + "filename": "Nome do Ficheiro", + "usage": "Uso em Publicações", + "orphaned": "Órfão", + "size/filecount": "Tamanho / Contador de Ficheiros", + "confirm-delete": "Tens a certeza que pretendes apagar este ficheiro?", + "filecount": "%1 ficheiros" +} \ No newline at end of file diff --git a/public/language/pt-PT/admin/menu.json b/public/language/pt-PT/admin/menu.json index 55fcb47d6a..ca6ccc2be4 100644 --- a/public/language/pt-PT/admin/menu.json +++ b/public/language/pt-PT/admin/menu.json @@ -12,9 +12,9 @@ "manage/privileges": "Privilégios", "manage/tags": "Marcadores", "manage/users": "Utilizadores", - "manage/admins-mods": "Admins & Mods", - "manage/registration": "Registration Queue", - "manage/post-queue": "Post Queue", + "manage/admins-mods": "Administradores e Moderadores", + "manage/registration": "Registos por aprovar", + "manage/post-queue": "Publicações por aprovar", "manage/groups": "Grupos", "manage/ip-blacklist": "Lista Negra de IPs", "manage/uploads": "Carregamentos", diff --git a/public/language/pt-PT/admin/settings/email.json b/public/language/pt-PT/admin/settings/email.json index 0e183bd082..bbe89115b3 100644 --- a/public/language/pt-PT/admin/settings/email.json +++ b/public/language/pt-PT/admin/settings/email.json @@ -19,7 +19,7 @@ "smtp-transport.security-encrypted": "Encrypted", "smtp-transport.security-starttls": "StartTLS", "smtp-transport.security-none": "None", - "smtp-transport.username": "Username", + "smtp-transport.username": "Nome de utilizador", "smtp-transport.username-help": "For the Gmail service, enter the full email address here, especially if you are using a Google Apps managed domain.", "smtp-transport.password": "Palavra-passe", diff --git a/public/language/pt-PT/admin/settings/notifications.json b/public/language/pt-PT/admin/settings/notifications.json index 03fa0ac66a..893258a326 100644 --- a/public/language/pt-PT/admin/settings/notifications.json +++ b/public/language/pt-PT/admin/settings/notifications.json @@ -2,6 +2,6 @@ "notifications": "Notifications", "welcome-notification": "Welcome Notification", "welcome-notification-link": "Welcome Notification Link", - "welcome-notification-uid": "Welcome Notification User (UID)", + "welcome-notification-uid": "Notificação de boas-vindas ao utilizador (UID)", "notification-alert-timeout": "Notification Alert Timeout" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/settings/pagination.json b/public/language/pt-PT/admin/settings/pagination.json index b9f45e8fa9..bd1ebcd7aa 100644 --- a/public/language/pt-PT/admin/settings/pagination.json +++ b/public/language/pt-PT/admin/settings/pagination.json @@ -2,9 +2,9 @@ "pagination": "Pagination Settings", "enable": "Paginate topics and posts instead of using infinite scroll.", "topics": "Paginação de Tópicos", - "posts-per-page": "Posts per Page", - "max-posts-per-page": "Maximum posts per page", - "categories": "Category Pagination", + "posts-per-page": "Publicações por página", + "max-posts-per-page": "Máximo de publicações por página", + "categories": "Paginação de Categorias", "topics-per-page": "Tópicos por Página", "max-topics-per-page": "Máximo de tópicos por página" } \ No newline at end of file diff --git a/public/language/pt-PT/admin/settings/post.json b/public/language/pt-PT/admin/settings/post.json index 53bb85ac4b..08c8b83f97 100644 --- a/public/language/pt-PT/admin/settings/post.json +++ b/public/language/pt-PT/admin/settings/post.json @@ -4,12 +4,12 @@ "sorting.oldest-to-newest": "Oldest to Newest", "sorting.newest-to-oldest": "Newest to Oldest", "sorting.most-votes": "Most Votes", - "sorting.most-posts": "Most Posts", + "sorting.most-posts": "Mais publicações", "sorting.topic-default": "Default Topic Sorting", "length": "Post Length", "restrictions": "Posting Restrictions", "restrictions-new": "New User Restrictions", - "restrictions.post-queue": "Enable post queue", + "restrictions.post-queue": "Ativar publicações em fila de espera", "restrictions-new.post-queue": "Enable new user restrictions", "restrictions.post-queue-help": "Ativar publicações em fila de espera vai colocar as publicações de novos utilizadores numa fila de espera para serem aprovadas.", "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users.", @@ -45,9 +45,9 @@ "signature.max-length": "Maximum Signature Length", "composer": "Composer Settings", "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.", - "composer.show-help": "Show \"Help\" tab", + "composer.show-help": "Mostrar separador \"Ajuda\"", "composer.enable-plugin-help": "Permitir aos plugins adicionarem conteúdo ao separador de ajuda", - "composer.custom-help": "Custom Help Text", + "composer.custom-help": "Texto de ajuda personalizado", "ip-tracking": "IP Tracking", "ip-tracking.each-post": "Track IP Address for each post", "enable-post-history": "Ativar histórico de publicações" diff --git a/public/language/pt-PT/admin/settings/reputation.json b/public/language/pt-PT/admin/settings/reputation.json index d1ecd2359b..0ee7f0001d 100644 --- a/public/language/pt-PT/admin/settings/reputation.json +++ b/public/language/pt-PT/admin/settings/reputation.json @@ -5,7 +5,7 @@ "votes-are-public": "Todos os Votos São Públicos", "thresholds": "Activity Thresholds", "min-rep-downvote": "Minimum reputation to downvote posts", - "min-rep-flag": "Minimum reputation to flag posts", + "min-rep-flag": "Mínimo de reputação para denunciar publicações", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", "min-rep-signature": "Minimum reputation to add \"Signature\" to user profile", diff --git a/public/language/pt-PT/admin/settings/uploads.json b/public/language/pt-PT/admin/settings/uploads.json index 0aed99cfc5..437cd2816a 100644 --- a/public/language/pt-PT/admin/settings/uploads.json +++ b/public/language/pt-PT/admin/settings/uploads.json @@ -1,5 +1,5 @@ { - "posts": "Posts", + "posts": "Publicações", "allow-files": "Permitir aos utilizadores carregar ficheiros normais", "private": "Tornar os ficheiros enviados privados", "private-extensions": "File extensions to make private", diff --git a/public/language/pt-PT/admin/settings/user.json b/public/language/pt-PT/admin/settings/user.json index c005df4b61..849e54fa8a 100644 --- a/public/language/pt-PT/admin/settings/user.json +++ b/public/language/pt-PT/admin/settings/user.json @@ -15,8 +15,8 @@ "disable-password-changes": "Desativar alterações de palavras-passe", "allow-account-deletion": "Permitir eliminação da conta", "user-info-private": "Hide user list and data from guests", - "hide-fullname": "Hide fullname from users", - "hide-email": "Hide email from users", + "hide-fullname": "Esconder o nome completo dos utilizadores", + "hide-email": "Esconder o e-mail dos utilizadores", "themes": "Themes", "disable-user-skins": "Impedir utilizadores de escolherem uma máscara personalizada", "account-protection": "Account Protection", diff --git a/public/language/pt-PT/email.json b/public/language/pt-PT/email.json index f82d94cff8..e810aeafc1 100644 --- a/public/language/pt-PT/email.json +++ b/public/language/pt-PT/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Pedido de reposição de palavra-passe - %1!", + "test-email.subject": "Testar E-mail", + "password-reset-requested": "Reposição de palavra-passe solicitada!", "welcome-to": "Bem-vindo ao %1", "invite": "Convite enviado por %1", "greeting_no_name": "Olá", @@ -11,7 +12,7 @@ "welcome.text3": "Um administrador aceitou o teu registo. Podes agora iniciar sessão com o teu nome de utilizador/palavra-passe.", "welcome.cta": "Clica aqui para confirmares o teu endereço de e-mail", "invitation.text1": "%1 convidou-te para te juntares a %2", - "invitation.text2": "Your invitation will expire in %1 days.", + "invitation.text2": "O teu convite vai expirar em %1 dias.", "invitation.ctr": "Clica aqui para criares a tua conta.", "reset.text1": "Recebemos um pedido para repôr a tua palavra-passe, possivelmente porque te esqueceste dela. Se este não é o caso, por favor ignora este e-mail.", "reset.text2": "Para continuares com a reposição da tua palavra-passe, clica no seguinte link:", @@ -33,12 +34,12 @@ "notif.chat.unsub.info": "Esta notificação de chat foi enviada devido às suas definições de subscrição", "notif.post.cta": "Clique aqui para ler o tópico completo", "notif.post.unsub.info": "Esta notificação foi envidada devido às tuas definições de subscrição.", - "notif.cta": "Click here to go to forum", + "notif.cta": "Clica aqui para ires para o fórum", "test.text1": "Este é um e-mail de teste para verificar que o emailer está configurado corretamente para o teu NodeBB.", "unsub.cta": "Clica aqui para alterares essas definições", - "banned.subject": "You have been banned from %1", - "banned.text1": "The user %1 has been banned from %2.", + "banned.subject": "Foste banido de %1", + "banned.text1": "O utilizador %1 foi banido de %2.", "banned.text2": "Este banimento irá durar até %1.", - "banned.text3": "This is the reason why you have been banned:", + "banned.text3": "Esta é a razão porque foste banido:", "closing": "Obrigado!" } \ No newline at end of file diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json index 43383e7443..01ab8ae01e 100644 --- a/public/language/pt-PT/error.json +++ b/public/language/pt-PT/error.json @@ -1,6 +1,6 @@ { "invalid-data": "Dados inválidos", - "invalid-json": "Invalid JSON", + "invalid-json": "JSON inválido", "not-logged-in": "Não tens sessão iniciada.", "account-locked": "A sua conta foi bloqueada temporariamente", "search-requires-login": "A pesquisa requer uma conta de utilizador - por favor inicia sessão ou cria uma conta.", @@ -17,7 +17,7 @@ "invalid-login-credentials": "Credenciais de início de sessão inválidas", "invalid-username-or-password": "Por favor especificar um nome de utilizador e uma palavra-passe", "invalid-search-term": "Termo de pesquisa inválido", - "invalid-url": "Invalid URL", + "invalid-url": "URL inválido", "local-login-disabled": "Local login system has been disabled for non-privileged accounts.", "csrf-invalid": "Não conseguimos iniciar a tua sessão, provavelmente devido a uma sessão que já expirou. Por favor, tenta novamente", "invalid-pagination-value": "Valor de paginação errado, deve ser no mínimo %1 e no máximo %2", @@ -77,14 +77,14 @@ "too-many-tags": "Existem marcadores a mais. Os tópicos não podem ter mais do que 1% marcador(es)", "still-uploading": "Por favor aguarda até todos os carregamentos estarem completos.", "file-too-big": "O tamanho máximo permitido para um ficheiro é de %1 kB - por favor carrega um ficheiro mais pequeno", - "guest-upload-disabled": "Carregamentos por parte de convidados foram desativados", + "guest-upload-disabled": "Os carregamentos por parte de convidados foram desativados", "cors-error": "Impossível carregar a imagem devido ao CORS mal configurado", "already-bookmarked": "Já marcaste esta publicação", "already-unbookmarked": "Já desmarcaste esta publicação", "cant-ban-other-admins": "Não podes banir outros administradores!", "cant-remove-last-admin": "És o único administrador. Adicionar outro utilizador como administrador antes de te removeres como administrador.", "cant-delete-admin": "Remove os privilégios de administrador desta conta antes de tentares apagá-la.", - "invalid-image": "Invalid image", + "invalid-image": "Imagem inválida", "invalid-image-type": "Tipo de imagem inválida. Os tipos válidos são: %1", "invalid-image-extension": "Extensão de imagem inválida", "invalid-file-type": "Tipo de ficheiro inválido. Os tipos válidos são: %1", @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "Esta mensagem já foi apagada.", - "chat-restored'already": "Esta mensagem já foi restaurada.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Já votaste nesta publicação.", "reputation-system-disabled": "Sistema de reputação desativado.", "downvoting-disabled": "Voto negativo desativado", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Não podes mover publicações para o mesmo tópico!", "cannot-block-self": "Não podes bloquear-te a ti próprio!", "cannot-block-privileged": "Não podes bloquear administradores ou moderadores globais", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Parece haver um problema com a tua conexão à Internet" } \ No newline at end of file diff --git a/public/language/pt-PT/flags.json b/public/language/pt-PT/flags.json index d8a858c948..84e94db522 100644 --- a/public/language/pt-PT/flags.json +++ b/public/language/pt-PT/flags.json @@ -1,9 +1,9 @@ { - "state": "State", + "state": "Estado", "reporter": "Autor da Denúncia", "reported-at": "Denunciado em", "description": "Descrição", - "no-flags": "Hooray! No flags found.", + "no-flags": "Fantástico! Não foram encontradas denúncias.", "assignee": "Assignee", "update": "Atualizar", "updated": "Atualizado", @@ -13,13 +13,13 @@ "filter-active": "There are one or more filters active in this list of flags", "filter-reset": "Remover Filtros", "filters": "Opções dos Filtros", - "filter-reporterId": "Reporter UID", - "filter-targetUid": "Flagged UID", - "filter-type": "Flag Type", + "filter-reporterId": "UID do autor da denúncia", + "filter-targetUid": "UID do denunciado", + "filter-type": "Tipo de denúncia", "filter-type-all": "Todo o Conteúdo", "filter-type-post": "Publicação", "filter-type-user": "Utilizador", - "filter-state": "State", + "filter-state": "Estado", "filter-assignee": "Assignee UID", "filter-cid": "Categoria", "filter-quick-mine": "Atribuído a mim", diff --git a/public/language/pt-PT/groups.json b/public/language/pt-PT/groups.json index ec1ccb26d6..51d8455b8e 100644 --- a/public/language/pt-PT/groups.json +++ b/public/language/pt-PT/groups.json @@ -31,7 +31,7 @@ "details.add-member": "Adicionar Membro", "details.owner_options": "Administração do grupo", "details.group_name": "Nome do grupo", - "details.member_count": "Contagem de membros", + "details.member_count": "Quantidade de membros", "details.creation_date": "Data de criação", "details.description": "Descrição", "details.badge_preview": "Pré-visualização da medalha", diff --git a/public/language/pt-PT/login.json b/public/language/pt-PT/login.json index 64e0adfa28..2717a981b9 100644 --- a/public/language/pt-PT/login.json +++ b/public/language/pt-PT/login.json @@ -2,7 +2,7 @@ "username-email": "Nome de utilizador / E-mail", "username": "Nome de utilizador", "email": "E-mail", - "remember_me": "Lembras-te de mim?", + "remember_me": "Lembrar-me", "forgot_password": "Esqueceste-te da palavra-passe?", "alternative_logins": "Inícios de sessão alternativos", "failed_login_attempt": "Início de sessão sem sucesso", diff --git a/public/language/pt-PT/modules.json b/public/language/pt-PT/modules.json index ad55726b12..f45454efd3 100644 --- a/public/language/pt-PT/modules.json +++ b/public/language/pt-PT/modules.json @@ -20,7 +20,7 @@ "chat.thirty_days": "30 dias", "chat.three_months": "3 meses", "chat.delete_message_confirm": "Tens a certeza que desejas apagar esta mensagem?", - "chat.retrieving-users": "Retrieving users...", + "chat.retrieving-users": "A recuperar utilizadores...", "chat.manage-room": "Gerir sala de conversa", "chat.add-user-help": "Encontra utilizadores aqui. Quando selecionado, o utilizador vai ser adicionado à conversa. O novo utilizador não conseguirá ver mensagens que foram enviadas antes de ele entrar na sala. Apenas os donos das salas () poderão remover participantes das salas de conversa", "chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?", @@ -47,9 +47,9 @@ "composer.formatting.italic": "Itálico", "composer.formatting.list": "Lista", "composer.formatting.strikethrough": "Riscado", - "composer.formatting.code": "Code", - "composer.formatting.link": "ligação", - "composer.formatting.picture": "Fotografia", + "composer.formatting.code": "Código", + "composer.formatting.link": "Hiperligação", + "composer.formatting.picture": "Imagem", "composer.upload-picture": "Enviar imagem", "composer.upload-file": "Enviar um ficheiro", "composer.zen_mode": "Modo Zen", diff --git a/public/language/pt-PT/notifications.json b/public/language/pt-PT/notifications.json index d61e3dcec0..03c99f518e 100644 --- a/public/language/pt-PT/notifications.json +++ b/public/language/pt-PT/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Estás agora a abandonar %1", "continue_to": "Continuar para %1", "return_to": "Voltar a %1", - "new_notification": "Nova notificação", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "Tens uma nova notificação", "you_have_unread_notifications": "Tens notificações por ler.", "all": "Tudo", "topics": "Tópicos", @@ -29,9 +28,9 @@ "user_flagged_post_in": "%1 denunciou uma publicação em %2", "user_flagged_post_in_dual": "%1 e %2 denunciaram uma publicação em %3", "user_flagged_post_in_multiple": "%1 e %2 outros utilizadores denunciaram uma publicação em %3", - "user_flagged_user": "%1 flagged a user profile (%2)", - "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user": "%1 denunciou um perfil de um utilizador (%2)", + "user_flagged_user_dual": "%1 e %2 denunciaram um perfil de um utilizador (%3)", + "user_flagged_user_multiple": "%1 e outros %2 utilizadores denunciaram um perfil de um utilizador (%3)", "user_posted_to": "%1 publicou uma resposta a: %2", "user_posted_to_dual": "%1 e %2 publicaram respostas a: %3", "user_posted_to_multiple": "%1 e %2 outros utilizadores publicaram respostas a: %3", @@ -41,24 +40,24 @@ "user_started_following_you_multiple": "%1 e %2 outros utilizadores começaram a seguir-te.", "new_register": "%1 enviou um pedido de registro.", "new_register_multiple": "Existem %1 pedidos de registro aguardando pela tua revisão.", - "flag_assigned_to_you": "Flag %1 has been assigned to you", - "post_awaiting_review": "Post awaiting review", + "flag_assigned_to_you": "A denúncia %1 foi atribuída a ti", + "post_awaiting_review": "Publicação a aguardar revisão", "email-confirmed": "E-mail confirmado", "email-confirmed-message": "Obrigado por validares o teu endereço de e-mail. A tua conta está agora totalmente ativa.", "email-confirm-error-message": "Ocorreu um problema a validar o teu endereço de e-mail. Talvez o código seja inválido ou já tenha expirado.", "email-confirm-sent": "E-mail de confirmação enviado.", - "none": "None", - "notification_only": "Notification Only", - "email_only": "Email Only", - "notification_and_email": "Notification & Email", - "notificationType_upvote": "When someone upvotes your post", - "notificationType_new-topic": "When someone you follow posts a topic", - "notificationType_new-reply": "When a new reply is posted in a topic you are watching", - "notificationType_follow": "When someone starts following you", - "notificationType_new-chat": "When you receive a chat message", - "notificationType_group-invite": "When you receive a group invite", - "notificationType_new-register": "When someone gets added to registration queue", - "notificationType_post-queue": "When a new post is queued", - "notificationType_new-post-flag": "When a post is flagged", - "notificationType_new-user-flag": "When a user is flagged" + "none": "Nada", + "notification_only": "Apenas Notificação", + "email_only": "Apenas E-mail", + "notification_and_email": "Notificação e E-mail", + "notificationType_upvote": "Quando alguém vota positivamente numa publicação tua", + "notificationType_new-topic": "Quando alguém que tu segues publica um tópico", + "notificationType_new-reply": "Quando uma nova resposta é publicada num tópico que tu estás a seguir", + "notificationType_follow": "Quando alguém começa a seguir-te", + "notificationType_new-chat": "Quando recebes uma mensagem numa conversa", + "notificationType_group-invite": "Quando recebes um convite para um grupo", + "notificationType_new-register": "Quando alguém é adicionado à fila de espera de registo", + "notificationType_post-queue": "Quando uma nova publicação está à espera de aprovação", + "notificationType_new-post-flag": "Quando uma publicação é denunciada", + "notificationType_new-user-flag": "Quando um utilizador é denunciado" } \ No newline at end of file diff --git a/public/language/pt-PT/pages.json b/public/language/pt-PT/pages.json index e513f835c8..ce38a372c0 100644 --- a/public/language/pt-PT/pages.json +++ b/public/language/pt-PT/pages.json @@ -11,9 +11,9 @@ "top-month": "Tópicos mais votados deste mês", "top-alltime": "Tópicos Mais Votados", "moderator-tools": "Moderator Tools", - "flagged-content": "Flagged Content", + "flagged-content": "Conteúdo denunciado", "ip-blacklist": "Lista negra de IPs", - "post-queue": "Post Queue", + "post-queue": "Publicações por aprovar", "users/online": "Utilizadores online", "users/latest": "Utilizadores Recentes", "users/sort-posts": "Utilizadores com mais publicações", @@ -34,7 +34,7 @@ "chats": "Conversas", "chat": "Conversando com %1", "flags": "Denúncias", - "flag-details": "Flag %1 Details", + "flag-details": "Detalhes da denúncia %1", "account/edit": "Editando \"%1\"", "account/edit/password": "Editando palavra-passe de \"%1\"", "account/edit/username": "Editando o nome de utilizador de \"%1\"", diff --git a/public/language/pt-PT/register.json b/public/language/pt-PT/register.json index d7fc8a2470..b4b180831b 100644 --- a/public/language/pt-PT/register.json +++ b/public/language/pt-PT/register.json @@ -17,7 +17,7 @@ "terms_of_use": "Termos de utilização", "agree_to_terms_of_use": "Eu aceito os Termos de Utilização", "terms_of_use_error": "Deves aceitar os Termos de Utilização", - "registration-added-to-queue": "O teu registro foi adicionado à fila de aprovação. Receberás um e-mail quando for aceite pelo administrador.", + "registration-added-to-queue": "O teu registro foi adicionado à fila de aprovação. Receberás um e-mail quando for aceite por um administrador.", "interstitial.intro": "Requeremos informação adicional antes de criarmos a tua conta.", "interstitial.errors-found": "Não pudemos completar o teu registro:", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", diff --git a/public/language/pt-PT/search.json b/public/language/pt-PT/search.json index f1ec442d4e..12cc79ece8 100644 --- a/public/language/pt-PT/search.json +++ b/public/language/pt-PT/search.json @@ -9,10 +9,10 @@ "all": "All", "any": "Any", "posted-by": "Publicado por", - "in-categories": "Em Categorias", + "in-categories": "Nas Categorias", "search-child-categories": "Procurar categorias infantis", "has-tags": "Tem marcadores", - "reply-count": "Contagem de respostas", + "reply-count": "Quantidade de respostas", "at-least": "Pelo menos", "at-most": "No máximo", "relevance": "Relevância", @@ -28,7 +28,7 @@ "three-months": "Três meses", "six-months": "Seis meses", "one-year": "Um ano", - "sort-by": "Sortear por", + "sort-by": "Ordenar por", "last-reply-time": "Tempo da última resposta", "topic-title": "Título do tópico", "topic-votes": "Votos dos tópicos", diff --git a/public/language/pt-PT/topic.json b/public/language/pt-PT/topic.json index 27d697e2b1..a596922813 100644 --- a/public/language/pt-PT/topic.json +++ b/public/language/pt-PT/topic.json @@ -64,7 +64,7 @@ "thread_tools.move": "Mover tópico", "thread_tools.move-posts": "Mover publicações", "thread_tools.move_all": "Mover todos", - "thread_tools.select_category": "Select Category", + "thread_tools.select_category": "Selecionar Categoria", "thread_tools.fork": "Clonar tópico", "thread_tools.delete": "Eliminar tópico", "thread_tools.delete-posts": "Apagar publicações", diff --git a/public/language/pt-PT/user.json b/public/language/pt-PT/user.json index cd9af1396a..18acea7320 100644 --- a/public/language/pt-PT/user.json +++ b/public/language/pt-PT/user.json @@ -4,7 +4,7 @@ "deleted": "Apagar", "username": "Nome de utilizador", "joindate": "Juntar data", - "postcount": "Contagem de publicações", + "postcount": "Quantidade de publicações", "email": "E-mail", "confirm_email": "Confirmar o e-mail", "account_info": "Informação de conta", @@ -77,14 +77,13 @@ "settings": "Definições", "show_email": "Mostrar o meu e-mail", "show_fullname": "Mostrar o meu nome completo", - "restrict_chats": "Só permitir mensagens de utilizadores que eu sigo", + "restrict_chats": "Permitir apenas mensagens de utilizadores que eu sigo", "digest_label": "Subscrever o resumo", "digest_description": "Subscrever atualizações por e-mail para este fórum (novas notificações e tópicos) de acordo com um horário definido", "digest_off": "Desligado", "digest_daily": "Diariamente ", "digest_weekly": "Semanalmente", "digest_monthly": "Mensalmente", - "settings-require-reload": "Algumas alterações requerem um recarregamento. Carregue aqui para recarregar a página.", "has_no_follower": "Este utilizador não tem nenhum seguidor :(", "follows_no_one": "Este utilizador não está a seguir ninguém :(", "has_no_posts": "Este utilizador ainda não publicou nada.", @@ -103,7 +102,7 @@ "max_items_per_page": "Máximo %1", "acp_language": "Idioma da Página de Administração", "notification_sounds": "Reproduzir um som quando uma notificação for recebida", - "notifications_and_sounds": "Notificações & Sons", + "notifications_and_sounds": "Notificações e Sons", "incoming-message-sound": "Som de mensagem recebida", "outgoing-message-sound": "Som de mensagem enviada", "notification-sound": "Som de notificação", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Abrir links num novo separador", "enable_topic_searching": "Permitir pesquisa dentro dos tópicos", "topic_search_help": "Se ativada, a pesquisa dentro de tópicos irá sobrepor-se ao comportamento normal de pesquisa do browser pré-definido e irá permitir-te pesquisar ao longo de todo o tópico, em vez de pesquisar somente no que é mostrado no ecrã", - "delay_image_loading": "Atrasar o carregamento da imagem", - "image_load_delay_help": "Se ativado, as imagens nos tópicos não carregarão até que fiquem visíveis no ecrã", "scroll_to_my_post": "Depois de publicar uma resposta, mostrar a nova publicação", "follow_topics_you_reply_to": "Visualizar tópicos aos quais respondeste", "follow_topics_you_create": "Visualizar tópicos que criaste", @@ -150,7 +147,7 @@ "info.email-history": "Histórico de e-mail", "info.moderation-note": "Nota de moderação", "info.moderation-note.success": "Nota de moderação guardada", - "info.moderation-note.add": "Add note", + "info.moderation-note.add": "Adicionar nota", "sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.", "consent.title": "Your Rights & Consent", "consent.lead": "This community forum collects and processes your personal information.", diff --git a/public/language/ro/admin/advanced/database.json b/public/language/ro/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/ro/admin/advanced/database.json +++ b/public/language/ro/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/ro/admin/manage/uploads.json b/public/language/ro/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/ro/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/ro/email.json b/public/language/ro/email.json index 29b0e0bb6e..00c4a7d3e4 100644 --- a/public/language/ro/email.json +++ b/public/language/ro/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Cererea de resetare a parolei a fost efectuată - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Salutare lui %1", "invite": "Invitație de la %1", "greeting_no_name": "Salut", diff --git a/public/language/ro/error.json b/public/language/ro/error.json index b6cd741918..1eb9536889 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Sistemul de reputație este dezactivat.", "downvoting-disabled": "Votarea negativă este dezactivată", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/ro/notifications.json b/public/language/ro/notifications.json index 7945f3ce74..49e1f8da66 100644 --- a/public/language/ro/notifications.json +++ b/public/language/ro/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Părăsești acuma %1", "continue_to": "Continuă la %1", "return_to": "Întoarce-te la %1", - "new_notification": "Notificare Nouă", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Ai notificări necitite.", "all": "All", "topics": "Topics", diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 7670f5eef6..23689372bc 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -84,7 +84,6 @@ "digest_daily": "Zilnic", "digest_weekly": "Săptămânal", "digest_monthly": "Lunar", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Pe acest utilizator nu îl urmărește nimeni :(", "follows_no_one": "Acest utilizator nu urmărește pe nimeni :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/ru/admin/advanced/database.json b/public/language/ru/admin/advanced/database.json index 340a1ea48e..0a3c3bf16f 100644 --- a/public/language/ru/admin/advanced/database.json +++ b/public/language/ru/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Долгосрочная память", "mongo.virtual-memory": "Виртуальная память", "mongo.mapped-memory": "Расширенная память", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Сырые данные о MongoDB", "redis": "Redis", "redis.version": "Версия Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Подключенные клиенты", "redis.connected-slaves": "Подключенные устройства", "redis.blocked-clients": "Заблокированные клиенты", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Общее число подключений получено", "redis.total-commands-processed": "Команд обработано в общем", "redis.iops": "Мгновенные операции. в секунду", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Количество ключевых просмотров", "redis.keyspace-misses": "Количество не ключевых просмотров", "redis.raw-info": "Redis необработанная информация", diff --git a/public/language/ru/admin/manage/uploads.json b/public/language/ru/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/ru/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/ru/email.json b/public/language/ru/email.json index 7ff0740f29..5ed2ae25cd 100644 --- a/public/language/ru/email.json +++ b/public/language/ru/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Запрошен сброс пароля: %1", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Добро пожаловать на сайт %1", "invite": "Приглашение от %1", "greeting_no_name": "Здравствуйте!", diff --git a/public/language/ru/error.json b/public/language/ru/error.json index d87136353b..95c3c03f46 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Вам разрешено редактировать сообщения чата за %1 секунд после публикации", "chat-delete-duration-expired": "Вам разрешено удалять сообщения чата за% 1 секунду после публикации", "chat-deleted-already": "Это сообщение чата уже удалено.", - "chat-restored'already": "Это сообщение чата уже восстановлено.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Спасибо, вы уже проголосовали за это сообщение.", "reputation-system-disabled": "Система репутации отключена.", "downvoting-disabled": "Понижение оценки отключено", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Невозможно переместить посты в эту же тему!", "cannot-block-self": "Вы не можете заблокировать себя!", "cannot-block-privileged": "Вы не можете заблокировать администраторов или глобальных модераторов", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Кажется, что проблема с вашим подключением к Интернету" } \ No newline at end of file diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json index 7817273168..247d1bb0b4 100644 --- a/public/language/ru/notifications.json +++ b/public/language/ru/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Вы сейчас читаете: %1", "continue_to": "Перейти на %1", "return_to": "Вернуться к %1", - "new_notification": "Новое уведомление", - "new_notification_from": "У Вас есть новые сообщения от %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "У вас есть непрочитанные уведомления.", "all": "Все", "topics": "Темы", diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 64775a847f..3710fe7a4f 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -84,7 +84,6 @@ "digest_daily": "За день", "digest_weekly": "За неделю", "digest_monthly": "За месяц", - "settings-require-reload": "Для отображения изменений необходимо обновить страницу. Нажмите здесь, чтобы продолжить.", "has_no_follower": "На этого участника никто не подписан", "follows_no_one": "Этот участник ни на кого не подписан", "has_no_posts": "Участник пока не создал ни одной записи", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Открывать внешние ссылки в новом окне", "enable_topic_searching": "Поиск во всех записях темы", "topic_search_help": "Если опция включена, поиск будет осуществляться по всем записям темы, а не только в видимых.", - "delay_image_loading": "Автоматическая загрузка изображений", - "image_load_delay_help": "Постепенно подгружать изображения по мере просмотра записей темы.", "scroll_to_my_post": "Просмотр своего комментария сразу после его отправки.", "follow_topics_you_reply_to": "Подписаться на темы, на которые вы отвечали", "follow_topics_you_create": "Подписаться на созданные вами темы", diff --git a/public/language/rw/admin/advanced/database.json b/public/language/rw/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/rw/admin/advanced/database.json +++ b/public/language/rw/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/rw/admin/manage/uploads.json b/public/language/rw/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/rw/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/rw/email.json b/public/language/rw/email.json index e136059442..9524e3aea0 100644 --- a/public/language/rw/email.json +++ b/public/language/rw/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Ubusabe bwo Gutangiza Bundibushya Ijambobanga - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Ikaze kuri %1", "invite": "Ubutumire buvuye kuri %1", "greeting_no_name": "Mwirwe", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index f4808a3217..b85698b104 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Ibijyanye n'itangwa ry'amanota ntibyemerewe. ", "downvoting-disabled": "Kwambura amanota ntibyemerewe", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json index f26d109d5c..88f3e772aa 100644 --- a/public/language/rw/notifications.json +++ b/public/language/rw/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Komereza kuri %1", "return_to": "Subira kuri %1", - "new_notification": "Itangazo Rishya", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Ufite amatangazo utarasoma. ", "all": "All", "topics": "Topics", diff --git a/public/language/rw/user.json b/public/language/rw/user.json index 8249e43396..8203a0bbce 100644 --- a/public/language/rw/user.json +++ b/public/language/rw/user.json @@ -84,7 +84,6 @@ "digest_daily": "Buri Munsi", "digest_weekly": "Buri Cyumweru", "digest_monthly": "Buri Kwezi", - "settings-require-reload": "Hari igihe ibyo watunganyije bitagaragara iyo utongeye ngo upakire paji uriho. Kanda hano upakire iyi paji bundibushya. ", "has_no_follower": "Uyu muntu ntabwo afite abamukurikira :(", "follows_no_one": "Uyu muntu ntabwo akurikira umuntu numwe :(", "has_no_posts": "Uyu muntu nta kintu arashyiraho. ", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Fungurira imirongo ijya hanze mu idirishya rishya", "enable_topic_searching": "Emerera Ugushakira mu Kiganiro", "topic_search_help": "Nibyemerwa, ugushakira mu kiganiro bizajya biba ari byo bikorwa maze bitume umuntu abasha gushakira mu kiganiro hose aho gushakira kuri paji igaragarira amaso, imbere yawe gusa", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "Nyuma yo gushyiraho igisubizo, hagaragare icyashyizweho gishya", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/sc/admin/advanced/database.json b/public/language/sc/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/sc/admin/advanced/database.json +++ b/public/language/sc/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/sc/admin/manage/uploads.json b/public/language/sc/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/sc/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/sc/email.json b/public/language/sc/email.json index b639351dff..51506cf884 100644 --- a/public/language/sc/email.json +++ b/public/language/sc/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Password Reset Requested - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Welcome to %1", "invite": "Invitation from %1", "greeting_no_name": "Hello", diff --git a/public/language/sc/error.json b/public/language/sc/error.json index 4ced02d7db..9a140cbb8d 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "You have already voted for this post.", "reputation-system-disabled": "Reputation system is disabled.", "downvoting-disabled": "Downvoting is disabled", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/sc/notifications.json b/public/language/sc/notifications.json index 90685c70d5..fd68a1f973 100644 --- a/public/language/sc/notifications.json +++ b/public/language/sc/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "You are now leaving %1", "continue_to": "Continue to %1", "return_to": "Return to %1", - "new_notification": "New Notification", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "You have unread notifications.", "all": "All", "topics": "Topics", diff --git a/public/language/sc/user.json b/public/language/sc/user.json index c34274d8cb..4ffc4f1c6d 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -84,7 +84,6 @@ "digest_daily": "Daily", "digest_weekly": "Weekly", "digest_monthly": "Monthly", - "settings-require-reload": "Some setting changes require a reload. Click here to reload the page.", "has_no_follower": "Custu impitadore non tenet perunu sighidore :(", "follows_no_one": "Custu impitadore no est sighende nissunu :(", "has_no_posts": "This user hasn't posted anything yet.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", - "delay_image_loading": "Delay Image Loading", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Watch topics that you reply to", "follow_topics_you_create": "Watch topics you create", diff --git a/public/language/sk/admin/advanced/database.json b/public/language/sk/admin/advanced/database.json index cf95aec279..37b3b66953 100644 --- a/public/language/sk/admin/advanced/database.json +++ b/public/language/sk/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Rezidentná pamäť", "mongo.virtual-memory": "Virtuálna pamäť", "mongo.mapped-memory": "Namapovaná pamäť", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Raw informácie MongoDB", "redis": "Redis", "redis.version": "Verzia Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Pripojených klientov", "redis.connected-slaves": "Druhotné pripojenia", "redis.blocked-clients": "Blokovaných klientov", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Súhrnné množstvo pripojení", "redis.total-commands-processed": "Súhrnne spracované príkazov", "redis.iops": "Okamžité spracovanie za sekundu", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Spracovaných kľúčov", "redis.keyspace-misses": "Chyby kľúča", "redis.raw-info": "Informácie Redis Raw", diff --git a/public/language/sk/admin/manage/uploads.json b/public/language/sk/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/sk/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/sk/email.json b/public/language/sk/email.json index f371cd44c1..afdfa2b901 100644 --- a/public/language/sk/email.json +++ b/public/language/sk/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Vyžiadaná obnova hesla - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Vitajte v %1", "invite": "Pozvánka od %1", "greeting_no_name": "Dobrý deň", diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 4597317efd..c4d0aec403 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Je Vám umožnené upraviť správy konverzácie po dobu %1 sekúnd po ich odoslaní", "chat-delete-duration-expired": "Je Vám umožnené odstrániť správy konverzácie po dobu %1 sekúnd po ich odoslaní", "chat-deleted-already": "Táto správa konverzácie už bola odstránená.", - "chat-restored'already": "Táto správa konverzácie bola obnovená", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Za tento príspevok ste už hlasovali.", "reputation-system-disabled": "Systém reputácie je zablokovaný.", "downvoting-disabled": "Hlasovanie proti je zablokované", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Nie je možné presunúť príspevok do rovnakej témy!", "cannot-block-self": "Nemôžete zablokovať seba samého!", "cannot-block-privileged": "Nemôžete zablokovať správcov alebo hlavných moderátorov", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Zdá sa, že máte problém s pripojením k internetu" } \ No newline at end of file diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json index fd7bdb12be..f86817dabd 100644 --- a/public/language/sk/notifications.json +++ b/public/language/sk/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Práve opúšťate %1", "continue_to": "Pokračovať k %1", "return_to": "Vrátiť sa na %1", - "new_notification": "Nové oznámenie", - "new_notification_from": "Máte nové oznámenia od %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Máte neprečítané oznámenia.", "all": "Všetko", "topics": "Témy", diff --git a/public/language/sk/user.json b/public/language/sk/user.json index e2fb7e9df7..ecc263c8be 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -84,7 +84,6 @@ "digest_daily": "Denne", "digest_weekly": "Týždenne", "digest_monthly": "Mesačne", - "settings-require-reload": "Niektoré zmeny nastavení vyžadujú znovu načítanie stránky. Kliknutím sem znova načítate stránku.", "has_no_follower": "Tohto užívateľa nikto nesleduje :(", "follows_no_one": "Tento užívateľ nikoho nesleduje :(", "has_no_posts": "Tento užívateľ doteraz nič nezverejnil.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Otvárať odchádzajúce odkazy v novom liste", "enable_topic_searching": "Povoliť vyhľadávanie priamo v téme", "topic_search_help": "Ak je funkcia povolená, predvolené nastavenia vyhľadávania v prehliadači budú pre nastavené, a umožnia Vám prechádzať cez všetky vstupy, nie iba cez tie, ktoré budú zobrazené na obrazovke", - "delay_image_loading": "Oneskorené načítanie obrázku", - "image_load_delay_help": "Ak je táto možnosť povolená, obrázky v témach budu načítane až vtedy, ak sa dostanú do zorného poľa", "scroll_to_my_post": "Po odoslaní odpovede, ukázať nový príspevok", "follow_topics_you_reply_to": "Sledovať témy na ktoré ste odpovedali", "follow_topics_you_create": "Sledovať témy ktoré ste vytvorili", diff --git a/public/language/sl/admin/advanced/database.json b/public/language/sl/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/sl/admin/advanced/database.json +++ b/public/language/sl/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/sl/admin/manage/uploads.json b/public/language/sl/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/sl/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/sl/email.json b/public/language/sl/email.json index 00ef779e6a..6f1da70fe0 100644 --- a/public/language/sl/email.json +++ b/public/language/sl/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Zahtevana je bila ponastavitev gesla - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Dobrodošli na forumu %1!", "invite": "Povabilo uporabnika %1", "greeting_no_name": "Pozdravljeni!", diff --git a/public/language/sl/error.json b/public/language/sl/error.json index 454eb6533c..54bc907625 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Za to objavo ste že glasovali.", "reputation-system-disabled": "Sistem za ugled je onemogočen.", "downvoting-disabled": "Negativno glasovanje je onemogočeno.", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/sl/notifications.json b/public/language/sl/notifications.json index 06cf6ebcd1..936b7c8ba6 100644 --- a/public/language/sl/notifications.json +++ b/public/language/sl/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Sedaj zapuščate %1.", "continue_to": "Nadaljujte na %1.", "return_to": "Vrnite se na %1.", - "new_notification": "Novo obvestilo", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Imate neprebrana obvestila.", "all": "All", "topics": "Topics", diff --git a/public/language/sl/user.json b/public/language/sl/user.json index d1eb3146b8..e3be52ffd1 100644 --- a/public/language/sl/user.json +++ b/public/language/sl/user.json @@ -84,7 +84,6 @@ "digest_daily": "Dnevno", "digest_weekly": "Tedensko", "digest_monthly": "Mesečno", - "settings-require-reload": "Nekatere spremembe potrebujejo osvežitev strani. Pritisni tukaj za ponovno nalaganje.", "has_no_follower": "Uporabniku nihče ne sledi :(", "follows_no_one": "Uporabnik nikomur ne sledi :(", "has_no_posts": "Uporabnik še ni nič objavil.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Zunanje povezave odpri v novem zavihku", "enable_topic_searching": "Omogoči iskanje znotraj teme", "topic_search_help": "Če omogočite, bo iskanje prepisalo brskalnikove prevzete nastavitve in vam omogočilo iskanje skozi celotno temo.", - "delay_image_loading": "Zakasnitev pri nalaganju slike", - "image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view", "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Spremljanj teme, na katere si odgovoril", "follow_topics_you_create": "Spremljanj teme, ki si jih ustvaril", diff --git a/public/language/sr/admin/advanced/database.json b/public/language/sr/admin/advanced/database.json index f73e1758d4..ff749ac7e3 100644 --- a/public/language/sr/admin/advanced/database.json +++ b/public/language/sr/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtuelna memorija", "mongo.mapped-memory": "Mapirana Memorija", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Sirove informacije o MongoDB", "redis": "Redis", "redis.version": "Redis verzija", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Klijenata povezano", "redis.connected-slaves": "Povezano \"robova\"", "redis.blocked-clients": "Klijenata blokirano", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Ukupno primljeno konekcija", "redis.total-commands-processed": "Ukupno komandi procesuirano", "redis.iops": "Trenutno operacija po sekundi", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Sirove informacije o Redis-u", diff --git a/public/language/sr/admin/manage/uploads.json b/public/language/sr/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/sr/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/sr/email.json b/public/language/sr/email.json index 8fb31f29f3..2965377f4f 100644 --- a/public/language/sr/email.json +++ b/public/language/sr/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Захтевано је ресетовање лозинке - %1!", + "test-email.subject": "Пробна е-пошта", + "password-reset-requested": "Захтевано је поништавање лозинке!", "welcome-to": "Добродошли на %1", "invite": "Позивница од %1", "greeting_no_name": "Здраво", diff --git a/public/language/sr/error.json b/public/language/sr/error.json index fd502fa117..b2fd6d3db5 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Време у којем вам је дозвољено уређивање порука ћаскања након објављивања: %1 сек.", "chat-delete-duration-expired": "Време у којем вам је дозвољено брисање порука ћаскања након објављивања: %1 сек.", "chat-deleted-already": "Ова порука ћаскања је већ избрисана.", - "chat-restored'already": "Ова порука ћаскања је већ обновљена.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Већ сте гласали за ову поруку.", "reputation-system-disabled": "Угледи су онемогућени.", "downvoting-disabled": "Негативно гласање је онемогућено", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Није могуће преместити поруку у исту тему!", "cannot-block-self": "Не можете блокирати себе!", "cannot-block-privileged": "Не можете блокирати администраторе или глобалне модераторе", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Изгледа да постоји проблем са вашом интернет везом" } \ No newline at end of file diff --git a/public/language/sr/notifications.json b/public/language/sr/notifications.json index 17ba4ee271..24e4c2feb0 100644 --- a/public/language/sr/notifications.json +++ b/public/language/sr/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Сада напуштате %1", "continue_to": "Продужи на %1", "return_to": "Врати се на %1", - "new_notification": "Ново обавештење", - "new_notification_from": "Имате ново обавештење са %1", + "new_notification": "Имате ново обавештење", "you_have_unread_notifications": "Имате непрочитана обавештења.", "all": "Све", "topics": "Теме", @@ -54,7 +53,7 @@ "notificationType_upvote": "Када неко гласа за вашу поруку", "notificationType_new-topic": "Када неко кога пратите постави тему", "notificationType_new-reply": "Када је постављен нови одговор у теми коју надгледате", - "notificationType_follow": "Када неко почне да вас прати.", + "notificationType_follow": "Када неко почне да вас прати", "notificationType_new-chat": "Када примите поруку за ћаскање", "notificationType_group-invite": "Када примите позивницу за групу", "notificationType_new-register": "Када је неко додат на чекање за регистрацију", diff --git a/public/language/sr/user.json b/public/language/sr/user.json index 91eac71887..b5cd6199b9 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -84,7 +84,6 @@ "digest_daily": "Дневно", "digest_weekly": "Седмично", "digest_monthly": "Месечно", - "settings-require-reload": "Неке измене у подешавањима захтевају поновно учитавање. Кликните овде да бисте поново учитали страницу.", "has_no_follower": "Овај корисник нема пратиоце :(", "follows_no_one": "Овај корисник не прати никога :(", "has_no_posts": "Овај корисник још ништа није објавио. ", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Отвори одлазне везе у новој картици", "enable_topic_searching": "Омогући претрагу унутар тема", "topic_search_help": "Ако је омогућено, претраживање унутар тема ће прегазити подразумевано понашање претраге страница и омогућити претрагу целе теме уместо само оног што је приказано на екрану", - "delay_image_loading": "Одложи учитавање слика", - "image_load_delay_help": "Ако је омогућено, слике у темама се неће учитавати док се страница не скролује до места где се слика налази", "scroll_to_my_post": "Након објављивања одговора, прикажи нову поруку", "follow_topics_you_reply_to": "Надгледај теме у којима си одговорио", "follow_topics_you_create": "Надгледај теме које си креирао", diff --git a/public/language/sv/admin/advanced/database.json b/public/language/sv/admin/advanced/database.json index b5351b91e4..9fccd39b48 100644 --- a/public/language/sv/admin/advanced/database.json +++ b/public/language/sv/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB Raw Info", "redis": "Redis", "redis.version": "Redis Version", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Connected Clients", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Blocked Clients", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Total Connections Received", "redis.total-commands-processed": "Total Commands Processed", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/sv/admin/manage/uploads.json b/public/language/sv/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/sv/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/sv/email.json b/public/language/sv/email.json index 6fec42213b..18a8010ae4 100644 --- a/public/language/sv/email.json +++ b/public/language/sv/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Återställning av lösenord efterfrågat - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Välkommen till %1", "invite": "Inbjudan ifrån %1", "greeting_no_name": "Hej", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 5c9eaffba0..abe326df9f 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Du kan endast redigera chattmeddelanden %1 sekunder efter att du skrivit dem", "chat-delete-duration-expired": "Du kan endast radera chattmeddelanden %1 sekunder efter att du skrivit dem", "chat-deleted-already": "Detta chattmeddelande har redan raderats.", - "chat-restored'already": "Detta chattmeddelande har redan återställts.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Du har redan röstat på det här inlägget.", "reputation-system-disabled": "Ryktessystemet är inaktiverat.", "downvoting-disabled": "Nedröstning är inaktiverat", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Kan inte flytta inlägg till samma ämne!", "cannot-block-self": "Du kan inte blockera dig själv!", "cannot-block-privileged": "Du kan inte blockera administratörer eller globala moderatorer", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Det verkar vara något problem med din internetanslutning" } \ No newline at end of file diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json index 3b8babc836..83386f9fdc 100644 --- a/public/language/sv/notifications.json +++ b/public/language/sv/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Du lämnar nu %1", "continue_to": "Fortsätt till %1", "return_to": "Återgå till %1", - "new_notification": "Ny notis", - "new_notification_from": "Du har en ny notis från %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Du har olästa notiser.", "all": "Alla", "topics": "Ämnen", diff --git a/public/language/sv/user.json b/public/language/sv/user.json index c09f81bf88..4e7796c1ad 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -84,7 +84,6 @@ "digest_daily": "Dagligen", "digest_weekly": "Veckovis", "digest_monthly": "Månadsvis", - "settings-require-reload": "Vissa inställningar som ändrades kräver att sidan laddas om. Klicka här för att ladda om sidan.", "has_no_follower": "Denna användare har inga följare :(", "follows_no_one": "Denna användare följer ingen :(", "has_no_posts": "Användaren har inte skrivit några inlägg ännu.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Öppna utgående länkar i ny flik", "enable_topic_searching": "Aktivera sökning inom ämne", "topic_search_help": "Om aktiverat kommer sökning inom ämne överskrida webbläsarens vanliga funktionen för sökning bland sidor och tillåta dig att söka genom hela ämnet istället för det som endast visas på skärmen.", - "delay_image_loading": "Fördröj inladdning av bilder", - "image_load_delay_help": "Aktivera för att hindra bilder ifrån att ladda in, innan de skrollats fram på skärmen. ", "scroll_to_my_post": "Visa det nya inlägget när ett svar har postats", "follow_topics_you_reply_to": "Bevaka ämnen som du svarat på", "follow_topics_you_create": "Bevaka ämnen som du skapat", diff --git a/public/language/th/admin/advanced/database.json b/public/language/th/admin/advanced/database.json index 00534c5218..f73d0bddd7 100644 --- a/public/language/th/admin/advanced/database.json +++ b/public/language/th/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "หน่วยความจำถาวร", "mongo.virtual-memory": "หน่วยความจำเสมือน", "mongo.mapped-memory": "เส้นทางหน่วยความจำ", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "ข้อมูลดิบของ MongoDB", "redis": "Redis", "redis.version": "Redis เวอร์ชั่น", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "ไคลเอ็นท์ที่เชื่อมต่อแล้ว", "redis.connected-slaves": "Slaves ที่เชื่อมต่อแล้ว", "redis.blocked-clients": "ไคลเอ็นท์ที่ถูกบล็อค", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "การเชื่อมต่อที่ได้รับทั้งหมด", "redis.total-commands-processed": "คำสั่งที่ประมวลผลแล้วทั้งหมด", "redis.iops": "การทำงานพร้อมกันต่อวินาที", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "ข้อมูลดิบของ Redis", diff --git a/public/language/th/admin/manage/uploads.json b/public/language/th/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/th/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/th/email.json b/public/language/th/email.json index 3f0bc0f577..e737a129f8 100644 --- a/public/language/th/email.json +++ b/public/language/th/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "ส่งคำขอตั้งค่ารหัสผ่านใหม่แล้ว - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "ยินดีต้อนรับ %1", "invite": "คำเชิญจาก %1", "greeting_no_name": "สวัสดี", diff --git a/public/language/th/error.json b/public/language/th/error.json index 341dd0f7e2..60df1ca6bd 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "คุณได้โหวตโพสต์นี้แล้ว", "reputation-system-disabled": "ระบบชื่อเสียงถูกปิดใช้งาน", "downvoting-disabled": "\"การโหวตลง\" ถูกปิดใช้งาน", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "You cannot block administrators or global moderators", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/th/notifications.json b/public/language/th/notifications.json index 59e39cfbc9..9d0246ce53 100644 --- a/public/language/th/notifications.json +++ b/public/language/th/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "ตอนนี้คุณกำลังออกจาก %1", "continue_to": "ดำเนินการต่อไปยัง %1", "return_to": "กลับสู่ %1", - "new_notification": "ข้อความเตือนใหม่", - "new_notification_from": "คุณมีคำเตือนใหม่จาก %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "คุณมีคำเตือนที่ยังไม่ได้อ่าน", "all": "ทั้งหมด", "topics": "กระทู้", diff --git a/public/language/th/user.json b/public/language/th/user.json index f4f15203c6..9339035d5a 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -84,7 +84,6 @@ "digest_daily": "รายวัน", "digest_weekly": "รายสัปดาห์", "digest_monthly": "รายเดือน", - "settings-require-reload": "การตั้งค่าบางอย่างต้องโหลดหน้าใหม่ คลิกที่นี่เพื่อโหลดหน้าใหม่", "has_no_follower": "ผู้ใช้รายนี้ไม่มีใครติดตาม :(", "follows_no_one": "ผู้ใช้รายนี้ไม่ติดตามใคร :(", "has_no_posts": "ผู้ใช้นี้ไม่ได้โพสต์ข้อความใดๆ", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "เปิดลิงค์ในแท็บใหม่", "enable_topic_searching": "เปิดใช้การค้นหาแบบ In-Topic", "topic_search_help": "หากเปิดใช้งาน, \"การค้นหาภายในกระทู้\" จะแทนที่ระบบ \"การค้นหาจากค่าเริ่มต้นของเบราเซอร์\" และจะทำให้คุณค้นหาข้อมูลต่างๆภายในกระทู้ได้ แทนที่จะเป็นการหาแค่สิ่งที่แสดงบนหน้าจอเท่านั้น", - "delay_image_loading": "การโหลดรูปภาพช้าลง", - "image_load_delay_help": "หากเปิดใช้งาน, รูปภาพในกระทู้จะไม่โหลดจนกว่าจะมีการเลื่อนไปดู", "scroll_to_my_post": "หลังจากได้ทำการโพสต์ตอบกลับ ให้แสดงโพสต์ใหม่", "follow_topics_you_reply_to": "ดูกระทู้ที่คุณตอบ", "follow_topics_you_create": "ดูกระทู้ที่คุณตั้ง", diff --git a/public/language/tr/admin/advanced/database.json b/public/language/tr/admin/advanced/database.json index 9677f68c3f..fa3e59edad 100644 --- a/public/language/tr/admin/advanced/database.json +++ b/public/language/tr/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Yerleşik Bellek", "mongo.virtual-memory": "Sanal Hafıza", "mongo.mapped-memory": "Planlanan Hafıza", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "İşlenmemiş MongoDB Bilgisi", "redis": "Redis", "redis.version": "Redis Versiyonu", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Bağlı İstemciler", "redis.connected-slaves": "İlişkili Bağımlılar", "redis.blocked-clients": "Engellenen İstemciler", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Alınan Bağlantılar (Toplam)", "redis.total-commands-processed": "İşlenen Komutlar (Toplam)", "redis.iops": "Saniyede işlenen komut sayısı (Redis)", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Başarılı anahtar arama sayısı: keyspace_hits (Redis)", "redis.keyspace-misses": "Başarısız anahtar arama sayısı: keyspace_misses (Redis)", "redis.raw-info": "İşlenmemiş Redis Bilgisi", diff --git a/public/language/tr/admin/manage/uploads.json b/public/language/tr/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/tr/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/tr/email.json b/public/language/tr/email.json index 91bb75faaa..00695038cb 100644 --- a/public/language/tr/email.json +++ b/public/language/tr/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Parola Değiştirme İsteği Gönderildi", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Hoş geldin %1", "invite": "%1 sizi davet etti", "greeting_no_name": "Merhaba", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index 9fad0d4e34..c0ead28478 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Gönderildikten sonra yalnızca %1 saniye mesajı(ları) düzenlemene izin verilir", "chat-delete-duration-expired": "Gönderildikten sonra yalnızca %1 saniye mesajı(ları) silmene izin verilir", "chat-deleted-already": "Bu sohbet mesajı zaten silinmiş.", - "chat-restored'already": "Bu sohbet mesajı zaten geri yüklendi.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Bu gönderi için zaten oy verdin.", "reputation-system-disabled": "İtibar sistemi devre dışı.", "downvoting-disabled": "Aşagı oylama kapatılmış", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "İletiyi aynı başlığa taşıyamazsın!", "cannot-block-self": "Kendi kendinizi engelleyemezsiniz!", "cannot-block-privileged": "Yöneticileri veya genel moderatörleri engelleyemezsiniz", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "İnternet bağlantınızda sorun var gibi görünüyor" } \ No newline at end of file diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index ba9761b8f3..e526219118 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "%1 ayrılıyorsunuz", "continue_to": "Devam et", "return_to": "Geri dön.", - "new_notification": "Yeni bildirim", - "new_notification_from": "Yenir bir bildiriminiz var %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Okunmamış bildirimleriniz var.", "all": "Hepsi", "topics": "Başlıklar", diff --git a/public/language/tr/user.json b/public/language/tr/user.json index b2a49844d6..fc29e1b720 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -84,7 +84,6 @@ "digest_daily": "Günlük", "digest_weekly": "Haftalık", "digest_monthly": "Aylık", - "settings-require-reload": "Bazı ayar değişiklikleri sayfayı tekrar yüklemenizi gerektirir. Buraya tıklayarak sayfayı tekrar yükleyebilirsiniz.", "has_no_follower": "Bu kullanıcının hiç takipçisi yok :(", "follows_no_one": "Bu kullanıcı kimseyi takip etmiyor :(", "has_no_posts": "Bu kullanıcı henüz herhangi bir ileti yazmamış.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Dışarı giden bağlantıları yeni sekmede aç", "enable_topic_searching": "Konu içi aramayı aktive et", "topic_search_help": "Aktive edilirse, konu içi arama tarayıcının normal arama davranışını değiştirerek tüm konuyu aramanızı sağlar", - "delay_image_loading": "Gecikmeli Görsel Yükleme", - "image_load_delay_help": "Aktif hale getirmeniz halinde başlıktaki görseller, sayfa kaydırıldıkca yüklenecek", "scroll_to_my_post": "Cevap yazdıktan sonra yeni gönderiyi göster", "follow_topics_you_reply_to": "Cevap verdiğin başlıkları izle", "follow_topics_you_create": "Oluşturduğunuz başlıkları izle", diff --git a/public/language/uk/admin/advanced/database.json b/public/language/uk/admin/advanced/database.json index 9d56ccfe31..bbb58fce7b 100644 --- a/public/language/uk/admin/advanced/database.json +++ b/public/language/uk/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Virtual Memory", "mongo.mapped-memory": "Mapped Memory", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Сирі дані від MongoDB", "redis": "Redis", "redis.version": "Версія Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Підключені клієнти", "redis.connected-slaves": "Підключені слуги", "redis.blocked-clients": "Заблоковані клієнти", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Кількість отриманих підключень", "redis.total-commands-processed": "Кілкість оброблених команд", "redis.iops": "Кількість миттєвих операції в секунду", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Попадання в ключах", "redis.keyspace-misses": "Промахи в ключах", "redis.raw-info": "Сирі дані від Redis", diff --git a/public/language/uk/admin/manage/uploads.json b/public/language/uk/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/uk/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/uk/email.json b/public/language/uk/email.json index 767a442c51..42ac82765e 100644 --- a/public/language/uk/email.json +++ b/public/language/uk/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Отриманий запит на відновлення паролю - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Ласкаво просимо до %1", "invite": "Запрошення від %1", "greeting_no_name": "Привіт", diff --git a/public/language/uk/error.json b/public/language/uk/error.json index d6ccaffc0a..1d72289574 100644 --- a/public/language/uk/error.json +++ b/public/language/uk/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Ви можете редагувати повідомлення чату лише через %1 секунд після публікації", "chat-delete-duration-expired": "Ви можете видаляти повідомлення чату лише через %1 секунд після публікації", "chat-deleted-already": "Це повідомлення чату вже було видалено.", - "chat-restored'already": "Це повідомлення чату вже відновлено.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Ви вже проголосували за цей пост.", "reputation-system-disabled": "Система репутацій вимкнена.", "downvoting-disabled": "Голосування проти вимкнено", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Ви не можете перемістити пост до тієї ж самої теми!", "cannot-block-self": "Ви не можете заблокувати самого себе!", "cannot-block-privileged": "Ви не можете заблокувати адміністраторів або глобальних модераторів", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Схоже, виникла проблема з вашим Інтернет-з'єднанням" } \ No newline at end of file diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json index 89b6e576c3..34d481c560 100644 --- a/public/language/uk/notifications.json +++ b/public/language/uk/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Ви залишаєте %1", "continue_to": "Перейти до %1", "return_to": "Повернутись до %1", - "new_notification": "Нове сповіщення", - "new_notification_from": "Ви отримали нове сповіщення від %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "У вас немає непрочитаних сповіщень", "all": "Всі", "topics": "Теми", diff --git a/public/language/uk/user.json b/public/language/uk/user.json index 3f9ad823b9..d709efbe55 100644 --- a/public/language/uk/user.json +++ b/public/language/uk/user.json @@ -84,7 +84,6 @@ "digest_daily": "Щоденно", "digest_weekly": "Щотижнево", "digest_monthly": "Щомісячно", - "settings-require-reload": "Змінам певних налаштувань необхідне перевантаження. Натисніть тут, щоб перевантажити сторінку.", "has_no_follower": "Цей користувач не має відстежувачів :(", "follows_no_one": "Цей користувач нікого не відстежує :(", "has_no_posts": "Цей користувач ще ніколи нічого не постив.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Відкривати зовнішні посилання у новій вкладці", "enable_topic_searching": "Увімкнути пошук у темах", "topic_search_help": "Будучи увімкненою, ця функція перевизначає вбудований пошук браузера і дозволяє шукати по всій темі, а не лише по змісту, що показаний на екрані.", - "delay_image_loading": "Затримати завантаження зображень", - "image_load_delay_help": "Будучи увімкненою, ця функция відкладає завантаження зображень у темі до моменту коли вони потрапляють у поле зору", "scroll_to_my_post": "Після відправки відповіді, показувати новий пост", "follow_topics_you_reply_to": "Підписуватися на теми в котрих ви відповідаєте", "follow_topics_you_create": "Підписуватися на теми які ви створюєте", diff --git a/public/language/vi/admin/advanced/database.json b/public/language/vi/admin/advanced/database.json index 65267512bf..bc6c735528 100644 --- a/public/language/vi/admin/advanced/database.json +++ b/public/language/vi/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "Resident Memory", "mongo.virtual-memory": "Bộ nhớ ảo", "mongo.mapped-memory": "Nhìn vào bộ nhớ ảo", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "Thông tin MongoDB", "redis": "Redis", "redis.version": "Phiên bản Redis", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "Người dùng kết nối", "redis.connected-slaves": "Connected Slaves", "redis.blocked-clients": "Người dùng vi phạm", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "Tổng số kết nối nhận được", "redis.total-commands-processed": "Tổng số kết nối đã thực thi", "redis.iops": "Instantaneous Ops. Per Second", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-misses": "Keyspace Misses", "redis.raw-info": "Redis Raw Info", diff --git a/public/language/vi/admin/manage/uploads.json b/public/language/vi/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/vi/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/vi/email.json b/public/language/vi/email.json index 84ae87d23c..75d443b3cc 100644 --- a/public/language/vi/email.json +++ b/public/language/vi/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "Yêu cầu phục hồi mật khẩu - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "Chào mừng bạn đến với %1", "invite": "Lời mời từ %1", "greeting_no_name": "Xin chào", diff --git a/public/language/vi/error.json b/public/language/vi/error.json index c61ad9e5f2..884f6efbdb 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "Bạn chỉ được phép sửa cuộc trò chuyện này sau %1 giây(s) sau khi viết bài.", "chat-delete-duration-expired": "Bạn chỉ được phép xóa cuộc trò chuyện này sau %1 giây(s) sau khi viết bài.", "chat-deleted-already": "Cuộc trò chuyện này đã được xóa.", - "chat-restored'already": "Cuộc trò chuyện này đã được lưu trữ.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "Bạn đã bỏ phiếu cho bài viết này", "reputation-system-disabled": "Hệ thống tín nhiệm đã bị vô hiệu hóa.", "downvoting-disabled": "Downvote đã bị tắt", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Bạn không thể di chuyển bài viết vào cùng chủ đề hiện tại!", "cannot-block-self": "Bạn không thể tự khóa tài khoản của bạn!", "cannot-block-privileged": "Bạn không thể khóa người quản trị hoặc là người quản lý chung.", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "Kết nối internet của bạn có vấn đề." } \ No newline at end of file diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json index 3605d52d4a..d9a4057312 100644 --- a/public/language/vi/notifications.json +++ b/public/language/vi/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "Bạn đang rời khỏi %1", "continue_to": "Tiếp tục tới %1", "return_to": "Quay lại %1", - "new_notification": "Thông báo mới", - "new_notification_from": "Bạn nhận được 1 thông báo từ %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "Bạn có thông báo chưa đọc", "all": "Toàn bộ", "topics": "Chủ đề", diff --git a/public/language/vi/user.json b/public/language/vi/user.json index b9111fc414..d8f53a8f5e 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -84,7 +84,6 @@ "digest_daily": "Hàng ngày", "digest_weekly": "Hàng tuần", "digest_monthly": "Hàng tháng", - "settings-require-reload": "Một số thay đổi trong cài đặt đòi hỏi tải lại. Nhấn vào đây để tải lại trang.", "has_no_follower": "Người dùng này hiện chưa có ai theo dõi :(", "follows_no_one": "Người dùng này hiện chưa theo dõi ai :(", "has_no_posts": "Thành viên này chưa đăng bài viết nào cả.", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "Mở link trong tab mới.", "enable_topic_searching": "Bật In-topic Searching", "topic_search_help": "Nếu bật, tìm kiếm trong chủ đề sẽ thay thế tính năng tính năng tìm kiếm của trình duyệt và cho phép bạn tìm kiếm trong toàn bộ chủ đề, thay vì chỉ tìm kiếm nội dung đang hiện thị trên màn hình", - "delay_image_loading": "Việc tải ảnh đang bị chậm", - "image_load_delay_help": "Nếu được bật, toàn bộ ảnh trong chủ đề sẽ chỉ được tải khi người dùng kéo chuột tới", "scroll_to_my_post": "Sau khi đăng một trả lời thì hiển thị bài viết mới", "follow_topics_you_reply_to": "Những chủ đề bạn quan tâm và từng bình luận", "follow_topics_you_create": "Theo dõi chủ đề bạn tạo", diff --git a/public/language/zh-CN/admin/advanced/database.json b/public/language/zh-CN/admin/advanced/database.json index 5e51bc70fc..6fe4a9358b 100644 --- a/public/language/zh-CN/admin/advanced/database.json +++ b/public/language/zh-CN/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "驻留内存", "mongo.virtual-memory": "虚拟内存", "mongo.mapped-memory": "已映射内存", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB 原始信息", "redis": "Redis", "redis.version": "Redis 版本", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "已连接客户端", "redis.connected-slaves": "已连接从", "redis.blocked-clients": "受阻的客户端", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "已接收的连接总数", "redis.total-commands-processed": "已执行命令总数", "redis.iops": "每秒实时操作数", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "Keyspace 命中", "redis.keyspace-misses": "Keyspace 未命中", "redis.raw-info": "Redis 原始信息", diff --git a/public/language/zh-CN/admin/general/dashboard.json b/public/language/zh-CN/admin/general/dashboard.json index c28c220c73..8d89e52b98 100644 --- a/public/language/zh-CN/admin/general/dashboard.json +++ b/public/language/zh-CN/admin/general/dashboard.json @@ -67,7 +67,7 @@ "graphs.page-views": "页面浏览量", "graphs.page-views-registered": "注册用户页面浏览量", "graphs.page-views-guest": "游客页面浏览量", - "graphs.page-views-bot": "Page Views Bot", + "graphs.page-views-bot": "爬虫页面浏览量", "graphs.unique-visitors": "单一访客", "graphs.registered-users": "已注册用户", "graphs.anonymous-users": "匿名用户", diff --git a/public/language/zh-CN/admin/general/navigation.json b/public/language/zh-CN/admin/general/navigation.json index b35934da95..886174ced8 100644 --- a/public/language/zh-CN/admin/general/navigation.json +++ b/public/language/zh-CN/admin/general/navigation.json @@ -8,7 +8,7 @@ "id": "ID:可选", "properties": "属性:", - "groups": "Groups:", + "groups": "群组:", "open-new-window": "在新窗口中打开", "btn.delete": "删除", diff --git a/public/language/zh-CN/admin/manage/categories.json b/public/language/zh-CN/admin/manage/categories.json index 356c989c33..1aca5799c4 100644 --- a/public/language/zh-CN/admin/manage/categories.json +++ b/public/language/zh-CN/admin/manage/categories.json @@ -29,8 +29,8 @@ "select-category": "选择版块", "set-parent-category": "设置父版块", - "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. Select the domain of effect from the dropdown below.", - "privileges.category-selector": "Configuring privileges for ", + "privileges.description": "您可以在此部分中配置此版块的访问控制权限。 可以分别为每个用户或每个群组授予权限。 从下面的下拉列表中选择要配置的版块。", + "privileges.category-selector": "为该版块配置权限:", "privileges.warning": "注意:权限设置会立即生效。 调整这些设置后,无需保存。", "privileges.section-viewing": "查看权限", "privileges.section-posting": "发帖权限", diff --git a/public/language/zh-CN/admin/manage/privileges.json b/public/language/zh-CN/admin/manage/privileges.json index ba38142c11..faa716f670 100644 --- a/public/language/zh-CN/admin/manage/privileges.json +++ b/public/language/zh-CN/admin/manage/privileges.json @@ -10,7 +10,7 @@ "search-content": "搜索内容", "search-users": "搜索用户", "search-tags": "搜索话题", - "allow-local-login": "Local Login", + "allow-local-login": "本地登录", "find-category": "版块可见", "access-category": "访问版块", diff --git a/public/language/zh-CN/admin/manage/uploads.json b/public/language/zh-CN/admin/manage/uploads.json new file mode 100644 index 0000000000..6a2b2a86eb --- /dev/null +++ b/public/language/zh-CN/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "上传文件", + "filename": "文件名", + "usage": "使用的帖子", + "orphaned": "未使用", + "size/filecount": "大小/文件数", + "confirm-delete": "您确定要删除此文件吗?", + "filecount": "%1 文件" +} \ No newline at end of file diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index b8816d7e5a..530b4fbf7a 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -57,7 +57,7 @@ "section-advanced": "高级", "advanced/database": "数据库", "advanced/events": "事件", - "advanced/hooks": "Hooks", + "advanced/hooks": "插件钩子", "advanced/logs": "日志", "advanced/errors": "错误", "advanced/cache": "缓存", diff --git a/public/language/zh-CN/admin/settings/uploads.json b/public/language/zh-CN/admin/settings/uploads.json index f837d3e0c4..2667d31efc 100644 --- a/public/language/zh-CN/admin/settings/uploads.json +++ b/public/language/zh-CN/admin/settings/uploads.json @@ -4,10 +4,10 @@ "private": "使上传的文件私有化", "private-extensions": "自定义文件扩展名", "private-uploads-extensions-help": "在此处输入以逗号分隔的文件扩展名列表 (例如 pdf,xls,doc )并将其用于自定义。为空则表示允许所有扩展名。", - "resize-image-width-threshold": "Resize images if they are wider than specified width", - "resize-image-width-threshold-help": "(in pixels, default: 1520 pixels, set to 0 to disable)", - "resize-image-width": "Resize images down to specified width", - "resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", + "resize-image-width-threshold": "如果图像宽度超过指定大小,则对图像进行缩放", + "resize-image-width-threshold-help": "(像素单位,默认 1520 px,设置为0以禁用)", + "resize-image-width": "缩小图片到指定宽度", + "resize-image-width-help": "(像素单位,默认 760 px,设置为0以禁用)", "resize-image-quality": "调整图像大小时使用的质量", "resize-image-quality-help": "使用较低质量的设置来减小调整过大小的图像的文件大小", "max-file-size": "最大文件尺寸(单位 KiB)", diff --git a/public/language/zh-CN/admin/settings/user.json b/public/language/zh-CN/admin/settings/user.json index 1c6a2dc1de..70e6be100e 100644 --- a/public/language/zh-CN/admin/settings/user.json +++ b/public/language/zh-CN/admin/settings/user.json @@ -9,7 +9,7 @@ "allow-login-with.email": "仅限邮箱", "account-settings": "用户设置", "gdpr_enabled": "Enable GDPR consent collection", - "gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the General Data Protection Regulation (GDPR). Note: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.", + "gdpr_enabled_help": "当启用时,所有的新注册用户需要明确同意允许数据采集和在通用数据保护协议(GDPR)保护下的使用。注意:开启GDPR不一定要之前已经存在的用户同意。在这之前,你需要去安装GDPR插件。", "disable-username-changes": "禁用修改用户名", "disable-email-changes": "禁用修改邮箱", "disable-password-changes": "禁用修改密码", @@ -27,9 +27,9 @@ "lockout-duration": "帐户锁定时间(分钟)", "login-days": "记录用户会话天数", "password-expiry-days": "强制重置密码天数", - "session-time": "Session Time", - "session-time-days": "Days", - "session-time-seconds": "Seconds", + "session-time": "Session 过期时间", + "session-time-days": "天", + "session-time-seconds": "秒", "session-time-help": "These values are used to govern how long a user stays logged in when they check "Remember Me" on login. Note that only one of these values will be used. If there is no seconds value we fall back to days. If there is no days value we default to 14 days.", "online-cutoff": "Minutes after user is considered inactive", "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", diff --git a/public/language/zh-CN/email.json b/public/language/zh-CN/email.json index 2bfea5f85e..1e29c7854d 100644 --- a/public/language/zh-CN/email.json +++ b/public/language/zh-CN/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "密码重置申请 - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "欢迎来到 %1", "invite": "来自%1的邀请", "greeting_no_name": "您好", diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index e1a02838ae..b07bf6470c 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "您只能在发布 %1 秒后修改聊天信息", "chat-delete-duration-expired": "您只能在发布 %1 秒后删除聊天信息", "chat-deleted-already": "聊天消息已经被删除", - "chat-restored'already": "聊天消息已经恢复", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "您已为此帖回复投过票了。", "reputation-system-disabled": "声望系统已禁用。", "downvoting-disabled": "踩已被禁用", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "无法将帖子移动到相同的主题中!", "cannot-block-self": "您不能把自己屏蔽!", "cannot-block-privileged": "您不能屏蔽管理员或者全局版主", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "您的网络连接似乎存在问题" } \ No newline at end of file diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index 7e1a4453a6..fa9ca314d4 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -47,7 +47,7 @@ "composer.formatting.italic": "倾斜", "composer.formatting.list": "列表", "composer.formatting.strikethrough": "删除线", - "composer.formatting.code": "Code", + "composer.formatting.code": "代码", "composer.formatting.link": "链接", "composer.formatting.picture": "图片", "composer.upload-picture": "上传图片", diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index 0715ae9243..699dc72652 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "您正在离开 %1", "continue_to": "继续前往 %1", "return_to": "返回 %1", - "new_notification": "新通知", - "new_notification_from": "您有一条来自 %1 的新通知", + "new_notification": "You have a new notification", "you_have_unread_notifications": "您有未读的通知。", "all": "所有", "topics": "主题", diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 629de89512..fb5ccd10d1 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -45,7 +45,7 @@ "account/posts": "%1 发布的帖子", "account/topics": "%1 创建的主题", "account/groups": "%1 的群组", - "account/watched_categories": "%1's Watched Categories", + "account/watched_categories": "%1 关注的版块", "account/bookmarks": "%1 收藏的帖子", "account/settings": "用户设置", "account/watched": "主题已被 %1 关注", @@ -55,7 +55,7 @@ "account/best": "%1 发布的最佳帖子", "account/blocks": "%1 屏蔽的用户", "account/uploads": "%1 上传的文件", - "account/sessions": "Login Sessions", + "account/sessions": "已登录的会话", "confirm": "电子邮箱已确认", "maintenance.text": "%1 正在进行维护。请稍后再来。", "maintenance.messageIntro": "此外,管理员留下的消息:", diff --git a/public/language/zh-CN/search.json b/public/language/zh-CN/search.json index 3e9ecf1d9f..570cf68194 100644 --- a/public/language/zh-CN/search.json +++ b/public/language/zh-CN/search.json @@ -17,7 +17,7 @@ "at-most": "至多", "relevance": "关联", "post-time": "发帖时间", - "votes": "Votes", + "votes": "赞同数", "newer-than": "晚于", "older-than": "早于", "any-date": "任何日期", @@ -31,7 +31,7 @@ "sort-by": "排序", "last-reply-time": "最后回复时间", "topic-title": "主题标题", - "topic-votes": "Topic votes", + "topic-votes": "主题赞同数", "number-of-replies": "回帖数", "number-of-views": "查看数", "topic-start-date": "主题开始日期", diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index cc4b11ff5f..b5c3c41086 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -118,7 +118,7 @@ "sort_by": "排序", "oldest_to_newest": "从旧到新", "newest_to_oldest": "从新到旧", - "most_votes": "赞同最多", + "most_votes": "最多赞同", "most_posts": "回复最多", "stale.title": "接受建议并创建新主题?", "stale.warning": "您回复的主题已经很古老了,是否发布新主题并引用此主题的内容?", diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index bb3da924a2..938bd7b6d0 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -25,7 +25,7 @@ "profile_views": "资料浏览", "reputation": "声望", "bookmarks": "书签", - "watched_categories": "Watched categories", + "watched_categories": "已关注的版块", "watched": "已关注", "ignored": "忽略", "followers": "粉丝", @@ -84,7 +84,6 @@ "digest_daily": "每天", "digest_weekly": "每周", "digest_monthly": "每月", - "settings-require-reload": "某些设置变更需要刷新页面。点击这里刷新页面。", "has_no_follower": "此用户还没有粉丝 :(", "follows_no_one": "此用户尚未关注任何人 :(", "has_no_posts": "此用户从未发言。", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "在新标签打开外部链接", "enable_topic_searching": "启用主题内搜索", "topic_search_help": "如果启用此项,主题内搜索会替代浏览器默认的页面搜索,您将可以在整个主题内搜索,而不仅仅只搜索页面上展现的内容。", - "delay_image_loading": "延迟图片加载", - "image_load_delay_help": "启用后,帖子中的图片仅在用户滚动到图片所在位置时加载", "scroll_to_my_post": "在提交回复之后显示新回复", "follow_topics_you_reply_to": "关注您回复过的主题", "follow_topics_you_create": "关注您创建的主题", diff --git a/public/language/zh-TW/admin/advanced/database.json b/public/language/zh-TW/admin/advanced/database.json index 85b4805eac..546e6c8ffa 100644 --- a/public/language/zh-TW/admin/advanced/database.json +++ b/public/language/zh-TW/admin/advanced/database.json @@ -18,10 +18,16 @@ "mongo.resident-memory": "常駐記憶體", "mongo.virtual-memory": "虛擬記憶體", "mongo.mapped-memory": "映射記憶體", + "mongo.bytes-in": "Bytes In", + "mongo.bytes-out": "Bytes Out", + "mongo.num-requests": "Number of Requests", "mongo.raw-info": "MongoDB 原始資訊", "redis": "Redis", "redis.version": "Redis 版本", + "redis.keys": "Keys", + "redis.expires": "Expires", + "redis.avg-ttl": "Average TTL", "redis.connected-clients": "已連接的用戶端", "redis.connected-slaves": "已連接的從屬端", "redis.blocked-clients": "已阻擋的用戶端", @@ -30,6 +36,11 @@ "redis.total-connections-recieved": "已接收的連線數量", "redis.total-commands-processed": "已處裡的命令數量", "redis.iops": "每秒操作數量", + "redis.iinput": "Instantaneous Input Per Second", + "redis.ioutput": "Instantaneous Output Per Second", + "redis.total-input": "Total Input", + "redis.total-output": "Total Ouput", + "redis.keyspace-hits": "鍵空間命中次數", "redis.keyspace-misses": "鍵空間未命中次數", "redis.raw-info": "Redis 原始資料", diff --git a/public/language/zh-TW/admin/appearance/skins.json b/public/language/zh-TW/admin/appearance/skins.json index 4db6fbdd8a..6a50dd6f17 100644 --- a/public/language/zh-TW/admin/appearance/skins.json +++ b/public/language/zh-TW/admin/appearance/skins.json @@ -1,9 +1,9 @@ { - "loading": "Loading Skins...", - "homepage": "Homepage", - "select-skin": "Select Skin", - "current-skin": "Current Skin", - "skin-updated": "Skin Updated", - "applied-success": "%1 skin was succesfully applied", - "revert-success": "Skin reverted to base colours" + "loading": "正在載入外觀...", + "homepage": "首頁", + "select-skin": "選擇外觀", + "current-skin": "正在使用的外觀", + "skin-updated": "外觀已上傳", + "applied-success": "%1 個外觀已套用", + "revert-success": "外觀已恢復" } \ No newline at end of file diff --git a/public/language/zh-TW/admin/manage/uploads.json b/public/language/zh-TW/admin/manage/uploads.json new file mode 100644 index 0000000000..21bc8201fc --- /dev/null +++ b/public/language/zh-TW/admin/manage/uploads.json @@ -0,0 +1,9 @@ +{ + "upload-file": "Upload File", + "filename": "Filename", + "usage": "Post Usage", + "orphaned": "Orphaned", + "size/filecount": "Size / Filecount", + "confirm-delete": "Do you really want to delete this file?", + "filecount": "%1 files" +} \ No newline at end of file diff --git a/public/language/zh-TW/email.json b/public/language/zh-TW/email.json index 437044ec5e..295725d575 100644 --- a/public/language/zh-TW/email.json +++ b/public/language/zh-TW/email.json @@ -1,5 +1,6 @@ { - "password-reset-requested": "已要求重設密碼 - %1!", + "test-email.subject": "Test Email", + "password-reset-requested": "Password Reset Requested!", "welcome-to": "歡迎來到 %1", "invite": "邀請來自 %1", "greeting_no_name": "你好", diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json index f6a0511ee2..77bfc7f1ee 100644 --- a/public/language/zh-TW/error.json +++ b/public/language/zh-TW/error.json @@ -120,7 +120,7 @@ "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting", "chat-deleted-already": "This chat message has already been deleted.", - "chat-restored'already": "This chat message has already been restored.", + "chat-restored-already": "This chat message has already been restored.", "already-voting-for-this-post": "你已經對這個張貼投過票了", "reputation-system-disabled": "信譽系統已停用。", "downvoting-disabled": "反向投票已停用", @@ -153,5 +153,8 @@ "cant-move-to-same-topic": "Can't move post to same topic!", "cannot-block-self": "You cannot block yourself!", "cannot-block-privileged": "您無法封鎖管理者或討論區管理員", + "cannot-block-guest": "Guest are not able to block other users", + "already-blocked": "This user is already blocked", + "already-unblocked": "This user is already unblocked", "no-connection": "There seems to be a problem with your internet connection" } \ No newline at end of file diff --git a/public/language/zh-TW/notifications.json b/public/language/zh-TW/notifications.json index 17f11f3358..4d91597886 100644 --- a/public/language/zh-TW/notifications.json +++ b/public/language/zh-TW/notifications.json @@ -8,8 +8,7 @@ "outgoing_link_message": "你現在離開了 %1", "continue_to": "繼續前往 %1", "return_to": "返回 %1", - "new_notification": "新訊息通知", - "new_notification_from": "You have a new Notification from %1", + "new_notification": "You have a new notification", "you_have_unread_notifications": "你有未讀的通知。", "all": "All", "topics": "Topics", diff --git a/public/language/zh-TW/user.json b/public/language/zh-TW/user.json index 8d42a03eb0..3a780c93a8 100644 --- a/public/language/zh-TW/user.json +++ b/public/language/zh-TW/user.json @@ -84,7 +84,6 @@ "digest_daily": "每日", "digest_weekly": "每週", "digest_monthly": "每月", - "settings-require-reload": "有些設定的更動是需要重新整理。點擊這裡來重新整理頁面。", "has_no_follower": "該使用者還沒有被任何人關注。", "follows_no_one": "該使用者還沒有關注過任何人。", "has_no_posts": "使用者還沒有發表任何張貼", @@ -119,8 +118,6 @@ "open_links_in_new_tab": "在新的資料標籤裡打開外部的連結", "enable_topic_searching": "啟用在主題中的搜尋", "topic_search_help": "如果啟用的話,在主題中搜尋將會覆蓋瀏覽器預設網頁搜尋的行為,這會允許你搜尋整篇的主題,而不只是顯示出來在畫面上的而已。", - "delay_image_loading": "延遲圖片載入", - "image_load_delay_help": "如果啟用的話,在主題中的圖片直到它們被捲到到可視範圍時才會載入。", "scroll_to_my_post": "在張貼回覆後,顯示新的張貼", "follow_topics_you_reply_to": "關注你有回覆的主題", "follow_topics_you_create": "關注你建立的主題", diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index 59eb225e5f..16dff9d563 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -235,13 +235,14 @@ body { margin: 35px 5px 0 5px; } } - -.category-dropdown-menu { - max-height: 600px; - overflow-y: auto; +[component="category-selector"] { .fa-stack { border-radius: 50%; } + .category-dropdown-menu { + max-height: 600px; + overflow-y: auto; + } } .table-reordering { diff --git a/public/less/admin/manage/admins-mods.less b/public/less/admin/manage/admins-mods.less index 0bf7ac46cd..a8efbf00a1 100644 --- a/public/less/admin/manage/admins-mods.less +++ b/public/less/admin/manage/admins-mods.less @@ -1,7 +1,10 @@ .admins-mods { .user-card { - margin-right: 10px; - padding: 2px; + background: #eeeeee; + border-radius: 4px; + margin: 5px; + padding: 5px; + height: 35px; } .remove-user-icon { diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index db02c2e551..ee2432fa5c 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -99,9 +99,9 @@ } else { var matches = url.match(/admin\/(.+?)\/(.+?)$/); mainTitle = '[[admin/menu:' + matches[1] + '/' + matches[2] + ']]'; - pageTitle = '[[admin/menu:section-' - + (matches[1] === 'development' ? 'advanced' : matches[1]) - + ']]' + (matches[2] ? (' > ' + mainTitle) : ''); + pageTitle = '[[admin/menu:section-' + + (matches[1] === 'development' ? 'advanced' : matches[1]) + + ']]' + (matches[2] ? (' > ' + mainTitle) : ''); if (matches[2] === 'settings') { mainTitle = translator.compile('admin/menu:settings.page-title', mainTitle); } diff --git a/public/src/admin/general/dashboard.js b/public/src/admin/general/dashboard.js index 5a2f584dc0..8009d7c7f1 100644 --- a/public/src/admin/general/dashboard.js +++ b/public/src/admin/general/dashboard.js @@ -62,22 +62,22 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' graphData.rooms = data; - var html = '
' - + '' + data.onlineRegisteredCount + '' - + '
[[admin/general/dashboard:active-users.users]]
' - + '
' - + '
' - + '' + data.onlineGuestCount + '' - + '
[[admin/general/dashboard:active-users.guests]]
' - + '
' - + '
' - + '' + (data.onlineRegisteredCount + data.onlineGuestCount) + '' - + '
[[admin/general/dashboard:active-users.total]]
' - + '
' - + '
' - + '' + data.socketCount + '' - + '
[[admin/general/dashboard:active-users.connections]]
' - + '
'; + var html = '
' + + '' + data.onlineRegisteredCount + '' + + '
[[admin/general/dashboard:active-users.users]]
' + + '
' + + '
' + + '' + data.onlineGuestCount + '' + + '
[[admin/general/dashboard:active-users.guests]]
' + + '
' + + '
' + + '' + (data.onlineRegisteredCount + data.onlineGuestCount) + '' + + '
[[admin/general/dashboard:active-users.total]]
' + + '
' + + '
' + + '' + data.socketCount + '' + + '
[[admin/general/dashboard:active-users.connections]]
' + + '
'; updateRegisteredGraph(data.onlineRegisteredCount, data.onlineGuestCount); updatePresenceGraph(data.users); @@ -513,10 +513,10 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator', 'benchpress' topics.forEach(function (topic, i) { var label = topic.count === '0' ? topic.title : ' ' + topic.title + ''; - html += '
  • ' - + '
    ' - + ' (' + topic.count + ') ' + label + '' - + '
  • '; + html += '
  • ' + + '
    ' + + ' (' + topic.count + ') ' + label + '' + + '
  • '; }); legend.translateHtml(html); } diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js index 76504eec6f..409e5fd02f 100644 --- a/public/src/admin/manage/categories.js +++ b/public/src/admin/manage/categories.js @@ -1,7 +1,11 @@ 'use strict'; - -define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-serializeobject.min', 'translator', 'benchpress'], function (serialize, translator, Benchpress) { +define('admin/manage/categories', [ + 'vendor/jquery/serializeObject/jquery.ba-serializeobject.min', + 'translator', + 'benchpress', + 'categorySelector', +], function (serialize, translator, Benchpress, categorySelector) { var Categories = {}; var newCategoryId = -1; var sortables; @@ -54,11 +58,16 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri }; Categories.throwCreateModal = function () { - socket.emit('admin.categories.getNames', {}, function (err, categories) { + socket.emit('categories.getSelectCategories', {}, function (err, categories) { if (err) { return app.alertError(err.message); } + categories.unshift({ + cid: 0, + name: '[[admin/manage/categories:parent-category-none]]', + icon: 'fa-none', + }); Benchpress.parse('admin/partials/categories/create', { categories: categories, }, function (html) { @@ -74,11 +83,15 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri }, }); + var parentSelector = categorySelector.init(modal.find('#parentCidGroup [component="category-selector"]')); + var cloneFromSelector = categorySelector.init(modal.find('#cloneFromCidGroup [component="category-selector"]')); function submit() { var formData = modal.find('form').serializeObject(); formData.description = ''; formData.icon = 'fa-comments'; formData.uid = app.user.uid; + formData.parentCid = parentSelector.getSelectedCid(); + formData.cloneFromCid = cloneFromSelector.getSelectedCid(); Categories.create(formData); modal.modal('hide'); @@ -87,11 +100,11 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri $('#cloneChildren').on('change', function () { var check = $(this); - var parentSelect = $('#parentCid'); + var parentSelect = modal.find('#parentCidGroup [component="category-selector"] .dropdown-toggle'); if (check.prop('checked')) { parentSelect.attr('disabled', 'disabled'); - parentSelect.val(''); + parentSelector.selectCategory(0); } else { parentSelect.removeAttr('disabled'); } diff --git a/public/src/admin/manage/privileges.js b/public/src/admin/manage/privileges.js index 2413729555..ef575e9fbd 100644 --- a/public/src/admin/manage/privileges.js +++ b/public/src/admin/manage/privileges.js @@ -13,11 +13,10 @@ define('admin/manage/privileges', [ Privileges.init = function () { cid = ajaxify.data.cid || 0; - $('ul[for="category-selector"]').on('click', 'li', function () { - var val = this.getAttribute('data-cid'); - ajaxify.go('admin/manage/privileges/' + (val === 'global' ? '' : val)); + categorySelector.init($('[component="category-selector"]'), function (category) { + var cid = parseInt(category.cid, 10); + ajaxify.go('admin/manage/privileges/' + (cid || '')); }); - Privileges.setupPrivilegeTable(); }; @@ -179,7 +178,7 @@ define('admin/manage/privileges', [ }; Privileges.copyPrivilegesFromCategory = function () { - categorySelector.modal(function (fromCid) { + categorySelector.modal(ajaxify.data.categories.slice(1), function (fromCid) { socket.emit('admin.categories.copyPrivilegesFrom', { toCid: cid, fromCid: fromCid }, function (err) { if (err) { return app.alertError(err.message); diff --git a/public/src/admin/modules/search.js b/public/src/admin/modules/search.js index 763a7fe80b..77aafe7bfd 100644 --- a/public/src/admin/modules/search.js +++ b/public/src/admin/modules/search.js @@ -32,15 +32,15 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) { '$1$2$3' ); - return ''; + return ''; }).join(''); return html; } diff --git a/public/src/app.js b/public/src/app.js index d87e3923cf..e2783f17b2 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -112,7 +112,13 @@ app.cacheBuster = null; * config (obj) * next (string) */ - require(['benchpress', 'translator', 'forum/header/notifications', 'forum/header/chat'], function (Benchpress, translator, Notifications, Chat) { + require([ + 'benchpress', + 'translator', + 'forum/unread', + 'forum/header/notifications', + 'forum/header/chat', + ], function (Benchpress, translator, Unread, Notifications, Chat) { app.user = data.header.user; data.header.config = data.config; config = data.config; @@ -136,10 +142,11 @@ app.cacheBuster = null; Object.values(toRender).forEach(function (element, idx) { element.html(html[idx]); }); - + Unread.initUnreadTopics(); Notifications.prepareDOM(); Chat.prepareDOM(); - callback(); + app.reskin(data.config.bootswatchSkin); + translator.switchTimeagoLanguage(callback); }); }); }; @@ -163,6 +170,13 @@ app.cacheBuster = null; 'x-csrf-token': config.csrf_token, }, success: function (data) { + // ACP logouts go to frontend via page load, not ajaxify + if (ajaxify.data.template.name.startsWith('admin/')) { + $(window).trigger('action:app.loggedOut', data); + window.location.href = config.relative_path + (data.next || '/'); + return; + } + app.updateHeader(data, function () { // Overwrite in hook (below) to redirect elsewhere data.next = data.next || undefined; @@ -734,4 +748,23 @@ app.cacheBuster = null; }); }); }; + + app.reskin = function (skinName) { + var clientEl = Array.prototype.filter.call(document.querySelectorAll('link[rel="stylesheet"]'), function (el) { + return el.href.indexOf(config.relative_path + '/assets/client') !== -1; + })[0] || null; + if (!clientEl) { + return; + } + // Update client.css link element to point to selected skin variant + clientEl.href = config.relative_path + '/assets/client' + (skinName ? '-' + skinName : '') + '.css'; + + var currentSkinClassName = $('body').attr('class').split(/\s+/).filter(function (className) { + return className.startsWith('skin-'); + }); + $('body').removeClass(currentSkinClassName.join(' ')); + if (skinName) { + $('body').addClass('skin-' + skinName); + } + }; }()); diff --git a/public/src/client/account/settings.js b/public/src/client/account/settings.js index 9613083940..62358760d5 100644 --- a/public/src/client/account/settings.js +++ b/public/src/client/account/settings.js @@ -4,9 +4,10 @@ define('forum/account/settings', ['forum/account/header', 'components', 'sounds'], function (header, components, sounds) { var AccountSettings = {}; + // If page skin is changed but not saved, switch the skin back $(window).on('action:ajaxify.start', function () { if (ajaxify.data.template.name === 'account/settings' && $('#bootswatchSkin').val() !== config.bootswatchSkin) { - changePageSkin(config.bootswatchSkin); + app.reskin(config.bootswatchSkin); } }); @@ -30,7 +31,7 @@ define('forum/account/settings', ['forum/account/header', 'components', 'sounds' }); $('#bootswatchSkin').on('change', function () { - changePageSkin($(this).val()); + app.reskin($(this).val()); }); $('[data-property="homePageRoute"]').on('change', toggleCustomRoute); @@ -48,23 +49,6 @@ define('forum/account/settings', ['forum/account/header', 'components', 'sounds' components.get('user/sessions').find('.timeago').timeago(); }; - function changePageSkin(skinName) { - var clientEl = Array.prototype.filter.call(document.querySelectorAll('link[rel="stylesheet"]'), function (el) { - return el.href.indexOf(config.relative_path + '/assets/client') !== -1; - })[0] || null; - - // Update client.css link element to point to selected skin variant - clientEl.href = config.relative_path + '/assets/client' + (skinName ? '-' + skinName : '') + '.css'; - - var currentSkinClassName = $('body').attr('class').split(/\s+/).filter(function (className) { - return className.startsWith('skin-'); - }); - $('body').removeClass(currentSkinClassName.join(' ')); - if (skinName) { - $('body').addClass('skin-' + skinName); - } - } - function loadSettings() { var settings = {}; @@ -112,15 +96,7 @@ define('forum/account/settings', ['forum/account/header', 'components', 'sounds' sounds.loadMap(); if (requireReload && parseInt(app.user.uid, 10) === parseInt(ajaxify.data.theirid, 10)) { - app.alert({ - id: 'setting-change', - message: '[[user:settings-require-reload]]', - type: 'warning', - timeout: 5000, - clickfn: function () { - ajaxify.refresh(); - }, - }); + ajaxify.refresh(); } }); } diff --git a/public/src/client/chats/messages.js b/public/src/client/chats/messages.js index 6c52b1388e..454e038d2c 100644 --- a/public/src/client/chats/messages.js +++ b/public/src/client/chats/messages.js @@ -8,7 +8,7 @@ define('forum/chats/messages', ['components', 'sounds', 'translator', 'benchpres var msg = inputEl.val(); var mid = inputEl.attr('data-mid'); - if (!msg.length) { + if (!msg.trim().length) { return; } @@ -70,8 +70,8 @@ define('forum/chats/messages', ['components', 'sounds', 'translator', 'benchpres var lastSpeaker = parseInt(chatContentEl.find('.chat-message').last().attr('data-uid'), 10); var lasttimestamp = parseInt(chatContentEl.find('.chat-message').last().attr('data-timestamp'), 10); if (!Array.isArray(data)) { - data.newSet = lastSpeaker !== parseInt(data.fromuid, 10) - || parseInt(data.timestamp, 10) > parseInt(lasttimestamp, 10) + (1000 * 60 * 3); + data.newSet = lastSpeaker !== parseInt(data.fromuid, 10) || + parseInt(data.timestamp, 10) > parseInt(lasttimestamp, 10) + (1000 * 60 * 3); } messages.parseMessage(data, function (html) { diff --git a/public/src/client/chats/search.js b/public/src/client/chats/search.js index 61a0fb8673..e40551ed05 100644 --- a/public/src/client/chats/search.js +++ b/public/src/client/chats/search.js @@ -58,10 +58,10 @@ define('forum/chats/search', ['components'], function (components) { function displayUser(chatsListEl, userObj) { function createUserImage() { - return (userObj.picture - ? '' - : '
    ' + userObj['icon:text'] + '
    ') - + ' ' + userObj.username; + return (userObj.picture ? + '' : + '
    ' + userObj['icon:text'] + '
    ') + + ' ' + userObj.username; } var chatEl = $('
  • ') diff --git a/public/src/client/footer.js b/public/src/client/footer.js index 73c6a775f2..7f016be5a7 100644 --- a/public/src/client/footer.js +++ b/public/src/client/footer.js @@ -4,101 +4,21 @@ define('forum/footer', [ 'components', 'translator', + 'forum/unread', 'forum/header/notifications', 'forum/header/chat', -], function (components, translator, Notifications, Chat) { +], function (components, translator, Unread, Notifications, Chat) { Notifications.prepareDOM(); Chat.prepareDOM(); translator.prepareDOM(); - function updateUnreadTopicCount(url, count) { - if (!utils.isNumber(count)) { - return; - } - $('a[href="' + config.relative_path + url + '"].navigation-link i') - .toggleClass('unread-count', count > 0) - .attr('data-content', count > 99 ? '99+' : count); - } - - function updateUnreadChatCount(count) { + socket.on('event:unread.updateChatCount', function (count) { components.get('chat/icon') .toggleClass('unread-count', count > 0) .attr('data-content', count > 99 ? '99+' : count); - } - - function initUnreadTopics() { - var unreadTopics = {}; - - function onNewPost(data) { - if (data && data.posts && data.posts.length) { - var post = data.posts[0]; - - if (parseInt(post.uid, 10) !== parseInt(app.user.uid, 10) && !unreadTopics[post.topic.tid]) { - increaseUnreadCount(data); - markTopicsUnread(post.topic.tid); - unreadTopics[post.topic.tid] = true; - } - } - } - - function increaseUnreadCount(data) { - var post = data.posts[0]; - - var unreadTopicCount = parseInt($('a[href="' + config.relative_path + '/unread"].navigation-link i').attr('data-content'), 10) + 1; - updateUnreadTopicCount('/unread', unreadTopicCount); - - var isNewTopic = post.isMain && parseInt(post.uid, 10) !== parseInt(app.user.uid, 10); - if (isNewTopic) { - var unreadNewTopicCount = parseInt($('a[href="' + config.relative_path + '/unread?filter=new"].navigation-link i').attr('data-content'), 10) + 1; - updateUnreadTopicCount('/unread?filter=new', unreadNewTopicCount); - } - - var isUnreplied = parseInt(post.topic.postcount, 10) <= 1; - if (isUnreplied) { - var unreadUnrepliedTopicCount = parseInt($('a[href="' + config.relative_path + '/unread?filter=unreplied"].navigation-link i').attr('data-content'), 10) + 1; - updateUnreadTopicCount('/unread?filter=unreplied', unreadUnrepliedTopicCount); - } - if ($('a[href="' + config.relative_path + '/unread?filter=watched"].navigation-link i').length) { - socket.emit('topics.isFollowed', post.topic.tid, function (err, isFollowed) { - if (err) { - return app.alertError(err.message); - } - if (isFollowed) { - var unreadWatchedTopicCount = parseInt($('a[href="' + config.relative_path + '/unread?filter=watched"].navigation-link i').attr('data-content'), 10) + 1; - updateUnreadTopicCount('/unread?filter=watched', unreadWatchedTopicCount); - } - }); - } - } - - function markTopicsUnread(tid) { - $('[data-tid="' + tid + '"]').addClass('unread'); - } - - $(window).on('action:ajaxify.end', function (ev, data) { - if (data.url) { - var tid = data.url.match(/^topic\/(\d+)/); - - if (tid && tid[1]) { - delete unreadTopics[tid[1]]; - } - } - }); - - socket.on('event:new_post', onNewPost); - } - - function updateUnreadCounters(data) { - updateUnreadTopicCount('/unread', data.unreadTopicCount); - updateUnreadTopicCount('/unread?filter=new', data.unreadNewTopicCount); - updateUnreadTopicCount('/unread?filter=watched', data.unreadWatchedTopicCount); - updateUnreadTopicCount('/unread?filter=unreplied', data.unreadUnrepliedTopicCount); - } - - socket.on('event:unread.updateCount', updateUnreadCounters); - socket.on('event:unread.updateChatCount', updateUnreadChatCount); + }); if (app.user.uid > 0) { - initUnreadTopics(); + Unread.initUnreadTopics(); } }); diff --git a/public/src/client/topic/images.js b/public/src/client/topic/images.js index cb8dd0fcfb..3be0303e43 100644 --- a/public/src/client/topic/images.js +++ b/public/src/client/topic/images.js @@ -23,9 +23,9 @@ define('forum/topic/images', [], function () { var altExt = altFilename.split('.').slice(1).pop(); if (!$this.parent().is('a')) { - $this.wrap(''); + $this.wrap(''); } }); }; diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index b653edb0bc..ffbc0a5ace 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -70,8 +70,8 @@ define('forum/topic/posts', [ ajaxify.data.pagination.pageCount = Math.max(1, Math.ceil(posts[0].topic.postcount / config.postsPerPage)); var direction = config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes' ? 1 : -1; - var isPostVisible = (ajaxify.data.pagination.currentPage === ajaxify.data.pagination.pageCount && direction === 1) - || (ajaxify.data.pagination.currentPage === 1 && direction === -1); + var isPostVisible = (ajaxify.data.pagination.currentPage === ajaxify.data.pagination.pageCount && direction === 1) || + (ajaxify.data.pagination.currentPage === 1 && direction === -1); if (isPostVisible) { createNewPosts(data, components.get('post').not('[data-index=0]'), direction, scrollToPost); @@ -250,6 +250,7 @@ define('forum/topic/posts', [ }; Posts.onTopicPageLoad = function (posts) { + images.wrapImagesInLinks(posts); Posts.showBottomPostBar(); posts.find('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive'); addBlockquoteEllipses(posts.find('[component="post/content"] > blockquote > blockquote')); diff --git a/public/src/client/unread.js b/public/src/client/unread.js index 09278b88de..9df088a16f 100644 --- a/public/src/client/unread.js +++ b/public/src/client/unread.js @@ -10,6 +10,8 @@ define('forum/unread', ['topicSelect', 'components', 'topicList'], function (top topicList.init('unread'); topicSelect.init(); + updateUnreadTopicCount('/' + ajaxify.data.selectedFilter.url, ajaxify.data.topicCount); + $('#markSelectedRead').on('click', function () { var tids = topicSelect.getSelectedTids(); if (!tids.length) { @@ -77,6 +79,81 @@ define('forum/unread', ['topicSelect', 'components', 'topicList'], function (top } } + function updateUnreadTopicCount(url, count) { + if (!utils.isNumber(count)) { + return; + } + + $('a[href="' + config.relative_path + url + '"].navigation-link i') + .toggleClass('unread-count', count > 0) + .attr('data-content', count > 99 ? '99+' : count); + } + + Unread.initUnreadTopics = function () { + var unreadTopics = {}; + + function onNewPost(data) { + if (data && data.posts && data.posts.length) { + var post = data.posts[0]; + + if (parseInt(post.uid, 10) !== parseInt(app.user.uid, 10) && !unreadTopics[post.topic.tid]) { + increaseUnreadCount(post); + markTopicsUnread(post.topic.tid); + unreadTopics[post.topic.tid] = true; + } + } + } + + function increaseUnreadCount(post) { + var unreadTopicCount = parseInt($('a[href="' + config.relative_path + '/unread"].navigation-link i').attr('data-content'), 10) + 1; + updateUnreadTopicCount('/unread', unreadTopicCount); + + var isNewTopic = post.isMain && parseInt(post.uid, 10) !== parseInt(app.user.uid, 10); + if (isNewTopic) { + var unreadNewTopicCount = parseInt($('a[href="' + config.relative_path + '/unread?filter=new"].navigation-link i').attr('data-content'), 10) + 1; + updateUnreadTopicCount('/unread?filter=new', unreadNewTopicCount); + } + + var isUnreplied = parseInt(post.topic.postcount, 10) <= 1; + if (isUnreplied) { + var unreadUnrepliedTopicCount = parseInt($('a[href="' + config.relative_path + '/unread?filter=unreplied"].navigation-link i').attr('data-content'), 10) + 1; + updateUnreadTopicCount('/unread?filter=unreplied', unreadUnrepliedTopicCount); + } + if ($('a[href="' + config.relative_path + '/unread?filter=watched"].navigation-link i').length) { + socket.emit('topics.isFollowed', post.topic.tid, function (err, isFollowed) { + if (err) { + return app.alertError(err.message); + } + if (isFollowed) { + var unreadWatchedTopicCount = parseInt($('a[href="' + config.relative_path + '/unread?filter=watched"].navigation-link i').attr('data-content'), 10) + 1; + updateUnreadTopicCount('/unread?filter=watched', unreadWatchedTopicCount); + } + }); + } + } + + function markTopicsUnread(tid) { + $('[data-tid="' + tid + '"]').addClass('unread'); + } + + $(window).on('action:ajaxify.end', function () { + if (ajaxify.data.template.topic) { + delete unreadTopics[ajaxify.data.tid]; + } + }); + socket.removeListener('event:new_post', onNewPost); + socket.on('event:new_post', onNewPost); + + socket.removeListener('event:unread.updateCount', updateUnreadCounters); + socket.on('event:unread.updateCount', updateUnreadCounters); + }; + + function updateUnreadCounters(data) { + updateUnreadTopicCount('/unread', data.unreadTopicCount); + updateUnreadTopicCount('/unread?filter=new', data.unreadNewTopicCount); + updateUnreadTopicCount('/unread?filter=watched', data.unreadWatchedTopicCount); + updateUnreadTopicCount('/unread?filter=unreplied', data.unreadUnrepliedTopicCount); + } return Unread; }); diff --git a/public/src/modules/categorySelector.js b/public/src/modules/categorySelector.js index f9117630ba..ac8377a71d 100644 --- a/public/src/modules/categorySelector.js +++ b/public/src/modules/categorySelector.js @@ -2,32 +2,45 @@ define('categorySelector', ['benchpress', 'translator', 'categorySearch'], function (Benchpress, translator, categorySearch) { var categorySelector = {}; - var selectedCategory; - var el; - categorySelector.init = function (_el, callback) { + + categorySelector.init = function (el, callback) { callback = callback || function () {}; - el = _el; - selectedCategory = null; + var selector = { + el: el, + selectedCategory: null, + }; + el.on('click', '[data-cid]', function () { var categoryEl = $(this); - categorySelector.selectCategory(categoryEl.attr('data-cid')); - callback(selectedCategory); + if (categoryEl.hasClass('disabled')) { + return false; + } + selector.selectCategory(categoryEl.attr('data-cid')); + callback(selector.selectedCategory); }); categorySearch.init(el); - }; - categorySelector.getSelectedCategory = function () { - return selectedCategory; - }; + selector.selectCategory = function (cid) { + var categoryEl = selector.el.find('[data-cid="' + cid + '"]'); + selector.selectedCategory = { + cid: cid, + name: categoryEl.attr('data-name'), + }; - categorySelector.selectCategory = function (cid) { - var categoryEl = el.find('[data-cid="' + cid + '"]'); - selectedCategory = { - cid: cid, - name: categoryEl.attr('data-name'), + if (categoryEl.length) { + selector.el.find('[component="category-selector-selected"]').html(categoryEl.find('[component="category-markup"]').html()); + } else { + selector.el.find('[component="category-selector-selected"]').translateHtml('[[topic:thread_tools.select_category]]'); + } }; - el.find('[component="category-selector-selected"]').html(categoryEl.find('[component="category-markup"]').html()); + selector.getSelectedCategory = function () { + return selector.selectedCategory; + }; + selector.getSelectedCid = function () { + return selector.selectedCategory ? selector.selectedCategory.cid : 0; + }; + return selector; }; categorySelector.modal = function (categories, callback) { @@ -50,12 +63,11 @@ define('categorySelector', ['benchpress', 'translator', 'categorySearch'], funct }, }, }); - categorySelector.init(modal.find('[component="category-selector"]')); + var selector = categorySelector.init(modal.find('[component="category-selector"]')); function submit(ev) { ev.preventDefault(); - var selectedCategory = categorySelector.getSelectedCategory(); - if (selectedCategory) { - callback(selectedCategory.cid); + if (selector.selectedCategory) { + callback(selector.selectedCategory.cid); modal.modal('hide'); } return false; diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index ad5862981d..210164b956 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -118,11 +118,11 @@ category.children.forEach(function (child) { if (child && !child.isSection) { var link = child.link ? child.link : (relative_path + '/category/' + child.slug); - html += '' - + '
    ' - + '' - + '
    ' - + '
    ' + child.name + ''; + html += '' + + '
    ' + + '' + + '
    ' + + '' + child.name + '
    '; } }); html = html ? ('' + html + '') : html; diff --git a/public/src/modules/pictureCropper.js b/public/src/modules/pictureCropper.js index 0d8fe3a3ca..25bfd6794b 100644 --- a/public/src/modules/pictureCropper.js +++ b/public/src/modules/pictureCropper.js @@ -1,12 +1,11 @@ 'use strict'; - -define('pictureCropper', ['translator', 'cropper', 'benchpress'], function (translator, Cropper, Benchpress) { +define('pictureCropper', ['cropper'], function (Cropper) { var module = {}; module.show = function (data, callback) { var fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false; - parseModal({ + app.parseAndTranslate('partials/modals/upload_file_modal', { showHelp: data.hasOwnProperty('showHelp') && data.showHelp !== undefined ? data.showHelp : true, fileSize: fileSize, title: data.title || '[[global:upload_file]]', @@ -14,8 +13,6 @@ define('pictureCropper', ['translator', 'cropper', 'benchpress'], function (tran button: data.button || '[[global:upload]]', accept: data.accept ? data.accept.replace(/,/g, ', ') : '', }, function (uploadModal) { - uploadModal = $(uploadModal); - uploadModal.modal('show'); uploadModal.on('hidden.bs.modal', function () { uploadModal.remove(); @@ -32,121 +29,132 @@ define('pictureCropper', ['translator', 'cropper', 'benchpress'], function (tran module.handleImageCrop = function (data, callback) { $('#crop-picture-modal').remove(); - Benchpress.parse('modals/crop_picture', { + app.parseAndTranslate('modals/crop_picture', { url: utils.escapeHTML(data.url), - }, function (cropperHtml) { - translator.translate(cropperHtml, function (translated) { - var cropperModal = $(translated); - cropperModal.modal({ - backdrop: 'static', - }).modal('show'); + }, function (cropperModal) { + cropperModal.modal({ + backdrop: 'static', + }).modal('hide'); - // Set cropper image max-height based on viewport - var cropBoxHeight = parseInt($(window).height() / 2, 10); - var img = document.getElementById('cropped-image'); - $(img).css('max-height', cropBoxHeight); + // Set cropper image max-height based on viewport + var cropBoxHeight = parseInt($(window).height() / 2, 10); + var img = document.getElementById('cropped-image'); + $(img).css('max-height', cropBoxHeight); - var cropperTool = new Cropper(img, { - aspectRatio: data.aspectRatio, - autoCropArea: 1, - viewMode: 1, - checkCrossOrigin: false, - cropmove: function () { - if (data.restrictImageDimension) { - if (cropperTool.cropBoxData.width > data.imageDimension) { - cropperTool.setCropBoxData({ - width: data.imageDimension, - }); - } - if (cropperTool.cropBoxData.height > data.imageDimension) { - cropperTool.setCropBoxData({ - height: data.imageDimension, - }); - } - } - }, - ready: function () { - if (data.restrictImageDimension) { - var origDimension = (img.width < img.height) ? img.width : img.height; - var dimension = (origDimension > data.imageDimension) ? data.imageDimension : origDimension; + var cropperTool = new Cropper(img, { + aspectRatio: data.aspectRatio, + autoCropArea: 1, + viewMode: 1, + checkCrossOrigin: false, + cropmove: function () { + if (data.restrictImageDimension) { + if (cropperTool.cropBoxData.width > data.imageDimension) { cropperTool.setCropBoxData({ - width: dimension, - height: dimension, + width: data.imageDimension, }); } + if (cropperTool.cropBoxData.height > data.imageDimension) { + cropperTool.setCropBoxData({ + height: data.imageDimension, + }); + } + } + }, + ready: function () { + if (!checkCORS(cropperTool, data)) { + return; + } - cropperModal.find('.rotate').on('click', function () { - var degrees = this.getAttribute('data-degrees'); - cropperTool.rotate(degrees); + cropperModal.modal('show'); + + if (data.restrictImageDimension) { + var origDimension = (img.width < img.height) ? img.width : img.height; + var dimension = (origDimension > data.imageDimension) ? data.imageDimension : origDimension; + cropperTool.setCropBoxData({ + width: dimension, + height: dimension, }); + } - cropperModal.find('.flip').on('click', function () { - var option = this.getAttribute('data-option'); - var method = this.getAttribute('data-method'); - if (method === 'scaleX') { - cropperTool.scaleX(option); - } else { - cropperTool.scaleY(option); - } - this.setAttribute('data-option', option * -1); - }); + cropperModal.find('.rotate').on('click', function () { + var degrees = this.getAttribute('data-degrees'); + cropperTool.rotate(degrees); + }); - cropperModal.find('.reset').on('click', function () { - cropperTool.reset(); - }); + cropperModal.find('.flip').on('click', function () { + var option = this.getAttribute('data-option'); + var method = this.getAttribute('data-method'); + if (method === 'scaleX') { + cropperTool.scaleX(option); + } else { + cropperTool.scaleY(option); + } + this.setAttribute('data-option', option * -1); + }); - cropperModal.find('.crop-btn').on('click', function () { - $(this).addClass('disabled'); - var imageData; - try { - imageData = data.imageType ? cropperTool.getCroppedCanvas().toDataURL(data.imageType) : cropperTool.getCroppedCanvas().toDataURL(); - } catch (err) { - if (err.message === 'Failed to execute \'toDataURL\' on \'HTMLCanvasElement\': Tainted canvases may not be exported.') { - app.alertError('[[error:cors-error]]'); - } else { - app.alertError(err.message); - } - return; + cropperModal.find('.reset').on('click', function () { + cropperTool.reset(); + }); + + cropperModal.find('.crop-btn').on('click', function () { + $(this).addClass('disabled'); + var imageData = checkCORS(cropperTool, data); + if (!imageData) { + return; + } + + cropperModal.find('#upload-progress-bar').css('width', '100%'); + cropperModal.find('#upload-progress-box').show().removeClass('hide'); + + var socketData = {}; + socketData[data.paramName] = data.paramValue; + socketData.imageData = imageData; + + socket.emit(data.socketMethod, socketData, function (err, imageData) { + if (err) { + cropperModal.find('#upload-progress-box').hide(); + cropperModal.find('.upload-btn').removeClass('disabled'); + cropperModal.find('.crop-btn').removeClass('disabled'); + return app.alertError(err.message); } - cropperModal.find('#upload-progress-bar').css('width', '100%'); - cropperModal.find('#upload-progress-box').show().removeClass('hide'); - - var socketData = {}; - socketData[data.paramName] = data.paramValue; - socketData.imageData = imageData; - - socket.emit(data.socketMethod, socketData, function (err, imageData) { - if (err) { - cropperModal.find('#upload-progress-box').hide(); - cropperModal.find('.upload-btn').removeClass('disabled'); - cropperModal.find('.crop-btn').removeClass('disabled'); - return app.alertError(err.message); - } - - callback(imageData.url); - cropperModal.modal('hide'); - }); + callback(imageData.url); + cropperModal.modal('hide'); }); + }); - cropperModal.find('.upload-btn').on('click', function () { - $(this).addClass('disabled'); - cropperTool.destroy(); + cropperModal.find('.upload-btn').on('click', function () { + $(this).addClass('disabled'); + cropperTool.destroy(); - cropperTool = new Cropper(img, { - viewMode: 1, - autoCropArea: 1, - ready: function () { - cropperModal.find('.crop-btn').trigger('click'); - }, - }); + cropperTool = new Cropper(img, { + viewMode: 1, + autoCropArea: 1, + ready: function () { + cropperModal.find('.crop-btn').trigger('click'); + }, }); - }, - }); + }); + }, }); }); }; + function checkCORS(cropperTool, data) { + var imageData; + try { + imageData = data.imageType ? cropperTool.getCroppedCanvas().toDataURL(data.imageType) : cropperTool.getCroppedCanvas().toDataURL(); + } catch (err) { + if (err.message === 'Failed to execute \'toDataURL\' on \'HTMLCanvasElement\': Tainted canvases may not be exported.') { + app.alertError('[[error:cors-error]]'); + } else { + app.alertError(err.message); + } + return; + } + return imageData; + } + function onSubmit(data, callback) { function showAlert(type, message) { if (type === 'error') { @@ -190,11 +198,5 @@ define('pictureCropper', ['translator', 'cropper', 'benchpress'], function (tran } } - function parseModal(tplVals, callback) { - Benchpress.parse('partials/modals/upload_file_modal', tplVals, function (html) { - translator.translate(html, callback); - }); - } - return module; }); diff --git a/public/src/modules/scrollStop.js b/public/src/modules/scrollStop.js index fe410ac7e4..5e056f5fd9 100644 --- a/public/src/modules/scrollStop.js +++ b/public/src/modules/scrollStop.js @@ -19,8 +19,8 @@ define('scrollStop', function () { var elementHeight = Math.round(this.getBoundingClientRect().height); if ( - (e.originalEvent.deltaY < 0 && scrollTop === 0) // scroll up - || (e.originalEvent.deltaY > 0 && (elementHeight + scrollTop) >= scrollHeight) // scroll down + (e.originalEvent.deltaY < 0 && scrollTop === 0) || // scroll up + (e.originalEvent.deltaY > 0 && (elementHeight + scrollTop) >= scrollHeight) // scroll down ) { return false; } diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js index b577efbe0a..5a1c0d886f 100644 --- a/public/src/modules/taskbar.js +++ b/public/src/modules/taskbar.js @@ -116,11 +116,11 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator var taskbarEl = $('
  • ') .addClass(data.options.className) - .html('' - + (data.options.icon ? ' ' : '') - + (data.options.image ? ' ' : '') - + '' + title + '' - + '') + .html('' + + (data.options.icon ? ' ' : '') + + (data.options.image ? ' ' : '') + + '' + title + '' + + '') .attr({ title: title, 'data-module': data.module, diff --git a/public/src/modules/topicList.js b/public/src/modules/topicList.js index a8623f8d83..56219fec14 100644 --- a/public/src/modules/topicList.js +++ b/public/src/modules/topicList.js @@ -20,12 +20,15 @@ define('topicList', [ var newPostCount = 0; var loadTopicsCallback; + var topicListEl; $(window).on('action:ajaxify.start', function () { TopicList.removeListeners(); }); TopicList.init = function (template, cb) { + topicListEl = findTopicListElement(); + templateName = template; loadTopicsCallback = cb || loadTopicsAfter; @@ -46,7 +49,7 @@ define('topicList', [ }); }); - if ($('body').height() <= $(window).height() && $('[component="category"]').children().length >= 20) { + if ($('body').height() <= $(window).height() && topicListEl.children().length >= 20) { $('#load-more-btn').show(); } @@ -57,6 +60,12 @@ define('topicList', [ $(window).trigger('action:topics.loaded', { topics: ajaxify.data.topics }); }; + function findTopicListElement() { + return $('[component="category"]').filter(function (i, e) { + return !$(e).parents('[widget-area]').length; + }); + } + TopicList.watchForNewPosts = function () { $('#new-topics-alert').on('click', function () { $(this).addClass('hide'); @@ -74,9 +83,9 @@ define('topicList', [ }; function onNewTopic(data) { - if ((ajaxify.data.selectedCids && ajaxify.data.selectedCids.indexOf(parseInt(data.cid, 10)) === -1) - || (ajaxify.data.selectedFilter && ajaxify.data.selectedFilter.filter === 'watched') - || (ajaxify.data.template.category && parseInt(ajaxify.data.cid, 10) !== parseInt(data.cid, 10))) { + if ((ajaxify.data.selectedCids && ajaxify.data.selectedCids.length && ajaxify.data.selectedCids.indexOf(parseInt(data.cid, 10)) === -1) || + (ajaxify.data.selectedFilter && ajaxify.data.selectedFilter.filter === 'watched') || + (ajaxify.data.template.category && parseInt(ajaxify.data.cid, 10) !== parseInt(data.cid, 10))) { return; } @@ -91,11 +100,13 @@ define('topicList', [ } var post = data.posts[0]; - if ((!post || !post.topic) - || (parseInt(post.topic.mainPid, 10) === parseInt(post.pid, 10)) - || (ajaxify.data.selectedCids && ajaxify.data.selectedCids.length && ajaxify.data.selectedCids.indexOf(parseInt(post.topic.cid, 10)) === -1) - || (ajaxify.data.selectedFilter && ajaxify.data.selectedFilter.filter === 'new') - || (ajaxify.data.template.category && parseInt(ajaxify.data.cid, 10) !== parseInt(post.topic.cid, 10))) { + if ( + (!post || !post.topic) || + (parseInt(post.topic.mainPid, 10) === parseInt(post.pid, 10)) || + (ajaxify.data.selectedCids && ajaxify.data.selectedCids.length && ajaxify.data.selectedCids.indexOf(parseInt(post.topic.cid, 10)) === -1) || + (ajaxify.data.selectedFilter && ajaxify.data.selectedFilter.filter === 'new') || + (ajaxify.data.template.category && parseInt(ajaxify.data.cid, 10) !== parseInt(post.topic.cid, 10)) + ) { return; } @@ -202,14 +213,14 @@ define('topicList', [ }; TopicList.loadMoreTopics = function (direction) { - if (!$('[component="category"]').length || !$('[component="category"]').children().length) { + if (!topicListEl.length || !topicListEl.children().length) { return; } - var topics = $('[component="category/topic"]'); + var topics = topicListEl.find('[component="category/topic"]'); var afterEl = direction > 0 ? topics.last() : topics.first(); var after = (parseInt(afterEl.attr('data-index'), 10) || 0) + (direction > 0 ? 1 : 0); - if (!utils.isNumber(after) || (after === 0 && $('[component="category/topic"][data-index="0"]').length)) { + if (!utils.isNumber(after) || (after === 0 && topicListEl.find('[component="category/topic"][data-index="0"]').length)) { return; } @@ -230,13 +241,13 @@ define('topicList', [ query: query, term: ajaxify.data.selectedTerm.term, filter: ajaxify.data.selectedFilter.filter, - set: $('[component="category"]').attr('data-set') ? $('[component="category"]').attr('data-set') : 'topics:recent', + set: topicListEl.attr('data-set') ? topicListEl.attr('data-set') : 'topics:recent', }, callback); } function filterTopicsOnDom(topics) { return topics.filter(function (topic) { - return !$('[component="category/topic"][data-tid="' + topic.tid + '"]').length; + return !topicListEl.find('[component="category/topic"][data-tid="' + topic.tid + '"]').length; }); } @@ -254,12 +265,12 @@ define('topicList', [ var after; var before; - var topicsList = $('[component="category/topic"]'); + var topicEls = topicListEl.find('[component="category/topic"]'); if (direction > 0 && topics.length) { - after = topicsList.last(); + after = topicEls.last(); } else if (direction < 0 && topics.length) { - before = topicsList.first(); + before = topicEls.first(); } var tplData = { @@ -272,7 +283,7 @@ define('topicList', [ tplData.template[templateName] = true; app.parseAndTranslate(templateName, 'topics', tplData, function (html) { - $('[component="category"]').removeClass('hidden'); + topicListEl.removeClass('hidden'); $('#category-no-topics').remove(); if (after && after.length) { @@ -285,15 +296,15 @@ define('topicList', [ $(window).scrollTop(scrollTop + ($(document).height() - height)); } else { - $('[component="category"]').append(html); + topicListEl.append(html); } if (!topicSelect.getSelectedTids().length) { - infinitescroll.removeExtra($('[component="category/topic"]'), direction, config.topicsPerPage * 3); + infinitescroll.removeExtra(topicListEl.find('[component="category/topic"]'), direction, config.topicsPerPage * 3); } html.find('.timeago').timeago(); - app.createUserTooltips(); + app.createUserTooltips(html); utils.makeNumbersHumanReadable(html.find('.human-readable-number')); $(window).trigger('action:topics.loaded', { topics: topics, template: templateName }); callback(); diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index fb1110e947..8bce483e44 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -181,8 +181,8 @@ cursor += 1; // a space or comma was found before the name // this isn't a translation string, so back out - } else if (!(textBeforeColonFound && colonFound && textAfterColonFound && commaAfterNameFound) - && invalidTextRegex.test(char0)) { + } else if (!(textBeforeColonFound && colonFound && textAfterColonFound && commaAfterNameFound) && + invalidTextRegex.test(char0)) { cursor += 1; lastBreak -= 2; // no longer in a token @@ -400,7 +400,7 @@ lang = utils.params().lang || config.userLang || config.defaultLang || 'en-GB'; } else { var meta = require('../../../src/meta'); - lang = meta.config.defaultLang || 'en-GB'; + lang = meta.config && meta.config.defaultLang ? meta.config.defaultLang : 'en-GB'; } return lang; @@ -596,6 +596,15 @@ toggle(); } }, + + switchTimeagoLanguage: function switchTimeagoLanguage(callback) { + // Delete the cached shorthand strings if present + delete adaptor.timeagoShort; + + var languageCode = utils.userLangToTimeagoCode(config.userLang); + jQuery.getScript(config.relative_path + '/assets/vendor/jquery/timeago/locales/jquery.timeago.' + languageCode + '.js').done(callback); + }, + prepareDOM: function prepareDOM() { // Add directional code if necessary adaptor.translate('[[language:dir]]', function (value) { diff --git a/public/src/sockets.js b/public/src/sockets.js index 63ef91f8cf..f80fdc157e 100644 --- a/public/src/sockets.js +++ b/public/src/sockets.js @@ -150,4 +150,16 @@ app.isConnected = false; }, }); } + + if ( + config.socketioOrigins && + config.socketioOrigins !== '*' && + config.socketioOrigins.indexOf(location.hostname) === -1 + ) { + console.error( + 'You are accessing the forum from an unknown origin. This will likely result in websockets failing to connect. \n' + + 'To fix this, set the `"url"` value in `config.json` to the URL at which you access the site. \n' + + 'For more information, see this FAQ topic: https://community.nodebb.org/topic/13388' + ); + } }()); diff --git a/public/src/utils.js b/public/src/utils.js index e9defd8377..05e069ed14 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -501,7 +501,7 @@ // takes a string like 1000 and returns 1,000 addCommas: function (text) { - return text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); + return String(text).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,'); }, toISOString: function (timestamp) { @@ -625,10 +625,10 @@ var rect = el.getBoundingClientRect(); return ( - rect.top >= 0 - && rect.left >= 0 - && rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) /* or $(window).height() */ - && rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */ + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /* or $(window).height() */ + rect.right <= (window.innerWidth || document.documentElement.clientWidth) /* or $(window).width() */ ); }, @@ -731,10 +731,10 @@ }, isInternalURI: function (targetLocation, referenceLocation, relative_path) { - return targetLocation.host === '' // Relative paths are always internal links - || ( - targetLocation.host === referenceLocation.host && targetLocation.protocol === referenceLocation.protocol // Otherwise need to check if protocol and host match - && (relative_path.length > 0 ? targetLocation.pathname.indexOf(relative_path) === 0 : true) // Subfolder installs need this additional check + return targetLocation.host === '' || // Relative paths are always internal links + ( + targetLocation.host === referenceLocation.host && targetLocation.protocol === referenceLocation.protocol && // Otherwise need to check if protocol and host match + (relative_path.length > 0 ? targetLocation.pathname.indexOf(relative_path) === 0 : true) // Subfolder installs need this additional check ); }, diff --git a/src/admin/search.js b/src/admin/search.js index a49e6ea1ff..33c9b437d5 100644 --- a/src/admin/search.js +++ b/src/admin/search.js @@ -18,10 +18,10 @@ function filterDirectories(directories) { // exclude partials // only include subpaths // exclude category.tpl, group.tpl, category-analytics.tpl - return !dir.endsWith('.js') - && !dir.includes('/partials/') - && /\/.*\//.test(dir) - && !/manage\/(category|group|category-analytics)$/.test(dir); + return !dir.endsWith('.js') && + !dir.includes('/partials/') && + /\/.*\//.test(dir) && + !/manage\/(category|group|category-analytics)$/.test(dir); }); } @@ -139,10 +139,10 @@ function initDict(language, callback) { title = '[[admin/menu:general/dashboard]]'; } else { title = title.match(/admin\/(.+?)\/(.+?)$/); - title = '[[admin/menu:section-' - + (title[1] === 'development' ? 'advanced' : title[1]) - + ']]' + (title[2] ? (' > [[admin/menu:' - + title[1] + '/' + title[2] + ']]') : ''); + title = '[[admin/menu:section-' + + (title[1] === 'development' ? 'advanced' : title[1]) + + ']]' + (title[2] ? (' > [[admin/menu:' + + title[1] + '/' + title[2] + ']]') : ''); } translator.translate(title).then(function (title) { diff --git a/src/admin/versions.js b/src/admin/versions.js index f9cc395319..ed826f7d6f 100644 --- a/src/admin/versions.js +++ b/src/admin/versions.js @@ -23,6 +23,7 @@ function getLatestVersion(callback) { request('https://api.github.com/repos/NodeBB/NodeBB/tags', { json: true, headers: headers, + timeout: 1000, }, function (err, res, releases) { if (err) { return callback(err); diff --git a/src/categories/delete.js b/src/categories/delete.js index 9b5f208049..69f5a24045 100644 --- a/src/categories/delete.js +++ b/src/categories/delete.js @@ -104,6 +104,7 @@ module.exports = function (Categories) { 'cid:0:children', 'cid:' + results.parentCid + ':children', 'cid:' + cid + ':children', + 'cid:' + cid + ':tag:whitelist', ]); next(); }); diff --git a/src/categories/index.js b/src/categories/index.js index f7a7a7e8b0..cba2da02c8 100644 --- a/src/categories/index.js +++ b/src/categories/index.js @@ -34,7 +34,7 @@ Categories.getCategoryById = function (data, callback) { }, function (categories, next) { if (!categories[0]) { - return next(new Error('[[error:invalid-cid]]')); + return callback(null, null); } category = categories[0]; data.category = category; @@ -80,7 +80,8 @@ Categories.isIgnored = function (cids, uid, callback) { if (parseInt(uid, 10) <= 0) { return setImmediate(callback, null, cids.map(() => false)); } - db.isSortedSetMembers('uid:' + uid + ':ignored:cids', cids, callback); + const keys = cids.map(cid => 'cid:' + cid + ':ignorers'); + db.isMemberOfSortedSets(keys, uid, callback); }; Categories.getAllCidsFromSet = function (key, callback) { @@ -101,7 +102,7 @@ Categories.getAllCidsFromSet = function (key, callback) { Categories.getAllCategories = function (uid, callback) { async.waterfall([ function (next) { - Categories.getAllCids(next); + Categories.getAllCidsFromSet('categories:cid', next); }, function (cids, next) { Categories.getCategories(cids, uid, next); @@ -178,8 +179,32 @@ Categories.getCategories = function (cids, uid, callback) { }; Categories.getTagWhitelist = function (cids, callback) { - const keys = cids.map(cid => 'cid:' + cid + ':tag:whitelist'); - db.getSortedSetsMembers(keys, callback); + const cachedData = {}; + + const nonCachedCids = cids.filter((cid) => { + const data = cache.get('cid:' + cid + ':tag:whitelist'); + const isInCache = data !== undefined; + if (isInCache) { + cachedData[cid] = data; + } + return !isInCache; + }); + + if (!nonCachedCids.length) { + return setImmediate(callback, null, _.clone(cids.map(cid => cachedData[cid]))); + } + + const keys = nonCachedCids.map(cid => 'cid:' + cid + ':tag:whitelist'); + db.getSortedSetsMembers(keys, function (err, data) { + if (err) { + return callback(err); + } + nonCachedCids.forEach((cid, index) => { + cachedData[cid] = data[index]; + cache.set('cid:' + cid + ':tag:whitelist', data[index]); + }); + callback(null, _.clone(cids.map(cid => cachedData[cid]))); + }); }; function calculateTopicPostCount(category) { diff --git a/src/categories/recentreplies.js b/src/categories/recentreplies.js index 3ef025b281..dc3fa11271 100644 --- a/src/categories/recentreplies.js +++ b/src/categories/recentreplies.js @@ -85,7 +85,7 @@ module.exports = function (Categories) { async.waterfall([ function (next) { - const categoriesToLoad = categoryData.filter(category => parseInt(category.numRecentReplies, 10) > 0); + const categoriesToLoad = categoryData.filter(category => category && category.numRecentReplies && parseInt(category.numRecentReplies, 10) > 0); const keys = categoriesToLoad.map(category => 'cid:' + category.cid + ':recent_tids'); db.getSortedSetsMembers(keys, next); }, @@ -153,23 +153,27 @@ module.exports = function (Categories) { function assignTopicsToCategories(categories, topics) { categories.forEach(function (category) { - category.posts = topics.filter(topic => topic.cid && (topic.cid === category.cid || topic.parentCid === category.cid)) - .sort((a, b) => b.pid - a.pid) - .slice(0, parseInt(category.numRecentReplies, 10)); + if (category) { + category.posts = topics.filter(topic => topic.cid && (topic.cid === category.cid || topic.parentCid === category.cid)) + .sort((a, b) => b.pid - a.pid) + .slice(0, parseInt(category.numRecentReplies, 10)); + } }); } function bubbleUpChildrenPosts(categoryData) { categoryData.forEach(function (category) { - if (category.posts.length) { - return; - } - var posts = []; - getPostsRecursive(category, posts); + if (category) { + if (category.posts.length) { + return; + } + var posts = []; + getPostsRecursive(category, posts); - posts.sort((a, b) => b.pid - a.pid); - if (posts.length) { - category.posts = [posts[0]]; + posts.sort((a, b) => b.pid - a.pid); + if (posts.length) { + category.posts = [posts[0]]; + } } }); } diff --git a/src/categories/update.js b/src/categories/update.js index b876cd22d6..a1ca3cc01f 100644 --- a/src/categories/update.js +++ b/src/categories/update.js @@ -137,6 +137,10 @@ module.exports = function (Categories) { var scores = tags.map((tag, index) => index); db.sortedSetAdd('cid:' + cid + ':tag:whitelist', scores, tags, next); }, + function (next) { + cache.del('cid:' + cid + ':tag:whitelist'); + next(); + }, ], callback); } diff --git a/src/cli/colors.js b/src/cli/colors.js index df0f0961cd..bb2648e1d5 100644 --- a/src/cli/colors.js +++ b/src/cli/colors.js @@ -65,9 +65,9 @@ Command.prototype.usage = function () { return humanReadableArgName(arg); }); - var usage = '[options]'[optionColor] - + (this.commands.length ? ' [command]' : '')[subCommandColor] - + (this._args.length ? ' ' + args.join(' ') : '')[argColor]; + var usage = '[options]'[optionColor] + + (this.commands.length ? ' [command]' : '')[subCommandColor] + + (this._args.length ? ' ' + args.join(' ') : '')[argColor]; return usage; }; @@ -90,10 +90,10 @@ Command.prototype.commandHelp = function () { }).join(' '); return [ - cmd._name[subCommandColor] - + (cmd._alias ? ' | ' + cmd._alias : '')[subCommandColor] - + (cmd.options.length ? ' [options]' : '')[subOptionColor] - + ' ' + args[subArgColor], + cmd._name[subCommandColor] + + (cmd._alias ? ' | ' + cmd._alias : '')[subCommandColor] + + (cmd.options.length ? ' [options]' : '')[subOptionColor] + + ' ' + args[subArgColor], cmd._description, ]; }); diff --git a/src/cli/manage.js b/src/cli/manage.js index dd908c7377..9d360494ec 100644 --- a/src/cli/manage.js +++ b/src/cli/manage.js @@ -27,10 +27,10 @@ function buildTargets() { return ' ' + _.padEnd('"' + tuple[0] + '"', length + 2).magenta + ' | ' + tuple[1]; }).join('\n'); console.log( - '\n\n Build targets:\n' - + ('\n ' + _.padEnd('Target', length + 2) + ' | Aliases').green - + '\n ------------------------------------------------------\n'.blue - + output + '\n' + '\n\n Build targets:\n' + + ('\n ' + _.padEnd('Target', length + 2) + ' | Aliases').green + + '\n ------------------------------------------------------\n'.blue + + output + '\n' ); } diff --git a/src/cli/upgrade.js b/src/cli/upgrade.js index 046e8539df..618183111e 100644 --- a/src/cli/upgrade.js +++ b/src/cli/upgrade.js @@ -88,8 +88,8 @@ function runUpgrade(upgrades, options) { if (upgrades === true) { var tasks = Object.keys(steps); - if (options.package || options.install - || options.plugins || options.schema || options.build) { + if (options.package || options.install || + options.plugins || options.schema || options.build) { tasks = tasks.filter(function (key) { return options[key]; }); diff --git a/src/controllers/admin/privileges.js b/src/controllers/admin/privileges.js index e4aa4a400b..accbc8b67d 100644 --- a/src/controllers/admin/privileges.js +++ b/src/controllers/admin/privileges.js @@ -19,7 +19,7 @@ privilegesController.get = function (req, res, callback) { privileges.categories.list(cid, next); } }, - allCategories: function (next) { + categories: function (next) { async.waterfall([ function (next) { categories.getAllCidsFromSet('categories:cid', next); @@ -36,7 +36,12 @@ privilegesController.get = function (req, res, callback) { }, next); }, function (data) { - data.allCategories.forEach(function (category) { + data.categories.unshift({ + cid: 0, + name: '[[admin/manage/privileges:global]]', + icon: 'fa-list', + }); + data.categories.forEach(function (category) { if (category) { category.selected = category.cid === cid; @@ -48,8 +53,8 @@ privilegesController.get = function (req, res, callback) { res.render('admin/manage/privileges', { privileges: data.privileges, - allCategories: data.allCategories, - selected: data.selected ? data.selected.name : '[[admin/manage/privileges:global]]', + categories: data.categories, + selectedCategory: data.selected, cid: cid, }); }, diff --git a/src/controllers/admin/uploads.js b/src/controllers/admin/uploads.js index d0af465347..4a63d33ba8 100644 --- a/src/controllers/admin/uploads.js +++ b/src/controllers/admin/uploads.js @@ -88,9 +88,9 @@ function buildBreadcrumbs(currentFolder) { var dir = path.join(currentPath, part); crumbs.push({ text: part || 'Uploads', - url: part - ? (nconf.get('relative_path') + '/admin/manage/uploads?dir=' + dir) - : nconf.get('relative_path') + '/admin/manage/uploads', + url: part ? + (nconf.get('relative_path') + '/admin/manage/uploads?dir=' + dir) : + nconf.get('relative_path') + '/admin/manage/uploads', }); currentPath = dir; }); diff --git a/src/controllers/api.js b/src/controllers/api.js index 3def1aff1f..b53e0d0ad1 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -40,6 +40,7 @@ apiController.loadConfig = function (req, callback) { config.disableChatMessageEditing = meta.config.disableChatMessageEditing === 1; config.maximumChatMessageLength = meta.config.maximumChatMessageLength || 1000; config.socketioTransports = nconf.get('socket.io:transports') || ['polling', 'websocket']; + config.socketioOrigins = nconf.get('socket.io:origins'); config.websocketAddress = nconf.get('socket.io:address') || ''; config.maxReconnectionAttempts = meta.config.maxReconnectionAttempts || 5; config.reconnectionDelay = meta.config.reconnectionDelay || 1500; diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index 0e2e699a3f..b2f456691d 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -284,6 +284,8 @@ function continueLogin(req, res, next) { }); }); } else { + delete req.query.lang; + async.parallel({ doLogin: async.apply(authenticationController.doLogin, req, userData.uid), header: async.apply(middleware.generateHeader, req, res, {}), @@ -363,7 +365,11 @@ authenticationController.onSuccessfulLogin = function (req, uid, callback) { user.auth.addSession(uid, req.sessionID, next); }, function (next) { - db.setObjectField('uid:' + uid + ':sessionUUID:sessionId', uuid, req.sessionID, next); + if (uid > 0) { + db.setObjectField('uid:' + uid + ':sessionUUID:sessionId', uuid, req.sessionID, next); + } else { + next(); + } }, function (next) { user.updateLastOnlineTime(uid, next); diff --git a/src/controllers/category.js b/src/controllers/category.js index bc59b9d8a3..5490b5c2ea 100644 --- a/src/controllers/category.js +++ b/src/controllers/category.js @@ -103,6 +103,9 @@ categoryController.get = function (req, res, callback) { }, next); }, function (categoryData, next) { + if (!categoryData) { + return callback(); + } categories.modifyTopicsByPrivilege(categoryData.topics, userPrivileges); if (categoryData.link) { diff --git a/src/controllers/errors.js b/src/controllers/errors.js index dacca84e3c..0887de8c9b 100644 --- a/src/controllers/errors.js +++ b/src/controllers/errors.js @@ -8,8 +8,9 @@ var plugins = require('../plugins'); exports.handleURIErrors = function (err, req, res, next) { // Handle cases where malformed URIs are passed in if (err instanceof URIError) { - var tidMatch = req.path.match(/^\/topic\/(\d+)\//); - var cidMatch = req.path.match(/^\/category\/(\d+)\//); + const cleanPath = req.path.replace(new RegExp('^' + nconf.get('relative_path')), ''); + var tidMatch = cleanPath.match(/^\/topic\/(\d+)\//); + var cidMatch = cleanPath.match(/^\/category\/(\d+)\//); if (tidMatch) { res.redirect(nconf.get('relative_path') + tidMatch[0]); @@ -49,7 +50,7 @@ exports.handleErrors = function (err, req, res, next) { // eslint-disable-line n // Display NodeBB error page var status = parseInt(err.status, 10); if ((status === 302 || status === 308) && err.path) { - return res.locals.isAPI ? res.set('X-Redirect', err.path).status(200).json(err.path) : res.redirect(err.path); + return res.locals.isAPI ? res.set('X-Redirect', err.path).status(200).json(err.path) : res.redirect(nconf.get('relative_path') + err.path); } winston.error(req.path + '\n', err); diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index 7668493337..5eef187cf8 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -166,7 +166,7 @@ helpers.buildCategoryBreadcrumbs = function (cid, callback) { if (!data.disabled && !data.isSection) { breadcrumbs.unshift({ - text: validator.escape(String(data.name)), + text: String(data.name), url: nconf.get('relative_path') + '/category/' + data.slug, }); } diff --git a/src/controllers/index.js b/src/controllers/index.js index eddc1132d5..ed94cd4713 100644 --- a/src/controllers/index.js +++ b/src/controllers/index.js @@ -249,10 +249,10 @@ Controllers.robots = function (req, res) { if (meta.config['robots:txt']) { res.send(meta.config['robots:txt']); } else { - res.send('User-agent: *\n' - + 'Disallow: ' + nconf.get('relative_path') + '/admin/\n' - + 'Disallow: ' + nconf.get('relative_path') + '/reset/\n' - + 'Sitemap: ' + nconf.get('url') + '/sitemap.xml'); + res.send('User-agent: *\n' + + 'Disallow: ' + nconf.get('relative_path') + '/admin/\n' + + 'Disallow: ' + nconf.get('relative_path') + '/reset/\n' + + 'Sitemap: ' + nconf.get('url') + '/sitemap.xml'); } }; diff --git a/src/controllers/ping.js b/src/controllers/ping.js index d43beca298..6c4dc7f697 100644 --- a/src/controllers/ping.js +++ b/src/controllers/ping.js @@ -1,7 +1,8 @@ 'use strict'; -var async = require('async'); -var db = require('../database'); +const async = require('async'); +const nconf = require('nconf'); +const db = require('../database'); module.exports.ping = function (req, res, next) { async.waterfall([ @@ -9,7 +10,7 @@ module.exports.ping = function (req, res, next) { db.getObject('config', next); }, function () { - res.status(200).send(req.path === '/sping' ? 'healthy' : '200'); + res.status(200).send(req.path === nconf.get('relative_path') + '/sping' ? 'healthy' : '200'); }, ], next); }; diff --git a/src/controllers/search.js b/src/controllers/search.js index 62b453e266..443d2801c3 100644 --- a/src/controllers/search.js +++ b/src/controllers/search.js @@ -34,6 +34,9 @@ searchController.search = function (req, res, next) { if (req.query.categories && !Array.isArray(req.query.categories)) { req.query.categories = [req.query.categories]; } + if (req.query.hasTags && !Array.isArray(req.query.hasTags)) { + req.query.hasTags = [req.query.hasTags]; + } var data = { query: req.query.term, diff --git a/src/database/mongo.js b/src/database/mongo.js index f7a9438593..21c5a97638 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -9,6 +9,7 @@ var session = require('express-session'); var _ = require('lodash'); var semver = require('semver'); var prompt = require('prompt'); +var utils = require('../utils'); var client; var mongoModule = module.exports; @@ -200,11 +201,18 @@ mongoModule.checkCompatibilityVersion = function (version, callback) { }; mongoModule.info = function (db, callback) { - if (!db) { - return callback(); - } async.waterfall([ function (next) { + if (db) { + return setImmediate(next, null, db); + } + mongoModule.connect(nconf.get('mongo'), function (err, client) { + next(err, client ? client.db() : undefined); + }); + }, + function (db, next) { + mongoModule.client = mongoModule.client || db; + async.parallel({ serverStatus: function (next) { db.command({ serverStatus: 1 }, next); @@ -240,6 +248,9 @@ mongoModule.info = function (db, callback) { stats.mem.mapped = (stats.mem.mapped / 1024).toFixed(3); stats.collectionData = results.listCollections; stats.network = results.serverStatus.network; + stats.network.bytesIn = (stats.network.bytesIn / scale).toFixed(3); + stats.network.bytesOut = (stats.network.bytesOut / scale).toFixed(3); + stats.network.numRequests = utils.addCommas(stats.network.numRequests); stats.raw = JSON.stringify(stats, null, 4); stats.avgObjSize = stats.avgObjSize.toFixed(2); diff --git a/src/database/mongo/sorted.js b/src/database/mongo/sorted.js index a44315d5b5..cd90546e39 100644 --- a/src/database/mongo/sorted.js +++ b/src/database/mongo/sorted.js @@ -39,7 +39,11 @@ module.exports = function (db, module) { if (!key.length) { return setImmediate(callback, null, []); } - key = { $in: key }; + if (key.length > 1) { + key = { $in: key }; + } else { + key = key[0]; + } } var query = { _key: key }; @@ -149,7 +153,7 @@ module.exports = function (db, module) { module.sortedSetsCard = function (keys, callback) { if (!Array.isArray(keys) || !keys.length) { - return callback(); + return callback(null, []); } var pipeline = [ { $match: { _key: { $in: keys } } }, @@ -339,8 +343,8 @@ module.exports = function (db, module) { }; module.isMemberOfSortedSets = function (keys, value, callback) { - if (!Array.isArray(keys)) { - return callback(); + if (!Array.isArray(keys) || !keys.length) { + return setImmediate(callback, null, []); } value = helpers.valueToString(value); db.collection('objects').find({ _key: { $in: keys }, value: value }, { projection: { _id: 0, score: 0 } }).toArray(function (err, results) { diff --git a/src/database/postgres.js b/src/database/postgres.js index 5284e76b68..d7358875ec 100644 --- a/src/database/postgres.js +++ b/src/database/postgres.js @@ -450,19 +450,26 @@ postgresModule.checkCompatibilityVersion = function (version, callback) { }; postgresModule.info = function (db, callback) { - if (!db) { - return callback(); - } + async.waterfall([ + function (next) { + if (db) { + setImmediate(next, null, db); + } else { + postgresModule.connect(nconf.get('postgres'), next); + } + }, + function (db, next) { + postgresModule.pool = postgresModule.pool || db; - db.query(` -SELECT true "postgres", - current_setting('server_version') "version", - EXTRACT(EPOCH FROM NOW() - pg_postmaster_start_time()) * 1000 "uptime"`, function (err, res) { - if (err) { - return callback(err); - } - callback(null, res.rows[0]); - }); + db.query(` + SELECT true "postgres", + current_setting('server_version') "version", + EXTRACT(EPOCH FROM NOW() - pg_postmaster_start_time()) * 1000 "uptime"`, next); + }, + function (res, next) { + next(null, res.rows[0]); + }, + ], callback); }; postgresModule.close = function (callback) { diff --git a/src/database/postgres/sorted.js b/src/database/postgres/sorted.js index d540f6ca9a..ad749c19bd 100644 --- a/src/database/postgres/sorted.js +++ b/src/database/postgres/sorted.js @@ -231,7 +231,7 @@ SELECT COUNT(*) c module.sortedSetsCard = function (keys, callback) { if (!Array.isArray(keys) || !keys.length) { - return callback(); + return callback(null, []); } query({ @@ -473,8 +473,8 @@ SELECT z."value" v }; module.isMemberOfSortedSets = function (keys, value, callback) { - if (!Array.isArray(keys)) { - return callback(); + if (!Array.isArray(keys) || !keys.length) { + return setImmediate(callback, null, []); } value = helpers.valueToString(value); diff --git a/src/database/redis.js b/src/database/redis.js index cbd66c1abf..2828f84915 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -98,7 +98,7 @@ redisModule.connect = function (options, callback) { cxn.on('ready', function () { if (!callbackCalled) { callbackCalled = true; - callback(); + callback(null, cxn); } }); @@ -163,11 +163,16 @@ redisModule.close = function (callback) { }; redisModule.info = function (cxn, callback) { - if (!cxn) { - return callback(); - } async.waterfall([ function (next) { + if (cxn) { + return setImmediate(next, null, cxn); + } + redisModule.connect(nconf.get('redis'), next); + }, + function (cxn, next) { + redisModule.client = redisModule.client || cxn; + cxn.info(next); }, function (data, next) { @@ -179,6 +184,18 @@ redisModule.info = function (cxn, callback) { redisData[parts[0]] = parts[1]; } }); + + const keyInfo = redisData['db' + nconf.get('redis:database')]; + redisData.keys = keyInfo.split(',')[0].replace('keys=', ''); + redisData.expires = keyInfo.split(',')[1].replace('expires=', ''); + redisData.avg_ttl = keyInfo.split(',')[2].replace('avg_ttl=', ''); + + redisData.instantaneous_input = (redisData.instantaneous_input_kbps / 1024).toFixed(3); + redisData.instantaneous_output = (redisData.instantaneous_output_kbps / 1024).toFixed(3); + + redisData.total_net_input = (redisData.total_net_input_bytes / (1024 * 1024 * 1024)).toFixed(3); + redisData.total_net_output = (redisData.total_net_output_bytes / (1024 * 1024 * 1024)).toFixed(3); + redisData.used_memory_human = (redisData.used_memory / (1024 * 1024 * 1024)).toFixed(3); redisData.raw = JSON.stringify(redisData, null, 4); redisData.redis = true; diff --git a/src/database/redis/sorted.js b/src/database/redis/sorted.js index a3b1700545..43b797e2f9 100644 --- a/src/database/redis/sorted.js +++ b/src/database/redis/sorted.js @@ -29,6 +29,9 @@ module.exports = function (redisClient, module) { function sortedSetRange(method, key, start, stop, withScores, callback) { if (Array.isArray(key)) { + if (!key.length) { + return setImmediate(callback, null, []); + } const batch = redisClient.batch(); key.forEach((key) => { batch[method]([key, start, stop, 'WITHSCORES']); @@ -116,7 +119,7 @@ module.exports = function (redisClient, module) { }; module.sortedSetsCard = function (keys, callback) { - if (Array.isArray(keys) && !keys.length) { + if (!Array.isArray(keys) || !keys.length) { return callback(null, []); } var batch = redisClient.batch(); @@ -167,11 +170,27 @@ module.exports = function (redisClient, module) { }; module.sortedSetsScore = function (keys, value, callback) { - helpers.execKeysValue(redisClient, 'batch', 'zscore', keys, value, callback); + helpers.execKeysValue(redisClient, 'batch', 'zscore', keys, value, function (err, scores) { + if (err) { + return callback(err); + } + scores = scores.map(function (d) { + return d === null ? d : parseFloat(d); + }); + callback(null, scores); + }); }; module.sortedSetScores = function (key, values, callback) { - helpers.execKeyValues(redisClient, 'batch', 'zscore', key, values, callback); + helpers.execKeyValues(redisClient, 'batch', 'zscore', key, values, function (err, scores) { + if (err) { + return callback(err); + } + scores = scores.map(function (d) { + return d === null ? d : parseFloat(d); + }); + callback(null, scores); + }); }; module.isSortedSetMember = function (key, value, callback) { @@ -190,6 +209,9 @@ module.exports = function (redisClient, module) { }; module.isMemberOfSortedSets = function (keys, value, callback) { + if (!Array.isArray(keys) || !keys.length) { + return setImmediate(callback, null, []); + } helpers.execKeysValue(redisClient, 'batch', 'zscore', keys, value, function (err, results) { if (err) { return callback(err); diff --git a/src/emailer.js b/src/emailer.js index dbc56b9175..e5ec56ddea 100644 --- a/src/emailer.js +++ b/src/emailer.js @@ -246,7 +246,7 @@ Emailer.sendToEmail = function (template, email, language, params, callback) { to: email, from: meta.config['email:from'] || 'no-reply@' + getHostname(), from_name: meta.config['email:from_name'] || 'NodeBB', - subject: '[' + meta.config.title + '] ' + results.subject, + subject: '[' + meta.config.title + '] ' + _.unescape(results.subject), html: results.html, plaintext: htmlToText.fromString(results.html, { ignoreImage: true, diff --git a/src/flags.js b/src/flags.js index 34ddb51abe..c66b870464 100644 --- a/src/flags.js +++ b/src/flags.js @@ -236,7 +236,6 @@ Flags.list = function (filters, uid, callback) { Flags.validate = function (payload, callback) { async.parallel({ - targetExists: async.apply(Flags.targetExists, payload.type, payload.id), target: async.apply(Flags.getTarget, payload.type, payload.id, payload.uid), reporter: async.apply(user.getUserData, payload.uid), }, function (err, data) { @@ -244,8 +243,12 @@ Flags.validate = function (payload, callback) { return callback(err); } - if (data.target.deleted) { + if (!data.target) { + return callback(new Error('[[error:invalid-data]]')); + } else if (data.target.deleted) { return callback(new Error('[[error:post-deleted]]')); + } else if (!data.reporter || !data.reporter.userslug) { + return callback(new Error('[[error:no-user]]')); } else if (data.reporter.banned) { return callback(new Error('[[error:user-banned]]')); } @@ -422,13 +425,18 @@ Flags.getTarget = function (type, id, uid, callback) { switch (type) { case 'post': async.waterfall([ - async.apply(posts.getPostsByPids, [id], uid), - function (posts, next) { - topics.addPostData(posts, uid, next); + async.apply(posts.getPostsData, [id]), + function (postData, next) { + async.map(postData, posts.parsePost, next); }, - ], function (err, posts) { - next(err, posts[0]); - }); + function (postData, next) { + postData = postData.filter(Boolean); + topics.addPostData(postData, uid, next); + }, + function (postData, next) { + next(null, postData[0]); + }, + ], callback); break; case 'user': diff --git a/src/groups/create.js b/src/groups/create.js index 20b4f0bee8..a5b60e68b5 100644 --- a/src/groups/create.js +++ b/src/groups/create.js @@ -77,9 +77,9 @@ module.exports = function (Groups) { }; function isSystemGroup(data) { - return data.system === true || parseInt(data.system, 10) === 1 - || data.name === 'administrators' || data.name === 'registered-users' || data.name === 'Global Moderators' - || Groups.isPrivilegeGroup(data.name); + return data.system === true || parseInt(data.system, 10) === 1 || + data.name === 'administrators' || data.name === 'registered-users' || data.name === 'Global Moderators' || + Groups.isPrivilegeGroup(data.name); } function validateGroupName(name, callback) { diff --git a/src/groups/membership.js b/src/groups/membership.js index 9631bb4a6a..bfce9947de 100644 --- a/src/groups/membership.js +++ b/src/groups/membership.js @@ -77,7 +77,7 @@ module.exports = function (Groups) { }; function inviteOrRequestMembership(groupName, uid, type, callback) { - if (!parseInt(uid, 10)) { + if (!(parseInt(uid, 10) > 0)) { return callback(new Error('[[error:not-logged-in]]')); } var hookName = type === 'invite' ? 'action:group.inviteMember' : 'action:group.requestMembership'; diff --git a/src/groups/search.js b/src/groups/search.js index 14b20a084f..6f8e6c82d5 100644 --- a/src/groups/search.js +++ b/src/groups/search.js @@ -13,10 +13,10 @@ module.exports = function (Groups) { } query = query.toLowerCase(); async.waterfall([ - async.apply(db.getObjectValues, 'groupslug:groupname'), + async.apply(db.getSortedSetRange, 'groups:createtime', 0, -1), function (groupNames, next) { // Ephemeral groups and the registered-users groups are searchable - groupNames = Groups.ephemeralGroups.concat(groupNames).concat('registered-users'); + groupNames = Groups.ephemeralGroups.concat(groupNames); groupNames = groupNames.filter(function (name) { return name.toLowerCase().includes(query) && name !== 'administrators' && !Groups.isPrivilegeGroup(name); }); diff --git a/src/messaging/create.js b/src/messaging/create.js index 19f2e69128..b7be32164d 100644 --- a/src/messaging/create.js +++ b/src/messaging/create.js @@ -36,7 +36,10 @@ module.exports = function (Messaging) { return callback(err); } - content = String(data.content); + content = String(data.content).trim(); + if (!content) { + return callback(new Error('[[error:invalid-chat-message]]')); + } var maximumChatMessageLength = (meta.config.maximumChatMessageLength || 1000); if (content.length > maximumChatMessageLength) { diff --git a/src/messaging/data.js b/src/messaging/data.js index 1d689ced7d..7b4f72329d 100644 --- a/src/messaging/data.js +++ b/src/messaging/data.js @@ -104,7 +104,7 @@ module.exports = function (Messaging) { // Add a spacer in between messages with time gaps between them messages = messages.map(function (message, index) { // Compare timestamps with the previous message, and check if a spacer needs to be added - if (index > 0 && message.timestamp > messages[index - 1] + Messaging.newMessageCutoff) { + if (index > 0 && message.timestamp > messages[index - 1].timestamp + Messaging.newMessageCutoff) { // If it's been 5 minutes, this is a new set of messages message.newSet = true; } else if (index > 0 && message.fromuid !== messages[index - 1].fromuid) { @@ -134,8 +134,8 @@ module.exports = function (Messaging) { Messaging.getMessageFields(mid, ['fromuid', 'timestamp'], next); }, function (fields, next) { - if ((messages[0].timestamp > fields.timestamp + Messaging.newMessageCutoff) - || (messages[0].fromuid !== fields.fromuid)) { + if ((messages[0].timestamp > fields.timestamp + Messaging.newMessageCutoff) || + (messages[0].fromuid !== fields.fromuid)) { // If it's been 5 minutes, this is a new set of messages messages[0].newSet = true; } @@ -168,7 +168,7 @@ function modifyMessage(message, fields) { message.timestampISO = utils.toISOString(message.timestamp); } if (message.hasOwnProperty('edited')) { - message.editedISO = utils.toISOString(message.timestamp); + message.editedISO = utils.toISOString(message.edited); } } } diff --git a/src/messaging/edit.js b/src/messaging/edit.js index d91a4a4f1d..5189a29f5d 100644 --- a/src/messaging/edit.js +++ b/src/messaging/edit.js @@ -19,7 +19,9 @@ module.exports = function (Messaging) { if (raw === content) { return callback(); } - + if (!String(content).trim()) { + return callback(new Error('[[error:invalid-chat-message]]')); + } Messaging.setMessageFields(mid, { content: content, edited: Date.now(), diff --git a/src/meta/blacklist.js b/src/meta/blacklist.js index bcf3c57816..eced8ea413 100644 --- a/src/meta/blacklist.js +++ b/src/meta/blacklist.js @@ -80,9 +80,9 @@ Blacklist.test = function (clientIp, callback) { } if ( - !Blacklist._rules.ipv4.includes(clientIp) // not explicitly specified in ipv4 list - && !Blacklist._rules.ipv6.includes(clientIp) // not explicitly specified in ipv6 list - && !Blacklist._rules.cidr.some(function (subnet) { + !Blacklist._rules.ipv4.includes(clientIp) && // not explicitly specified in ipv4 list + !Blacklist._rules.ipv6.includes(clientIp) && // not explicitly specified in ipv6 list + !Blacklist._rules.cidr.some(function (subnet) { var cidr = ipaddr.parseCIDR(subnet); if (addr.kind() !== cidr[0].kind()) { return false; diff --git a/src/meta/configs.js b/src/meta/configs.js index cbc2332b01..549fd17be2 100644 --- a/src/meta/configs.js +++ b/src/meta/configs.js @@ -46,6 +46,8 @@ function deserialize(config) { return deserialized; } +Configs.deserialize = deserialize; + Configs.init = function (callback) { var config; async.waterfall([ diff --git a/src/meta/css.js b/src/meta/css.js index 91932d8233..c0c9cc71f0 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -206,7 +206,9 @@ CSS.buildBundle = function (target, fork, callback) { function (bundle, next) { var filename = target + '.css'; - fs.writeFile(path.join(__dirname, '../../build/public', filename), bundle.code, next); + fs.writeFile(path.join(__dirname, '../../build/public', filename), bundle.code, function (err) { + next(err, bundle.code); + }); }, ], callback); }; diff --git a/src/meta/minifier.js b/src/meta/minifier.js index b76b16a668..e4722e1339 100644 --- a/src/meta/minifier.js +++ b/src/meta/minifier.js @@ -42,6 +42,7 @@ Minifier.killAll = function () { }); pool.length = 0; + free.length = 0; }; function getChild() { diff --git a/src/middleware/headers.js b/src/middleware/headers.js index 3eafc203d9..ef9935ec37 100644 --- a/src/middleware/headers.js +++ b/src/middleware/headers.js @@ -2,8 +2,10 @@ var os = require('os'); var winston = require('winston'); +var _ = require('lodash'); var meta = require('../meta'); +var languages = require('../languages'); module.exports = function (middleware) { middleware.addHeaders = function (req, res, next) { @@ -60,4 +62,30 @@ module.exports = function (middleware) { next(); }; + + let langs = []; + middleware.autoLocale = function (req, res, next) { + if (parseInt(req.uid, 10) > 0 || !meta.config.autoDetectLang) { + return next(); + } + + var lang = req.acceptsLanguages(langs); + if (!lang) { + return next(); + } + req.query.lang = lang; + next(); + }; + + languages.listCodes(function (err, codes) { + if (err) { + winston.error('[middleware/autoLocale] Could not retrieve languages codes list!'); + codes = []; + } + + winston.verbose('[middleware/autoLocale] Retrieves languages list for middleware'); + var defaultLang = meta.config.defaultLang || 'en-GB'; + + langs = _.uniq([defaultLang, ...codes]); + }); }; diff --git a/src/middleware/index.js b/src/middleware/index.js index 4151dbbd26..3328cee7b5 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -217,7 +217,14 @@ middleware.buildSkinAsset = function (req, res, next) { async.waterfall([ async.apply(plugins.prepareForBuild, ['client side styles']), async.apply(meta.css.buildBundle, target[0], true), - ], next); + ], function (err, css) { + if (err) { + return next(); + } + + require('../meta/minifier').killAll(); + res.status(200).type('text/css').send(css); + }); } else { setImmediate(next); } diff --git a/src/middleware/render.js b/src/middleware/render.js index 34e58fafa2..4d6476dc34 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -89,11 +89,11 @@ module.exports = function (middleware) { }, next); }, function (results, next) { - var str = results.header - + (res.locals.postHeader || '') - + results.content + '' - + (res.locals.preFooter || '') - + results.footer; + var str = results.header + + (res.locals.postHeader || '') + + results.content + '' + + (res.locals.preFooter || '') + + results.footer; translate(str, req, res, next); }, diff --git a/src/middleware/user.js b/src/middleware/user.js index c6a351675f..fb765f0599 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -15,7 +15,7 @@ var controllers = { }; module.exports = function (middleware) { - middleware.authenticate = function (req, res, next) { + function authenticate(req, res, next, callback) { if (req.loggedIn) { return next(); } @@ -34,13 +34,23 @@ module.exports = function (middleware) { return next(); } - controllers.helpers.notAllowed(req, res); + callback(); }); }, }); } - controllers.helpers.notAllowed(req, res); + callback(); + } + + middleware.authenticate = function (req, res, next) { + authenticate(req, res, next, function () { + controllers.helpers.notAllowed(req, res, next); + }); + }; + + middleware.authenticateOrGuest = function (req, res, next) { + authenticate(req, res, next, next); }; middleware.ensureSelfOrGlobalPrivilege = function (req, res, next) { diff --git a/src/notifications.js b/src/notifications.js index 69c9e89848..fbcc978e18 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -243,9 +243,9 @@ function pushToUids(uids, notification, callback) { async.eachLimit(uids, 3, function (uid, next) { emailer.send('notification', uid, { path: notification.path, - subject: utils.stripHTMLTags(notification.subject || '[[notifications:new_notification_from, ' + meta.config.title + ']]'), + subject: utils.stripHTMLTags(notification.subject || '[[notifications:new_notification]]'), intro: utils.stripHTMLTags(notification.bodyShort), - body: utils.stripHTMLTags(notification.bodyLong || ''), + body: notification.bodyLong || '', notification: notification, showUnsubscribe: true, }, next); diff --git a/src/plugins/data.js b/src/plugins/data.js index 31cd2c402c..0dd7fa3a67 100644 --- a/src/plugins/data.js +++ b/src/plugins/data.js @@ -106,16 +106,16 @@ function getStaticDirectories(pluginData, callback) { async.each(dirs, function (route, next) { if (!validMappedPath.test(route)) { - winston.warn('[plugins/' + pluginData.id + '] Invalid mapped path specified: ' - + route + '. Path must adhere to: ' + validMappedPath.toString()); + winston.warn('[plugins/' + pluginData.id + '] Invalid mapped path specified: ' + + route + '. Path must adhere to: ' + validMappedPath.toString()); return next(); } var dirPath = path.join(pluginData.path, pluginData.staticDirs[route]); fs.stat(dirPath, function (err, stats) { if (err && err.code === 'ENOENT') { - winston.warn('[plugins/' + pluginData.id + '] Mapped path \'' - + route + ' => ' + dirPath + '\' not found.'); + winston.warn('[plugins/' + pluginData.id + '] Mapped path \'' + + route + ' => ' + dirPath + '\' not found.'); return next(); } if (err) { @@ -123,8 +123,8 @@ function getStaticDirectories(pluginData, callback) { } if (!stats.isDirectory()) { - winston.warn('[plugins/' + pluginData.id + '] Mapped path \'' - + route + ' => ' + dirPath + '\' is not a directory.'); + winston.warn('[plugins/' + pluginData.id + '] Mapped path \'' + + route + ' => ' + dirPath + '\' is not a directory.'); return next(); } @@ -135,8 +135,8 @@ function getStaticDirectories(pluginData, callback) { if (err) { return callback(err); } - winston.verbose('[plugins] found ' + Object.keys(staticDirs).length - + ' static directories for ' + pluginData.id); + winston.verbose('[plugins] found ' + Object.keys(staticDirs).length + + ' static directories for ' + pluginData.id); callback(null, staticDirs); }); } diff --git a/src/plugins/hooks.js b/src/plugins/hooks.js index 6a5a161d33..d5f268a80e 100644 --- a/src/plugins/hooks.js +++ b/src/plugins/hooks.js @@ -34,10 +34,10 @@ module.exports = function (Plugins) { var method; if (Object.keys(Plugins.deprecatedHooks).includes(data.hook)) { - winston.warn('[plugins/' + id + '] Hook `' + data.hook + '` is deprecated, ' - + (Plugins.deprecatedHooks[data.hook] - ? 'please use `' + Plugins.deprecatedHooks[data.hook] + '` instead.' - : 'there is no alternative.' + winston.warn('[plugins/' + id + '] Hook `' + data.hook + '` is deprecated, ' + + (Plugins.deprecatedHooks[data.hook] ? + 'please use `' + Plugins.deprecatedHooks[data.hook] + '` instead.' : + 'there is no alternative.' )); } diff --git a/src/posts/index.js b/src/posts/index.js index 7790593d3f..2c514ed108 100644 --- a/src/posts/index.js +++ b/src/posts/index.js @@ -157,7 +157,7 @@ Posts.updatePostVoteCount = function (postData, callback) { function (next) { async.waterfall([ function (next) { - topics.getTopicFields(postData.tid, ['mainPid', 'cid'], next); + topics.getTopicFields(postData.tid, ['mainPid', 'cid', 'pinned'], next); }, function (topicData, next) { if (parseInt(topicData.mainPid, 10) === parseInt(postData.pid, 10)) { @@ -172,7 +172,11 @@ Posts.updatePostVoteCount = function (postData, callback) { db.sortedSetAdd('topics:votes', postData.votes, postData.tid, next); }, function (next) { - db.sortedSetAdd('cid:' + topicData.cid + ':tids:votes', postData.votes, postData.tid, next); + if (!topicData.pinned) { + db.sortedSetAdd('cid:' + topicData.cid + ':tids:votes', postData.votes, postData.tid, next); + } else { + next(); + } }, ], function (err) { next(err); diff --git a/src/prestart.js b/src/prestart.js index a310321028..f4b661f0bb 100644 --- a/src/prestart.js +++ b/src/prestart.js @@ -56,7 +56,7 @@ function setupWinston() { formats.push(winston.format.json()); } else { const timestampFormat = winston.format((info) => { - var dateString = new Date().toISOString() + ' [' + global.process.pid + ']'; + var dateString = new Date().toISOString() + ' [' + nconf.get('port') + '/' + global.process.pid + ']'; info.level = dateString + ' - ' + info.level; return info; }); diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 80a8b56f7c..9e2d580afc 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -93,9 +93,15 @@ module.exports = function (privileges) { if (!cid) { return callback(null, false); } - helpers.isUserAllowedTo(privilege, uid, [cid], function (err, results) { - callback(err, Array.isArray(results) && results.length ? results[0] : false); - }); + if (Array.isArray(cid)) { + helpers.isUserAllowedTo(privilege, uid, cid, function (err, results) { + callback(err, Array.isArray(results) && results.length ? results : false); + }); + } else { + helpers.isUserAllowedTo(privilege, uid, [cid], function (err, results) { + callback(err, Array.isArray(results) && results.length ? results[0] : false); + }); + } }; privileges.categories.can = function (privilege, cid, uid, callback) { @@ -141,8 +147,8 @@ module.exports = function (privileges) { }, function (results, next) { cids = cids.filter(function (cid, index) { - return !results.categories[index].disabled - && (results.allowedTo[index] || results.isAdmin || results.isModerators[index]); + return !results.categories[index].disabled && + (results.allowedTo[index] || results.isAdmin || results.isModerators[index]); }); next(null, cids.filter(Boolean)); diff --git a/src/privileges/posts.js b/src/privileges/posts.js index df19b3397f..a28a12378b 100644 --- a/src/privileges/posts.js +++ b/src/privileges/posts.js @@ -115,15 +115,15 @@ module.exports = function (privileges) { var isModOf = {}; cids = cids.filter(function (cid, index) { isModOf[cid] = results.isModerators[index]; - return !results.categories[index].disabled - && (results.allowedTo[index] || results.isAdmin || results.isModerators[index]); + return !results.categories[index].disabled && + (results.allowedTo[index] || results.isAdmin || results.isModerators[index]); }); const cidsSet = new Set(cids); pids = postData.filter(function (post) { - return post.topic && cidsSet.has(post.topic.cid) - && ((!post.topic.deleted && !post.deleted) || results.isAdmin || isModOf[post.cid]); + return post.topic && cidsSet.has(post.topic.cid) && + ((!post.topic.deleted && !post.deleted) || results.isAdmin || isModOf[post.cid]); }).map(post => post.pid); plugins.fireHook('filter:privileges.posts.filter', { diff --git a/src/privileges/topics.js b/src/privileges/topics.js index 7f14041b1f..4b56f22fad 100644 --- a/src/privileges/topics.js +++ b/src/privileges/topics.js @@ -96,15 +96,15 @@ module.exports = function (privileges) { var isModOf = {}; cids = cids.filter(function (cid, index) { isModOf[cid] = results.isModerators[index]; - return !results.categories[index].disabled - && (results.allowedTo[index] || results.isAdmin || results.isModerators[index]); + return !results.categories[index].disabled && + (results.allowedTo[index] || results.isAdmin || results.isModerators[index]); }); const cidsSet = new Set(cids); tids = topicsData.filter(function (topic) { - return cidsSet.has(topic.cid) - && (!topic.deleted || results.isAdmin || isModOf[topic.cid]); + return cidsSet.has(topic.cid) && + (!topic.deleted || results.isAdmin || isModOf[topic.cid]); }).map(topic => topic.tid); plugins.fireHook('filter:privileges.topics.filter', { @@ -148,8 +148,8 @@ module.exports = function (privileges) { }, function (results, next) { uids = uids.filter(function (uid, index) { - return !results.disabled - && ((results.allowedTo[index] && !topicData.deleted) || results.isAdmins[index] || results.isModerators[index]); + return !results.disabled && + ((results.allowedTo[index] && !topicData.deleted) || results.isAdmins[index] || results.isModerators[index]); }); next(null, uids); @@ -197,9 +197,9 @@ module.exports = function (privileges) { var preventTopicDeleteAfterReplies = meta.config.preventTopicDeleteAfterReplies; if (preventTopicDeleteAfterReplies && (topicData.postcount - 1) >= preventTopicDeleteAfterReplies) { - var langKey = preventTopicDeleteAfterReplies > 1 - ? '[[error:cant-delete-topic-has-replies, ' + meta.config.preventTopicDeleteAfterReplies + ']]' - : '[[error:cant-delete-topic-has-reply]]'; + var langKey = preventTopicDeleteAfterReplies > 1 ? + '[[error:cant-delete-topic-has-replies, ' + meta.config.preventTopicDeleteAfterReplies + ']]' : + '[[error:cant-delete-topic-has-reply]]'; return next(new Error(langKey)); } diff --git a/src/promisify.js b/src/promisify.js index 9882cf2753..7b6721f8ec 100644 --- a/src/promisify.js +++ b/src/promisify.js @@ -1,8 +1,5 @@ 'use strict'; -// remove once node 6 support is removed -require('util.promisify/shim')(); - var util = require('util'); var _ = require('lodash'); diff --git a/src/routes/api.js b/src/routes/api.js index 3bcfca342e..4ff12e4895 100644 --- a/src/routes/api.js +++ b/src/routes/api.js @@ -19,9 +19,9 @@ module.exports = function (app, middleware, controllers) { router.get('/user/uid/:userslug/export/uploads', middleware.checkAccountPermissions, middleware.exposeUid, controllers.user.exportUploads); router.get('/user/uid/:userslug/export/profile', middleware.checkAccountPermissions, middleware.exposeUid, controllers.user.exportProfile); - router.get('/:type/pid/:id', controllers.api.getObject); - router.get('/:type/tid/:id', controllers.api.getObject); - router.get('/:type/cid/:id', controllers.api.getObject); + router.get('/:type/pid/:id', middleware.authenticateOrGuest, controllers.api.getObject); + router.get('/:type/tid/:id', middleware.authenticateOrGuest, controllers.api.getObject); + router.get('/:type/cid/:id', middleware.authenticateOrGuest, controllers.api.getObject); router.get('/categories/:cid/moderators', controllers.api.getModerators); router.get('/recent/posts/:term?', controllers.posts.getRecentPosts); diff --git a/src/routes/feeds.js b/src/routes/feeds.js index 6eab1f95a9..569db57266 100644 --- a/src/routes/feeds.js +++ b/src/routes/feeds.js @@ -39,7 +39,7 @@ module.exports = function (app, middleware) { }; function validateTokenIfRequiresLogin(requiresLogin, cid, req, res, callback) { - var uid = req.query.uid; + var uid = parseInt(req.query.uid, 10) || 0; var token = req.query.token; if (!requiresLogin) { @@ -148,14 +148,14 @@ function generateForTopic(req, res, callback) { ], callback); } -function generateForCategory(req, res, next) { +function generateForCategory(req, res, callback) { if (meta.config['feeds:disableRSS']) { return controllers404.send404(req, res); } var cid = req.params.category_id; var category; if (!parseInt(cid, 10)) { - return next(); + return setImmediate(callback); } async.waterfall([ function (next) { @@ -177,6 +177,9 @@ function generateForCategory(req, res, next) { }, function (results, next) { category = results.category; + if (!category) { + return callback(); + } validateTokenIfRequiresLogin(!results.privileges.read, cid, req, res, next); }, function (next) { @@ -191,7 +194,7 @@ function generateForCategory(req, res, next) { function (feed) { sendFeed(feed, res); }, - ], next); + ], callback); } function generateForTopics(req, res, next) { diff --git a/src/routes/index.js b/src/routes/index.js index a7e92da3ff..3c13e89a9c 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -87,19 +87,10 @@ function groupRoutes(app, middleware, controllers) { } module.exports = function (app, middleware, callback) { - var routers = [ - express.Router(), // plugin router - express.Router(), // main app router - express.Router(), // auth router - ]; - var pluginRouter = routers[0]; - pluginRouter.render = function () { + const router = express.Router(); + router.render = function () { app.render.apply(app, arguments); }; - - var router = routers[1]; - var authRouter = routers[2]; - var relativePath = nconf.get('relative_path'); var ensureLoggedIn = require('connect-ensure-login'); @@ -111,11 +102,25 @@ module.exports = function (app, middleware, callback) { // handle custom homepage routes router.use('/', controllers.home.rewrite); - pluginRouter.use('/', controllers.home.rewrite); // homepage handled by `action:homepage.get:[route]` setupPageRoute(router, '/', middleware, [], controllers.home.pluginHook); + async.series([ + async.apply(plugins.reloadRoutes, router), + async.apply(authRoutes.reloadRoutes, router), + async.apply(addCoreRoutes, app, router, middleware), + async.apply(user.addInterstitials), + function (next) { + winston.info('Routes added'); + next(); + }, + ], function (err) { + callback(err); + }); +}; + +function addCoreRoutes(app, router, middleware, callback) { adminRoutes(router, middleware, controllers); metaRoutes(router, middleware, controllers); apiRoutes(router, middleware, controllers); @@ -132,9 +137,8 @@ module.exports = function (app, middleware, callback) { userRoutes(router, middleware, controllers); groupRoutes(router, middleware, controllers); - routers.forEach((router) => { - app.use(relativePath || '/', router); - }); + var relativePath = nconf.get('relative_path'); + app.use(relativePath || '/', router); if (process.env.NODE_ENV === 'development') { require('./debug')(app, middleware, controllers); @@ -155,11 +159,6 @@ module.exports = function (app, middleware, callback) { statics.unshift({ route: '/assets/uploads', path: nconf.get('upload_path') }); } - // Skins - meta.css.supportedSkins.forEach(function (skin) { - app.use(relativePath + '/assets/client-' + skin + '.css', middleware.buildSkinAsset); - }); - statics.forEach(function (obj) { app.use(relativePath + obj.route, middleware.trimUploadTimestamps, express.static(obj.path, staticOptions)); }); @@ -167,14 +166,19 @@ module.exports = function (app, middleware, callback) { res.redirect(relativePath + '/assets/uploads' + req.path + '?' + meta.config['cache-buster']); }); + // Skins + meta.css.supportedSkins.forEach(function (skin) { + app.use(relativePath + '/assets/client-' + skin + '.css', middleware.buildSkinAsset); + }); + // only warn once var warned = new Set(); // DEPRECATED (v1.12.0) app.use(relativePath + '/assets/stylesheet.css', function (req, res) { if (!warned.has(req.path)) { - winston.warn('[deprecated] Accessing `/assets/stylesheet.css` is deprecated to be REMOVED in NodeBB v1.12.0. ' - + 'Use `/assets/client.css` to access this file'); + winston.warn('[deprecated] Accessing `/assets/stylesheet.css` is deprecated to be REMOVED in NodeBB v1.12.0. ' + + 'Use `/assets/client.css` to access this file'); warned.add(req.path); } res.redirect(relativePath + '/assets/client.css?' + meta.config['cache-buster']); @@ -184,17 +188,5 @@ module.exports = function (app, middleware, callback) { app.use(controllers['404'].handle404); app.use(controllers.errors.handleURIErrors); app.use(controllers.errors.handleErrors); - - // Add plugin routes - async.series([ - async.apply(plugins.reloadRoutes, pluginRouter), - async.apply(authRoutes.reloadRoutes, authRouter), - async.apply(user.addInterstitials), - function (next) { - winston.info('Routes added'); - next(); - }, - ], function (err) { - callback(err); - }); -}; + setImmediate(callback); +} diff --git a/src/sitemap.js b/src/sitemap.js index 38f29a3d9c..663f7da08e 100644 --- a/src/sitemap.js +++ b/src/sitemap.js @@ -42,8 +42,8 @@ sitemap.render = function (callback) { sitemap.getPages = function (callback) { if ( - sitemap.maps.pages - && Date.now() < parseInt(sitemap.maps.pages.cacheSetTimestamp, 10) + parseInt(sitemap.maps.pages.cacheResetPeriod, 10) + sitemap.maps.pages && + Date.now() < parseInt(sitemap.maps.pages.cacheSetTimestamp, 10) + parseInt(sitemap.maps.pages.cacheResetPeriod, 10) ) { return sitemap.maps.pages.toXML(callback); } @@ -82,8 +82,8 @@ sitemap.getPages = function (callback) { sitemap.getCategories = function (callback) { if ( - sitemap.maps.categories - && Date.now() < parseInt(sitemap.maps.categories.cacheSetTimestamp, 10) + parseInt(sitemap.maps.categories.cacheResetPeriod, 10) + sitemap.maps.categories && + Date.now() < parseInt(sitemap.maps.categories.cacheSetTimestamp, 10) + parseInt(sitemap.maps.categories.cacheResetPeriod, 10) ) { return sitemap.maps.categories.toXML(callback); } @@ -124,8 +124,8 @@ sitemap.getTopicPage = function (page, callback) { var max = min + numTopics; if ( - sitemap.maps.topics[page - 1] - && Date.now() < parseInt(sitemap.maps.topics[page - 1].cacheSetTimestamp, 10) + parseInt(sitemap.maps.topics[page - 1].cacheResetPeriod, 10) + sitemap.maps.topics[page - 1] && + Date.now() < parseInt(sitemap.maps.topics[page - 1].cacheSetTimestamp, 10) + parseInt(sitemap.maps.topics[page - 1].cacheResetPeriod, 10) ) { return sitemap.maps.topics[page - 1].toXML(callback); } diff --git a/src/socket.io/admin.js b/src/socket.io/admin.js index 4077967ad9..a2afd326d2 100644 --- a/src/socket.io/admin.js +++ b/src/socket.io/admin.js @@ -179,10 +179,8 @@ SocketAdmin.config.setMultiple = function (socket, data, callback) { } var changes = {}; + data = meta.configs.deserialize(data); Object.keys(data).forEach(function (key) { - if (typeof meta.config[key] === 'number') { - data[key] = parseInt(data[key], 10); - } if (data[key] !== meta.config[key]) { changes[key] = data[key]; changes[key + '_old'] = meta.config[key]; diff --git a/src/socket.io/categories.js b/src/socket.io/categories.js index 06cfbfecd7..2af93cad2d 100644 --- a/src/socket.io/categories.js +++ b/src/socket.io/categories.js @@ -21,7 +21,7 @@ SocketCategories.get = function (socket, data, callback) { isAdmin: async.apply(user.isAdministrator, socket.uid), categories: function (next) { async.waterfall([ - async.apply(categories.getAllCidsFromSet, 'categories:cid'), + async.apply(categories.getCidsByPrivilege, 'categories:cid', socket.uid, 'find'), async.apply(categories.getCategoriesData), ], next); }, @@ -132,23 +132,16 @@ SocketCategories.getCategoriesByPrivilege = function (socket, privilege, callbac }; SocketCategories.getMoveCategories = function (socket, data, callback) { + SocketCategories.getSelectCategories(socket, data, callback); +}; + +SocketCategories.getSelectCategories = function (socket, data, callback) { async.waterfall([ function (next) { async.parallel({ isAdmin: async.apply(user.isAdministrator, socket.uid), categories: function (next) { - async.waterfall([ - function (next) { - categories.getAllCidsFromSet('categories:cid', next); - }, - function (cids, next) { - categories.getCategories(cids, socket.uid, next); - }, - function (categoriesData, next) { - categoriesData = categories.getTree(categoriesData); - categories.buildForSelectCategories(categoriesData, next); - }, - ], next); + categories.buildForSelect(socket.uid, 'find', next); }, }, next); }, diff --git a/src/socket.io/groups.js b/src/socket.io/groups.js index 05db6e486a..e4f7a0a985 100644 --- a/src/socket.io/groups.js +++ b/src/socket.io/groups.js @@ -249,10 +249,10 @@ SocketGroups.create = function (socket, data, callback) { }; SocketGroups.delete = isOwner(function (socket, data, callback) { - if (data.groupName === 'administrators' - || data.groupName === 'registered-users' - || data.groupName === 'guests' - || data.groupName === 'Global Moderators') { + if (data.groupName === 'administrators' || + data.groupName === 'registered-users' || + data.groupName === 'guests' || + data.groupName === 'Global Moderators') { return callback(new Error('[[error:not-allowed]]')); } diff --git a/src/socket.io/helpers.js b/src/socket.io/helpers.js index 76e128e044..256389cac6 100644 --- a/src/socket.io/helpers.js +++ b/src/socket.io/helpers.js @@ -70,8 +70,8 @@ function filterTidCidIgnorers(uids, tid, cid, callback) { }, function (results, next) { uids = uids.filter(function (uid, index) { - return results.topicFollowed[index] - || (!results.topicFollowed[index] && !results.topicIgnored[index] && !results.categoryIgnored[index]); + return results.topicFollowed[index] || + (!results.topicFollowed[index] && !results.topicIgnored[index] && !results.categoryIgnored[index]); }); next(null, uids); }, diff --git a/src/socket.io/index.js b/src/socket.io/index.js index 1919fb1ad8..1ced452877 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -46,20 +46,16 @@ Sockets.init = function (server) { * Can be overridden via config (socket.io:origins) */ if (process.env.NODE_ENV !== 'development') { - var domain = nconf.get('cookieDomain'); - var parsedUrl = url.parse(nconf.get('url')); - var override = nconf.get('socket.io:origins'); - if (!domain) { - domain = parsedUrl.hostname; // cookies don't provide isolation by port: http://stackoverflow.com/a/16328399/122353 - } + const parsedUrl = url.parse(nconf.get('url')); - if (!override) { - io.origins(parsedUrl.protocol + '//' + domain + ':*'); - winston.info('[socket.io] Restricting access to origin: ' + parsedUrl.protocol + '//' + domain + ':*'); - } else { - io.origins(override); - winston.info('[socket.io] Restricting access to origin: ' + override); - } + // cookies don't provide isolation by port: http://stackoverflow.com/a/16328399/122353 + const domain = nconf.get('cookieDomain') || parsedUrl.hostname; + + const origins = nconf.get('socket.io:origins') || `${parsedUrl.protocol}//${domain}:*`; + nconf.set('socket.io:origins', origins); + + io.origins(origins); + winston.info('[socket.io] Restricting access to origin: ' + origins); } io.listen(server, { diff --git a/src/socket.io/user/profile.js b/src/socket.io/user/profile.js index e84442650e..b3eb7de9be 100644 --- a/src/socket.io/user/profile.js +++ b/src/socket.io/user/profile.js @@ -220,10 +220,6 @@ module.exports = function (SocketUser) { }, function (results, next) { isBlocked = results.is; - if (!results.can && !isBlocked) { - return next(new Error('[[error:cannot-block-privileged]]')); - } - user.blocks[isBlocked ? 'remove' : 'add'](data.blockeeUid, data.blockerUid, next); }, ], function (err) { diff --git a/src/topics/merge.js b/src/topics/merge.js index e97261f8d7..5095606729 100644 --- a/src/topics/merge.js +++ b/src/topics/merge.js @@ -1,6 +1,7 @@ 'use strict'; -var async = require('async'); +const async = require('async'); +const plugins = require('../plugins'); module.exports = function (Topics) { Topics.merge = function (tids, uid, callback) { @@ -34,7 +35,13 @@ module.exports = function (Topics) { }, next); }, ], next); - }, callback); + }, function (err) { + if (err) { + return callback(err); + } + plugins.fireHook('action:topic.merge', { uid: uid, tids: tids, mergeIntoTid: mergeIntoTid, otherTids: otherTids }); + callback(); + }); }; function findOldestTopic(tids) { diff --git a/src/topics/sorted.js b/src/topics/sorted.js index 2347134784..ae9a255da8 100644 --- a/src/topics/sorted.js +++ b/src/topics/sorted.js @@ -1,13 +1,15 @@ 'use strict'; -var async = require('async'); +const async = require('async'); +const _ = require('lodash'); -var db = require('../database'); -var privileges = require('../privileges'); -var user = require('../user'); -var meta = require('../meta'); -var plugins = require('../plugins'); +const db = require('../database'); +const privileges = require('../privileges'); +const user = require('../user'); +const categories = require('../categories'); +const meta = require('../meta'); +const plugins = require('../plugins'); module.exports = function (Topics) { Topics.getSortedTopics = function (params, callback) { @@ -45,27 +47,17 @@ module.exports = function (Topics) { async.waterfall([ function (next) { if (params.term === 'alltime') { - var key = 'topics:' + params.sort; if (params.cids) { - key = params.cids.map(function (cid) { - if (params.sort === 'recent') { - return 'cid:' + cid + ':tids:lastposttime'; - } else if (params.sort === 'votes') { - return 'cid:' + cid + ':tids:votes'; - } else if (params.sort === 'posts') { - return 'cid:' + cid + ':tids:posts'; - } - return 'cid:' + cid + ':tids'; - }); + getCidTids(params.cids, params.sort, next); + } else { + db.getSortedSetRevRange('topics:' + params.sort, 0, 199, next); } - - db.getSortedSetRevRange(key, 0, 199, next); } else { Topics.getLatestTidsFromSet('topics:tid', 0, -1, params.term, next); } }, function (tids, next) { - if (params.term !== 'alltime') { + if (params.term !== 'alltime' || (params.cids && params.sort !== 'recent')) { sortTids(tids, params, next); } else { next(null, tids); @@ -77,6 +69,30 @@ module.exports = function (Topics) { ], callback); } + function getCidTids(cids, sort, callback) { + const sets = []; + const pinnedSets = []; + cids.forEach(function (cid) { + if (sort === 'recent') { + sets.push('cid:' + cid + ':tids:lastposttime'); + return; + } + sets.push('cid:' + cid + ':tids' + (sort ? ':' + sort : '')); + pinnedSets.push('cid:' + cid + ':tids:pinned'); + }); + async.waterfall([ + function (next) { + async.parallel({ + tids: async.apply(db.getSortedSetRevRange, sets, 0, 199), + pinnedTids: async.apply(db.getSortedSetRevRange, pinnedSets, 0, -1), + }, next); + }, + function (results, next) { + next(null, results.pinnedTids.concat(results.tids)); + }, + ], callback); + } + function sortTids(tids, params, callback) { async.waterfall([ function (next) { @@ -117,6 +133,8 @@ module.exports = function (Topics) { const filter = params.filter; const uid = params.uid; + let topicData; + let topicCids; async.waterfall([ function (next) { if (filter === 'watched') { @@ -133,35 +151,29 @@ module.exports = function (Topics) { privileges.topics.filterTids('read', tids, uid, next); }, function (tids, next) { + Topics.getTopicsFields(tids, ['uid', 'tid', 'cid'], next); + }, + function (_topicData, next) { + topicData = _topicData; + topicCids = _.uniq(topicData.map(topic => topic.cid)).filter(Boolean); + async.parallel({ ignoredCids: function (next) { if (filter === 'watched' || meta.config.disableRecentCategoryFilter) { return next(null, []); } - user.getIgnoredCategories(uid, next); - }, - topicData: function (next) { - Topics.getTopicsFields(tids, ['uid', 'tid', 'cid'], next); + categories.isIgnored(topicCids, uid, next); }, + filtered: async.apply(user.blocks.filter, uid, topicData), }, next); }, function (results, next) { - user.blocks.filter(uid, results.topicData, function (err, filtered) { - if (err) { - return next(err); - } + const isCidIgnored = _.zipObject(topicCids, results.ignoredCids); + topicData = results.filtered; - results.topicData = filtered; - next(null, results); - }); - }, - function (results, next) { const cids = params.cids && params.cids.map(String); - tids = results.topicData.filter(function (topic) { - if (topic && topic.cid) { - return !results.ignoredCids.includes(topic.cid.toString()) && (!cids || (cids.length && cids.includes(topic.cid.toString()))); - } - return false; + tids = topicData.filter(function (topic) { + return topic && topic.cid && !isCidIgnored[topic.cid] && (!cids || (cids.length && cids.includes(topic.cid.toString()))); }).map(topic => topic.tid); plugins.fireHook('filter:topics.filterSortedTids', { tids: tids, params: params }, next); }, diff --git a/src/topics/tags.js b/src/topics/tags.js index 5f78c39b97..4acc8810b5 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -7,6 +7,7 @@ var validator = require('validator'); var _ = require('lodash'); var db = require('../database'); var meta = require('../meta'); +var categories = require('../categories'); var plugins = require('../plugins'); var utils = require('../utils'); var batch = require('../batch'); @@ -59,13 +60,13 @@ module.exports = function (Topics) { Topics.getTopicField(tid, 'cid', next); }, function (cid, next) { - db.getSortedSetRange('cid:' + cid + ':tag:whitelist', 0, -1, next); + categories.getTagWhitelist([cid], next); }, function (tagWhitelist, next) { - if (!tagWhitelist.length) { + if (!Array.isArray(tagWhitelist[0]) || !tagWhitelist[0].length) { return next(null, tags); } - var whitelistSet = new Set(tagWhitelist); + const whitelistSet = new Set(tagWhitelist[0]); tags = tags.filter(tag => whitelistSet.has(tag)); next(null, tags); }, @@ -398,14 +399,14 @@ module.exports = function (Topics) { async.waterfall([ function (next) { if (parseInt(cid, 10)) { - db.getSortedSetRange('cid:' + cid + ':tag:whitelist', 0, -1, next); + categories.getTagWhitelist([cid], next); } else { setImmediate(next, null, []); } }, function (tagWhitelist, next) { - if (tagWhitelist.length) { - setImmediate(next, null, tagWhitelist); + if (Array.isArray(tagWhitelist[0]) && tagWhitelist[0].length) { + setImmediate(next, null, tagWhitelist[0]); } else { db.getSortedSetRevRange('tags:topic:count', 0, -1, next); } diff --git a/src/topics/teaser.js b/src/topics/teaser.js index fa65f5d087..b2e2f57758 100644 --- a/src/topics/teaser.js +++ b/src/topics/teaser.js @@ -34,7 +34,7 @@ module.exports = function (Topics) { teaserPids.push(topic.mainPid); } else if (meta.config.teaserPost === 'last-post') { teaserPids.push(topic.teaserPid || topic.mainPid); - } else if (meta.config.teaserPost === 'last-reply') { + } else { // last-reply and everything else uses teaserPid like `last` that was used before teaserPids.push(topic.teaserPid); } } diff --git a/src/topics/unread.js b/src/topics/unread.js index 8e1466145b..ab07395171 100644 --- a/src/topics/unread.js +++ b/src/topics/unread.js @@ -195,7 +195,7 @@ module.exports = function (Topics) { db.sortedSetScores('uid:' + uid + ':followed_tids', tids, next); }, ignoredCids: function (next) { - user.getIgnoredCategories(uid, next); + categories.isIgnored(cids, uid, next); }, readableCids: function (next) { privileges.categories.filterCids('read', cids, uid, next); @@ -205,6 +205,7 @@ module.exports = function (Topics) { function (results, next) { cid = cid && cid.map(String); results.readableCids = results.readableCids.map(String); + const isCidIgnored = _.zipObject(cids, results.ignoredCids); topicData.forEach(function (topic, index) { function cidMatch(topicCid) { @@ -213,27 +214,27 @@ module.exports = function (Topics) { if (topic && topic.cid && cidMatch(topic.cid) && !blockedUids.includes(parseInt(topic.uid, 10))) { topic.tid = parseInt(topic.tid, 10); - if ((results.isTopicsFollowed[index] || !results.ignoredCids.includes(String(topic.cid)))) { - counts[''] += 1; + if ((results.isTopicsFollowed[index] || !isCidIgnored[topic.cid])) { tidsByFilter[''].push(topic.tid); } if (results.isTopicsFollowed[index]) { - counts.watched += 1; tidsByFilter.watched.push(topic.tid); } if (topic.postcount <= 1) { - counts.unreplied += 1; tidsByFilter.unreplied.push(topic.tid); } if (!userRead[topic.tid]) { - counts.new += 1; tidsByFilter.new.push(topic.tid); } } }); + counts[''] = tidsByFilter[''].length; + counts.watched = tidsByFilter.watched.length; + counts.unreplied = tidsByFilter.unreplied.length; + counts.new = tidsByFilter.new.length; next(null, { counts: counts, @@ -438,10 +439,8 @@ module.exports = function (Topics) { }; Topics.hasReadTopics = function (tids, uid, callback) { - if (!parseInt(uid, 10)) { - return callback(null, tids.map(function () { - return false; - })); + if (!(parseInt(uid, 10) > 0)) { + return setImmediate(callback, null, tids.map(() => false)); } async.waterfall([ @@ -464,9 +463,9 @@ module.exports = function (Topics) { function (results, next) { var cutoff = Topics.unreadCutoff(); var result = tids.map(function (tid, index) { - var read = !results.tids_unread[index] - && (results.topicScores[index] < cutoff - || !!(results.userScores[index] && results.userScores[index] >= results.topicScores[index])); + var read = !results.tids_unread[index] && + (results.topicScores[index] < cutoff || + !!(results.userScores[index] && results.userScores[index] >= results.topicScores[index])); return { tid: tid, read: read, index: index }; }); diff --git a/src/upgrades/1.11.1/remove_ignored_cids_per_user.js b/src/upgrades/1.11.1/remove_ignored_cids_per_user.js new file mode 100644 index 0000000000..f175e4074f --- /dev/null +++ b/src/upgrades/1.11.1/remove_ignored_cids_per_user.js @@ -0,0 +1,21 @@ +'use strict'; + +var db = require('../../database'); + +var batch = require('../../batch'); + +module.exports = { + name: 'Remove uid::ignored:cids', + timestamp: Date.UTC(2018, 11, 11), + method: function (callback) { + const progress = this.progress; + + batch.processSortedSet('users:joindate', function (uids, next) { + progress.incr(uids.length); + const keys = uids.map(uid => 'uid:' + uid + ':ignored:cids'); + db.deleteAll(keys, next); + }, { + progress: this.progress, + }, callback); + }, +}; diff --git a/src/user/admin.js b/src/user/admin.js index 1b273bca48..d545921bbe 100644 --- a/src/user/admin.js +++ b/src/user/admin.js @@ -10,6 +10,9 @@ var plugins = require('../plugins'); module.exports = function (User) { User.logIP = function (uid, ip, callback) { + if (!(parseInt(uid, 10) > 0)) { + return setImmediate(callback); + } var now = Date.now(); async.waterfall([ function (next) { @@ -31,10 +34,7 @@ module.exports = function (User) { db.getSortedSetRevRange('uid:' + uid + ':ip', 0, stop, next); }, function (ips, next) { - ips = ips.map(function (ip) { - return validator.escape(String(ip)); - }); - next(null, ips); + next(null, ips.map(ip => validator.escape(String(ip)))); }, ], callback); }; @@ -48,9 +48,7 @@ module.exports = function (User) { db.getSortedSetRangeWithScores('username:uid', 0, -1, next); }, function (users, next) { - uids = users.map(function (user) { - return user.score; - }); + uids = users.map(user => user.score); plugins.fireHook('filter:user.csvFields', { fields: ['uid', 'email', 'username'] }, next); }, function (data, next) { diff --git a/src/user/approval.js b/src/user/approval.js index c890c4abf4..f3a9712aa3 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -240,11 +240,11 @@ module.exports = function (User) { function (next) { request({ method: 'get', - url: 'http://api.stopforumspam.org/api' - + '?ip=' + encodeURIComponent(user.ip) - + '&email=' + encodeURIComponent(user.email) - + '&username=' + encodeURIComponent(user.username) - + '&f=json', + url: 'http://api.stopforumspam.org/api' + + '?ip=' + encodeURIComponent(user.ip) + + '&email=' + encodeURIComponent(user.email) + + '&username=' + encodeURIComponent(user.username) + + '&f=json', json: true, }, next); }, diff --git a/src/user/auth.js b/src/user/auth.js index 40a9ad7d58..1d2e2ddc27 100644 --- a/src/user/auth.js +++ b/src/user/auth.js @@ -13,7 +13,7 @@ module.exports = function (User) { User.auth = {}; User.auth.logAttempt = function (uid, ip, callback) { - if (parseInt(uid, 10) <= 0) { + if (!(parseInt(uid, 10) > 0)) { return setImmediate(callback); } async.waterfall([ @@ -109,9 +109,9 @@ module.exports = function (User) { var expired; sessions = sessions.filter(function (sessionObj, idx) { - expired = !sessionObj || !sessionObj.hasOwnProperty('passport') - || !sessionObj.passport.hasOwnProperty('user') - || parseInt(sessionObj.passport.user, 10) !== parseInt(uid, 10); + expired = !sessionObj || !sessionObj.hasOwnProperty('passport') || + !sessionObj.passport.hasOwnProperty('user') || + parseInt(sessionObj.passport.user, 10) !== parseInt(uid, 10); if (expired) { expiredSids.push(_sids[idx]); @@ -141,6 +141,9 @@ module.exports = function (User) { User.auth.addSession = function (uid, sessionId, callback) { callback = callback || function () {}; + if (!(parseInt(uid, 10) > 0)) { + return setImmediate(callback); + } db.sortedSetAdd('uid:' + uid + ':sessions', Date.now(), sessionId, callback); }; diff --git a/src/user/blocks.js b/src/user/blocks.js index 51bb4520f1..3dfa429935 100644 --- a/src/user/blocks.js +++ b/src/user/blocks.js @@ -23,7 +23,15 @@ module.exports = function (User) { }; User.blocks.can = function (callerUid, blockerUid, blockeeUid, callback) { + // Guests can't block + if (blockerUid === 0 || blockeeUid === 0) { + return setImmediate(callback, new Error('[[error:cannot-block-guest]]')); + } else if (blockerUid === blockeeUid) { + return setImmediate(callback, new Error('[[error:cannot-block-self]]')); + } + // Administrators and global moderators cannot be blocked + // Only admins/mods can block users as another user async.waterfall([ function (next) { async.parallel({ @@ -37,12 +45,13 @@ module.exports = function (User) { }, function (results, next) { if (results.isBlockeeAdminOrMod) { - return callback(null, false); + return callback(new Error('[[error:cannot-block-privileged]]')); } if (parseInt(callerUid, 10) !== parseInt(blockerUid, 10) && !results.isCallerAdminOrMod) { - return callback(null, false); + return callback(new Error()); } - next(null, true); + + next(); }, ], callback); }; @@ -94,12 +103,14 @@ module.exports = function (User) { }; User.blocks.applyChecks = function (block, targetUid, uid, callback) { - if (parseInt(targetUid, 10) === parseInt(uid, 10)) { - return setImmediate(callback, new Error('[[error:cannot-block-self]]')); - } + User.blocks.can(uid, uid, targetUid, function (err) { + if (err) { + return callback(err); + } - User.blocks.is(targetUid, uid, function (err, is) { - callback(err || (is === block ? new Error('[[error:already-' + (block ? 'blocked' : 'unblocked') + ']]') : null)); + User.blocks.is(targetUid, uid, function (err, is) { + callback(err || (is === block ? new Error('[[error:already-' + (block ? 'blocked' : 'unblocked') + ']]') : null)); + }); }); }; diff --git a/src/user/categories.js b/src/user/categories.js index 8a825e2a61..b81bb8935e 100644 --- a/src/user/categories.js +++ b/src/user/categories.js @@ -10,7 +10,19 @@ module.exports = function (User) { if (parseInt(uid, 10) <= 0) { return setImmediate(callback, null, []); } - db.getSortedSetRange('uid:' + uid + ':ignored:cids', 0, -1, callback); + let cids; + async.waterfall([ + function (next) { + categories.getAllCidsFromSet('categories:cid', next); + }, + function (_cids, next) { + cids = _cids; + db.isMemberOfSortedSets(cids.map(cid => 'cid:' + cid + ':ignorers'), uid, next); + }, + function (isMembers, next) { + next(null, cids.filter((cid, index) => isMembers[index])); + }, + ], callback); }; User.getWatchedCategories = function (uid, callback) { @@ -46,9 +58,7 @@ module.exports = function (User) { if (!exists) { return next(new Error('[[error:no-category]]')); } - db.sortedSetAdd('uid:' + uid + ':ignored:cids', Date.now(), cid, next); - }, - function (next) { + db.sortedSetAdd('cid:' + cid + ':ignorers', Date.now(), uid, next); }, ], callback); @@ -67,9 +77,7 @@ module.exports = function (User) { if (!exists) { return next(new Error('[[error:no-category]]')); } - db.sortedSetRemove('uid:' + uid + ':ignored:cids', cid, next); - }, - function (next) { + db.sortedSetRemove('cid:' + cid + ':ignorers', uid, next); }, ], callback); diff --git a/src/user/delete.js b/src/user/delete.js index de82799505..3c29e23ecb 100644 --- a/src/user/delete.js +++ b/src/user/delete.js @@ -160,7 +160,7 @@ module.exports = function (User) { 'uid:' + uid + ':chats', 'uid:' + uid + ':chats:unread', 'uid:' + uid + ':chat:rooms', 'uid:' + uid + ':chat:rooms:unread', 'uid:' + uid + ':upvote', 'uid:' + uid + ':downvote', - 'uid:' + uid + ':ignored:cids', 'uid:' + uid + ':flag:pids', + 'uid:' + uid + ':flag:pids', 'uid:' + uid + ':sessions', 'uid:' + uid + ':sessionUUID:sessionId', ]; db.deleteAll(keys, next); diff --git a/src/views/admin/advanced/database.tpl b/src/views/admin/advanced/database.tpl index 53533a9249..086b24e179 100644 --- a/src/views/admin/advanced/database.tpl +++ b/src/views/admin/advanced/database.tpl @@ -23,6 +23,10 @@ [[admin/advanced/database:mongo.resident-memory]] [[admin/advanced/database:x-gb, {mongo.mem.resident}]]
    [[admin/advanced/database:mongo.virtual-memory]] [[admin/advanced/database:x-gb, {mongo.mem.virtual}]]
    [[admin/advanced/database:mongo.mapped-memory]] [[admin/advanced/database:x-gb, {mongo.mem.mapped}]]
    +
    + [[admin/advanced/database:mongo.bytes-in]] [[admin/advanced/database:x-gb, {mongo.network.bytesIn}]]
    + [[admin/advanced/database:mongo.bytes-out]] [[admin/advanced/database:x-gb, {mongo.network.bytesOut}]]
    + [[admin/advanced/database:mongo.num-requests]] {mongo.network.numRequests}
    @@ -38,6 +42,9 @@ [[admin/advanced/database:uptime-seconds]] {redis.uptime_in_seconds}
    [[admin/advanced/database:uptime-days]] {redis.uptime_in_days}

    + [[admin/advanced/database:redis.keys]] {redis.keys}
    + [[admin/advanced/database:redis.expires]] {redis.expires}
    + [[admin/advanced/database:redis.avg-ttl]] {redis.avg_ttl}
    [[admin/advanced/database:redis.connected-clients]] {redis.connected_clients}
    [[admin/advanced/database:redis.connected-slaves]] {redis.connected_slaves}
    [[admin/advanced/database:redis.blocked-clients]] {redis.blocked_clients}
    @@ -49,6 +56,12 @@ [[admin/advanced/database:redis.total-connections-recieved]] {redis.total_connections_received}
    [[admin/advanced/database:redis.total-commands-processed]] {redis.total_commands_processed}
    [[admin/advanced/database:redis.iops]] {redis.instantaneous_ops_per_sec}
    + + [[admin/advanced/database:redis.iinput]] [[admin/advanced/database:x-mb, {redis.instantaneous_input}]]
    + [[admin/advanced/database:redis.ioutput]] [[admin/advanced/database:x-mb, {redis.instantaneous_output}]]
    + [[admin/advanced/database:redis.total-input]] [[admin/advanced/database:x-gb, {redis.total_net_input}]]
    + [[admin/advanced/database:redis.total-output]] [[admin/advanced/database:x-gb, {redis.total_net_output}]]
    +
    [[admin/advanced/database:redis.keyspace-hits]] {redis.keyspace_hits}
    [[admin/advanced/database:redis.keyspace-misses]] {redis.keyspace_misses}
    diff --git a/src/views/admin/manage/privileges.tpl b/src/views/admin/manage/privileges.tpl index 586751d400..a4bc0a8997 100644 --- a/src/views/admin/manage/privileges.tpl +++ b/src/views/admin/manage/privileges.tpl @@ -5,19 +5,10 @@ [[admin/manage/categories:privileges.description]]

    -

    +

    [[admin/manage/categories:privileges.category-selector]] - - -
      -
    • [[admin/manage/privileges:global]]
    • - -
    • {../text}
    • - -
    -

    + +

    diff --git a/src/views/admin/partials/categories/create.tpl b/src/views/admin/partials/categories/create.tpl index c1daa78925..a76e195d89 100644 --- a/src/views/admin/partials/categories/create.tpl +++ b/src/views/admin/partials/categories/create.tpl @@ -3,24 +3,14 @@ -
    +
    - +
    -
    +
    - +