diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 49f0a84909..9614d0ea21 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -10,6 +10,8 @@ - **NodeBB version:** - **NodeBB git hash:** +- **Installed NodeBB Plugins:** + - **Database type:** mongo, redis, or postgres - **Database version:** diff --git a/.travis.yml b/.travis.yml index 5811011dff..875624ab1e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,11 @@ services: - postgresql before_install: - cp install/package.json package.json + - sudo apt-get update + - sudo apt-get --yes remove postgresql\* + - sudo apt-get install -y postgresql-12 postgresql-client-12 + - sudo cp /etc/postgresql/{9.6,12}/main/pg_hba.conf + - sudo service postgresql restart 12 before_script: - sleep 15 # wait for mongodb to be ready - "mongo mydb_test --eval 'db.createUser({user:\"travis\", pwd: \"test\", roles: []});'" @@ -14,25 +19,28 @@ after_success: - "npm run coveralls" language: node_js sudo: false -dist: trusty +dist: xenial env: - - CXX=g++-4.8 DB=mongodb TEST_ENV=production - - CXX=g++-4.8 DB=mongodb TEST_ENV=development - - CXX=g++-4.8 DB=redis TEST_ENV=production - - CXX=g++-4.8 DB=postgres TEST_ENV=production + global: + - PGUSER=postgres + - PGPORT=5432 + - CXX=g++-4.8 + jobs: + - "DB=mongodb TEST_ENV=production" + - "DB=mongodb TEST_ENV=development" + - "DB=redis TEST_ENV=production" + - "DB=postgres TEST_ENV=production" addons: apt: sources: - ubuntu-toolchain-r-test - - mongodb-3.4-trusty + - mongodb-4.0-xenial packages: - g++-4.8 - mongodb-org-server - postgresql: "12" node_js: - "12" - "10" - - "8" branches: only: - master diff --git a/CHANGELOG.md b/CHANGELOG.md index c7359fd095..f59f675ee1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,616 @@ +### 1.13.0 (2019-11-13) + +##### Chores + +* incrementing version number - v1.13.0 (c38b2d23) +* incrementing version number - v1.12.2 (810e2c0b) +* **deps:** + * update dependency jsdom to v15.2.1 (9d946d1c) + * update dependency eslint to v6.6.0 (d0e428e9) + * update dependency lint-staged to v9.4.2 (#7954) (d108c7d0) + * update dependency mocha to v6.2.2 (#7984) (e31a47cd) + * update dependency coveralls to v3.0.7 (#7961) (9b308e4b) + * update dependency jsdom to v15.2.0 (#7971) (9b4e9882) + * update dependency husky to v3.0.9 (fd5095a3) + * update dependency husky to v3.0.8 (88cae415) + * update dependency lint-staged to v9.4.1 (a2a7bb3d) + * update node.js to v8.16.1 (f9ad826b) + * update node:8.16.0 docker digest to bb12612 (48cc317c) + * update dependency eslint to v6.5.1 (da12e947) + * update dependency husky to v3.0.7 (10a30e66) + * update commitlint monorepo to v8.2.0 (ddd4e039) + * update dependency mocha to v6.2.1 (b172d106) + * update dependency lint-staged to v9.2.3 (ccccba81) + * update dependency coveralls to v3.0.6 (#7820) (2b1f840e) + * update dependency husky to v3.0.3 (cbede89a) + * update dependency lint-staged to v9 (f2e4664d) + * update dependency eslint-plugin-import to v2.18.2 (#7779) (57b2a553) + * update dependency eslint to v6.1.0 (#7783) (7257e6b2) + * update dependency husky to v3.0.2 (7ad72b32) + * update node:8.16.0 docker digest to c671dc2 (e76214a2) + * update dependency mocha to v6.2.0 (d43f5dcf) + * update node:8.16.0 docker digest to 310db2a (c46a0772) + * update dependency husky to v3.0.1 (28151f86) + * update dependency eslint-plugin-import to v2.18.1 (9fda2c1f) + * update commitlint monorepo to v8.1.0 (f73468d5) + * update dependency coveralls to v3.0.5 (5b746d53) + * update dependency husky to v2.7.0 (1d0fd028) + * update dependency eslint to v6.0.1 (77347d0a) + * update dependency husky to v2.6.0 (fc69e891) + * update dependency eslint-plugin-import to v2.18.0 (744e4428) + * update dependency husky to v2.5.0 (4960b925) + * update dependency lint-staged to v8.2.1 (2fa68e3b) + * update node:8.16.0 docker digest to 06adec3 (fc224cca) + * update dependency husky to v2.4.1 (17ec8fde) + * update node:8.16.0 docker digest to d5ad3f5 (f9e99fa3) + * update node:8.16.0 docker digest to 75b524a (5995834b) + * update node:8.16.0 docker digest to b9a98ae (fca6d794) + * update dependency lint-staged to v8.2.0 (376390c4) + * update dependency husky to v2.4.0 (3d2ec0bb) + * update dependency coveralls to v3.0.4 (c360e0c2) + * update dependency eslint-plugin-import to v2.17.3 (eac4e2f1) + * update node:8.16.0 docker digest to 957cab2 (cc6fa97c) + * update commitlint monorepo to v8 (80532831) + +##### Documentation Changes + +* updated changelog (183b0ed3) + +##### New Features + +* displaying one-click unsubscribe link in email footer (#8024) (df139928) +* #7467, pass query params when redirecting to posts (480a64aa) +* use helpers.setupAdminPageRoute (b5a30006) +* wip, better digest handling (+ eventual digest resend logic) (#7995) (645d6472) +* add action:messaging.save (ac5c560c) +* #7957, allow post queue based on group (1cedc4a0) +* add filter:topics.unreadCutoff (e020b85b) +* Add filter:topic.delete and filter:topic.restore (#7946) (#7989) (989107d9) +* no more session cookie for guests (#7982) (cf7e0cfd) +* Implement WICG change-password-url (#7072) (#7990) (df1efe5f) +* log errors from mubsub (b01a47cb) +* upgrade to sitemap5 (#7980) (d6792188) +* #7964, change all categories at once (485fbd2f) +* closes #7952, translate widget-settings (990508a5) +* remove ability to delete events from acp (554e6711) +* resetting theme will reset skin (03827fa6) +* disable timeout on launch route (4bc77d06) +* add new hook to get custom category tids for unread (b1926054) +* adding filter:login.check and loginFormEntry[] for the filter:login.build hook (#7861) (94810fd6) +* #7932, redirect to group details after creation (2444ed5c) +* add new hook filteR:topics.getSortedTids (b93c826d) +* bypass cropper for gifs (9a756004) +* deprecate file.isFileTypeAllowed (ffe3670f) +* send notification to group owners when someone leaves (ed122364) +* add failing test for pagination (#7924) (22b02f14) +* refactor getSortedSetRange to allow big arrays (b602c044) +* add new test (1e5246f9) +* add rss feed url for tags (bbc2e956) +* add sm2x avatar class #7813 (35a4ca2f) +* #7090, abililty to hide widgets (71cd602d) +* #7760, body-parser config (5de6d885) +* actually cache duh (f05c1dae) +* cache tags:topic:count (63bd252f) +* increase search timeouts (1789ecb4) +* make handleSearch public (ebe5ed22) +* increase size of local cache (b81405a8) +* don't hardcode numberic fields in user search (09410ff1) +* allow only watching core (451c7fd4) +* client-side taskbar.update method, deprecates .updateTitle() (9b09ee0e) +* option to restrict group leaving, closes #7770 (1796b65d) +* preserver querystring when changing category sort (ad96b0e0) +* html sanitization on all filter:parse.* hooks, closes #7872 (2580306d) +* up socket.io-adapter-mongo (3d2cb628) +* update LESS to v3.x, #7855 (#7867) (aea04de0) +* up psql socket.io adapter (b565e568) +* add client side hook for quick search&normal search (f31d30cd) +* allow floating pinned topics to top in getSortedTopics (1d7e0c63) +* promisify recent.getData (6f7ab586) +* faster initial stat loading (89cd31ed) +* cache stats, mongo count sucks (cb50b3f4) +* dashboard stats (3ff6e1bb) +* add filter:search.getPosts (aeb44faf) +* add image and imageClass to post summaries (80bd52fc) +* #7842, make isInvited, isPending work with uids (fa268556) +* convert search controller to async/await (acf12e3d) +* notification on membership acceptance, closes #7835 (1a2a381a) +* additional events logged for various group actions (1ce33faa) +* async (e6353486) +* async/await controllers/admin/dashboard (32ea04a8) +* async/await admin/controllers (72590b34) +* async/await (7beef91c) +* async/await refactor (3cc7ec63) +* async/await controllers/accounts (a3541d88) +* rewrite getRawPost to async/await (b734defb) +* added new filter hook filter:post.getRawPost (973075cf) +* convert categories controller to async/await (e9fd49e2) +* new client-side hooks for chat minimize and close (3d3fa865) +* test psql without defineProperty (#7815) (af1f7249) +* fire updateRemainingLength hook for chats (af968c6a) +* send pids into filter:post.getFields hook (0e07ffa1) +* move cache tpl (65fc0612) +* async refactor (3a9d83a4) +* move group privs above user, add labels (47e30a67) +* widgets/index.js (dec8040c) +* use promise version (4d6b6871) +* #7743, meta/dependencies (1c2540d3) +* #7743, widgets/admin (96ebe7b5) +* #7743, meta/languages and languages (c02686bf) +* added filter:tags.getAll plugin hook (66aa443b) +* #7743, events (102d4b02) +* #7743 meta/errors (97d7a850) +* get rid of async.eachSeries (99cf47ee) +* #7743 meta/tags.js (7b908639) +* #7743 meta/templates.js (79eed9ae) +* #7743 navigation (764a2b12) +* #7743 account/posts controller (e72f3e4f) +* #7743 finish topics controller (9b3f4b98) +* #7743, webserver (0d047f4e) +* #7743 meta/themes.js (7dc0eaf0) +* #7743, meta/sounds (a15c50bf) +* #7743 , meta/cachebuster, meta/configs (7f72181e) +* convert src/messaging/* to async/await (#7778) (756a717e) +* #7743 meta/blacklist (fcf8fd51) +* #7743 meta/index (69860e58) +* #7743 plugins (c126cd85) +* #7743 plugins/data (f5f5f76b) +* dont waste whitespace (17f843f9) +* switch to promise.all (34d85b52) +* #7743, privileges (faccb191) +* #7743 , search.js (6d3a92b8) +* shorter name (8e75646a) +* cache group:members for priv groups (daed76d5) +* #7743 finish groups (72def7df) +* #7743, groups/index, invite, leave,membership (a39ca51e) +* #7743,groups/index,join (d5342a40) +* #7743, groups/delete,ownership,posts,user (fcd4445a) +* #7743 groups/cover,create,data (5e8614e1) +* #7743, finish post module (c0c6c652) +* #7743 posts/diff, posts/edit (c4bb467e) +* #7743, posts module (1b2b308a) +* #7743, finish user module (a51ec591) +* #7743 (6fea46b6) +* #7743 (cd80c263) +* #7743 (0a690c57) +* #7743 (1c5fad6d) +* #7743 (fe4c0481) +* #7743 categories (fcf3e077) +* #7743, user/digest, user/email, user/follow (c610eb14) +* #7743, user/create, user/data, user/delete (d6e36c31) +* #7743 , user/block, user/categories (4541caa4) +* #7743 notifications (6f738c2b) +* remove unused code, add 2 tests (cd2e68cb) +* #7743 user/ban, up mubsub (1970214a) +* #7743, user/approval, user/auth (b24ce976) +* #7743, posts/votes (8ef75be3) +* #7743 posts (e1ecc36d) +* #7743 user/admin.js (2c335955) +* add utils.promiseParallel (4170abfd) +* #7743, posts/user.js (0a6cfb37) +* added new admin option newbiePostEditDuration (#7737) (8a6a58ee) +* returning category data in tags page (75ff4d7d) +* ACP analytics API route (#7725) (a0c0ef1b) +* closes #7718 (ee4d78ca) +* add status to post summaries (41bc6ca2) +* use arrow functions (3100d803) +* ability to sort watched topics, closes #3735 (f24c14d7) +* use fewer system resources to draw the progress bar (d0ee312c) +* removed series from upgrade script (23fb904f) +* remove duped zadds, these are already in topics.onNewPostMade (cb51c239) +* log data on error (f8a7cf73) +* cleanup, use bulk (198d0587) +* #7707, added sortedSetAddBulk (3ecd703e) +* change widget-* to data-widget-* (#7703) (13efbc99) +* shorter setsCard (3780a58f) +* show best & latest posts on profile (b53a60c2) +* use db.sortedSetsAdd (7e54d7aa) +* use db.sortedSetsAdd (29a124c4) +* dont log action:plugins.fireHook (a7600b4b) +* upgrade to connect-mongo 3.0.0, closes #7693 (ebfc369a) +* add hook for user notifications, closes #7672 (ede060a6) +* user/notifications refactor (580f7860) +* send new post/topic event in batches (8c331088) +* allowing count to be passed to ./nodebb events (f6d3cc0e) +* awaitable websockets (#7645) (aee47b29) +* hooks can now return promise or call callbacks (a6436716) +* fallback strings for ACP events (99120676) +* design revamp of ACP events page (#7664) (c7f95cce) +* optimize group rename (48538b28) +* allow multiple scores in sortedSetsAdd (31ccc860) +* optimize copy privileges (0dca13e9) +* on category search reveal children and parents (0721bee1) +* async3 upgrade (#7639) (4d9bc30d) +* #7627, close chat on ajaxify on mobile (6cebc7f0) +* update meta tags on ajaxify (#7580), fixes #7544 (a41769e6) + +##### Bug Fixes + +* **deps:** + * update dependency mongodb to v3.3.4 (#8032) (2093418d) + * update dependency nodebb-theme-vanilla to v11.1.10 (c01699f7) + * update dependency nodebb-theme-persona to v10.1.27 (182397b1) + * update dependency nodebb-plugin-spam-be-gone to v0.6.7 (#8027) (c2565a2f) + * update dependency nodebb-theme-slick to v1.2.27 (#8020) (7122bdc7) + * update dependency nodebb-theme-persona to v10.1.26 (#8019) (73d9752e) + * update dependency connect-mongo to v3.1.2 (#8013) (bfea9d39) + * update dependency postcss to v7.0.21 (#7998) (ef5f6714) + * update dependency nodebb-plugin-composer-default to v6.3.17 (#8009) (e1e2d20c) + * update dependency sharp to v0.23.2 (#8005) (420f9fe4) + * update dependency nodebb-theme-persona to v10.1.25 (#8012) (cb91e756) + * update dependency connect-mongo to v3.1.1 (#8006) (7655265c) + * update dependency connect-mongo to v3.1.0 (#7994) (401d1eed) + * bump persona (6155c460) + * update dependency nodebb-theme-persona to v10.1.23 (#7986) (9bd6f686) + * update dependency nodebb-theme-persona to v10.1.22 (#7965) (bf6ae6d6) + * update dependency nodebb-rewards-essentials to v0.1.2 (#7962) (692d94bf) + * update dependency nodebb-theme-persona to v10.1.21 (#7956) (1a150d8f) + * update dependency nodebb-plugin-spam-be-gone to v0.6.6 (#7944) (cffbb325) + * update dependency nodebb-theme-persona to v10.1.20 (#7943) (9589fa32) + * update dependency nodebb-theme-persona to v10.1.19 (#7942) (0d629f06) + * update dependency connect-redis to v4.0.3 (#7933) (2856333d) + * update dependency spider-detector to v2 (310039e8) + * update socket.io packages to v2.3.0 (764ed7f8) + * update dependency sharp to v0.23.1 (#7928) (17437897) + * update dependency nodebb-plugin-dbsearch to v4.0.6 (#7918) (44cd7189) + * update dependency nodebb-plugin-composer-default to v6.3.16 (#7917) (d8fe6e42) + * update dependency nodebb-plugin-composer-default to v6.3.15 (#7916) (c5e5e24b) + * update dependency nodebb-plugin-composer-default to v6.3.14 (#7914) (e18392ab) + * update dependency nodebb-theme-persona to v10.1.18 (#7906) (8ed80bcb) + * update dependency nodebb-rewards-essentials to v0.1.1 (#7905) (5b8bb3e4) + * update dependency connect-redis to v4 (#7869) (8b7f6566) + * update dependency nodebb-plugin-mentions to v2.7.3 (#7899) (b2423bae) + * update dependency nodebb-plugin-mentions to v2.7.2 (#7898) (a3120a62) + * update dependency nodebb-plugin-dbsearch to v4.0.5 (#7896) (106c20e2) + * update dependency nodebb-plugin-composer-default to v6.3.13 (#7895) (fa251ece) + * update dependency nodebb-plugin-mentions to v2.7.1 (8c2fc577) + * update dependency nodebb-plugin-composer-default to v6.3.12 (#7889) (429e124f) + * update dependency nodebb-plugin-composer-default to v6.3.11 (#7888) (516b62ea) + * update dependency nodebb-plugin-composer-default to v6.3.10 (6a4a9e26) + * update dependency nodebb-plugin-dbsearch to v4.0.4 (#7883) (12ba589d) + * update dependency postcss to v7.0.18 (c75f3d27) + * update dependency nodebb-theme-persona to v10.1.17 (317c6771) + * update dependency nodebb-theme-vanilla to v11.1.8 (6e9caddc) + * update dependency nodebb-plugin-composer-default to v6.3.9 (effe3989) + * update dependency nodebb-plugin-mentions to v2.7.0 (b69769bb) + * update dependency benchpressjs to v2 (#7876) (9149db1f) + * update dependency nodebb-plugin-composer-default to v6.3.8 (793c5eaa) + * update dependency nodebb-plugin-composer-default to v6.3.7 (57de99d2) + * update dependency mongodb to v3.3.2 (#7871) (4ee2c090) + * update dependency nodebb-plugin-spam-be-gone to v0.6.5 (#7865) (8ce2a5fc) + * update dependency mongodb to v3.3.1 (#7862) (0dfce49f) + * update dependency connect-pg-simple to v6 [security] (#7864) (e4b5d0b4) + * update dependency nodebb-plugin-mentions to v2.6.1 (a1210985) + * update dependency nodebb-plugin-mentions to v2.6.0 (cdccc646) + * update dependency rimraf to v3 (#7843) (2f02edbc) + * update dependency rimraf to v2.7.1 (#7838) (cf2504f8) + * update dependency nodebb-theme-persona to v10.1.16 (#7848) (ca7ba9be) + * update dependency nodebb-theme-persona to v10.1.15 (#7845) (b1c0beb7) + * update dependency nodebb-theme-persona to v10.1.14 (#7837) (661284cf) + * update dependency nodebb-theme-persona to v10.1.13 (eaea6f63) + * update dependency sitemap to v4 (d3d677da) + * update dependency commander to v3 (7a5dbd9f) + * update dependency mongodb to v3.3.0 (360e172e) + * update dependency nodebb-plugin-markdown to v8.10.4 (61f9be99) + * update dependency nodebb-plugin-markdown to v8.10.3 (d860f8c7) + * update dependency sharp to v0.23.0 (#7806) (2258452c) + * update dependency nodebb-theme-persona to v10.1.12 (#7799) (b9aac424) + * update dependency nodebb-plugin-dbsearch to v4 (#7797) (d98313b5) + * update dependency nodebb-plugin-dbsearch to v3.0.8 (#7796) (ef734b62) + * update dependency nodebb-theme-persona to v10.1.11 (8b1fc5c8) + * update dependency nodebb-theme-vanilla to v11.1.7 (ba1bb528) + * update dependency nodebb-theme-vanilla to v11.1.6 (#7784) (7a88c4cc) + * update dependency nodebb-theme-slick to v1.2.26 (#7782) (e074b0bf) + * update dependency nodebb-theme-persona to v10.1.10 (#7781) (4f20b4d3) + * update dependency nodebb-plugin-composer-default to v6.3.6 (3fdc638b) + * update dependency connect-redis to v3.4.2 (8a11193f) + * update dependency nodebb-plugin-mentions to v2.5.4 (45223cde) + * update dependency nodebb-plugin-markdown to v8.10.2 (86546232) + * update dependency nodebb-theme-persona to v10.1.9 (#7759) (c1660a1a) + * update dependency nodebb-plugin-dbsearch to v3.0.7 (#7758) (efedd621) + * update dependency nodebb-plugin-composer-default to v6.3.5 (7f4b1043) + * update dependency nodebb-theme-vanilla to v11.1.5 (#7756) (15e01d12) + * update dependency nodebb-theme-persona to v10.1.8 (#7755) (19679608) + * update dependency nodebb-theme-persona to v10.1.7 (#7754) (3cb6cfe8) + * update dependency nodebb-plugin-composer-default to v6.3.3 (8394a0fd) + * update dependency nodebb-theme-vanilla to v11.1.4 (#7741) (43ce5f8a) + * update dependency nodebb-theme-persona to v10.1.5 (27da2325) + * update dependency validator to v11.1.0 (#7738) (bd09ba92) + * bump composer-default (851424a7) + * update dependency nodebb-theme-persona to v10.1.4 (f426e105) + * update dependency nodebb-plugin-composer-default to v6.2.16 (#7723) (fb087029) + * update dependency nodebb-theme-persona to v10.1.3 (413259a2) + * update dependency nodebb-theme-lavender to v5.0.11 (#7705) (208c821e) + * update dependency nodebb-theme-vanilla to v11.1.3 (#7714) (e0b2ae8d) + * update dependency nodebb-theme-slick to v1.2.25 (#7713) (af7ecd2f) + * update dependency nodebb-theme-persona to v10.1.2 (#7712) (e5733f40) + * update dependency nodebb-plugin-mentions to v2.5.3 (26ff02dc) + * update dependency nodebb-theme-persona to v10.1.1 (4e513cf3) + * update dependency nodebb-theme-vanilla to v11.1.2 (c2887505) + * update dependency nodebb-theme-vanilla to v11.1.1 (#7700) (b3ed89f5) + * update dependency nodebb-theme-slick to v1.2.24 (#7699) (629b5ce3) + * update to eslint@6 (289dada5) + * update dependency nodebb-plugin-emoji to v3 (15020b46) + * update dependency nodebb-plugin-emoji to v3 (6b43d26f) + * update dependency nodebb-theme-persona to v10.1.0 (fc89516e) + * update dependency nodebb-theme-vanilla to v11.1.0 (c9689f11) + * update dependency nodebb-theme-persona to v10.0.1 (#7687) (ada8f22e) + * update dependency nodebb-theme-vanilla to v11.0.1 (#7688) (6db3604e) + * update dependency nodebb-theme-vanilla to v11 (89fea9d3) + * update dependency nodebb-theme-persona to v10 (0a7778bd) + * update dependency nodebb-theme-lavender to v5.0.10 (#7682) (e1e4abeb) + * update dependency nodebb-plugin-markdown to v8.10.0 (de046297) + * update dependency postcss to v7.0.17 (ae891390) + * update dependency nodebb-rewards-essentials to v0.0.14 (#7671) (3f4f8afa) + * update dependency mongodb to v3.2.7 (#7665) (988cbb63) + * update dependency nodebb-plugin-composer-default to v6.2.15 (e21246a9) + * update dependency nodebb-theme-persona to v9.1.38 (#7652) (d202be5b) + * update dependency nodebb-theme-vanilla to v10.1.34 (#7653) (e3308659) + * update dependency nodebb-theme-vanilla to v10.1.33 (#7651) (6f70397b) + * update dependency nodebb-theme-persona to v9.1.37 (#7650) (d43bdb41) + * update dependency async to v3.0.1 (#7649) (3b8e6e15) + * update dependency mongodb to v3.2.6 (#7616) (3f21096d) + * update dependency validator to v11 (a3d42404) + * update dependency nodebb-plugin-composer-default to v6.2.14 (#7635) (b174c2d2) + * update dependency nodebb-theme-vanilla to v10.1.32 (#7631) (85ca5b19) + * update dependency nodebb-plugin-composer-default to v6.2.13 (d1f29e26) + * update dependency nodebb-plugin-spam-be-gone to v0.6.3 (#7614) (20fa751c) +* crash if post doesn't have topic data (eabc6f47) +* don't touch objects that don't have the required fields (e52ecfaf) +* add missing await to sendValidationEmail (f4381ba3) +* #8007 added tfoot to clear new group button (dee1d447) +* tests (e3c9dafa) +* #8018, allow absolute urls in notification.path (0037a038) +* #8010, fix isBanned call (59242d31) +* #8003, check children recursively (c4e58160) +* dont show delete topics on unread (b91c4790) +* #8000, tweak wording; password reset success (3952849f) +* parseInt cutoff (0e5e47f4) +* lint (4b8897d9) +* convert param to string in slugify (441dd86d) +* cli/reset.js (#7979) (f9f85fc4) +* #7977, fix undefined url (#7978) (95a372df) +* passwords always expiring upon login (ddf3812c) +* #7974 (#7976) (ca3be1f3) +* delete follower/followingCount as well (d72b0d16) +* event tests (0da4f7ee) +* #7958, give rewards one by one (3775301f) +* rewards page acp not loading rewards (88818a5b) +* #7929, use fixed bootswatch (dd202931) +* #7960, dont try to save size for non images (f272daaf) +* #7941, validate some input fields (565f9726) +* don't show deleted topics on unread (661a0f50) +* #7951, don't send notification for system messages (c01b0fbd) +* #7953, allow icon only group badges (5b458fc7) +* remove 0 fields (ac4a5004) +* remove unused data from post/topic/user hashes (75bcb0f4) +* groups not visible on widget panes (205d3f9d) +* new nav items will show group select (c5f7b66c) +* move post and change owner (f402d727) +* 404 on new groups with spaces (b19f0a68) +* #7940, run upgrade scripts on startup (7823144b) +* #7949, delete old user notifs (38322ec3) +* tests (6fb29e84) +* check threshold before setting bookmark (f983f536) +* mongo collection stats (4e28e575) +* #7947, disable unused cookie (91e8e390) +* #7945, show watched categories in ignored categories (c9bf6d0f) +* db.init calls (18bf865d) +* #7938, escape username in registration queue (d5dda26f) +* #7901, handle group names that are translation keys (3455c27a) +* fix the order of groups on user profile (41f8da2e) +* #7935, ACP digest wording (54c9f877) +* #7934, return tids (10f168b8) +* tests (3caa387a) +* tests (9c051386) +* remove jquery (95ab0712) +* picture not showing up in change modal (13c87059) +* profile page meta tags getting escaped twice (7effc892) +* missing await (2150701f) +* potential for XSS here (40f131a6) +* account/categories (7a0f6074) +* redis tests (1f054c7e) +* #7921, dont create wrong entries in db for flag (a651d154) +* #7913, dont allow urls in fullname/location, validate birthday (babb9d7c) +* upgrade scripts (bd026cb1) +* only allow png/jpg/bmp in cover/profile images (96ab8d05) +* #7919, add useUnifiedTopology (910b9b88) +* crash in feed (873ec519) +* lang key (795d4183) +* time cutoff and lang string (5b8550f0) +* returned data (87f6ac59) +* dont send all category data back to recent&unread etc (955e00fd) +* #7912 (ecf39727) +* only return necessary data for categories (307abaa8) +* dont crash if callback is undefined (e0fec866) +* #7800, dont crash on resize (781b3f1a) +* change params (de461968) +* remove dupe code (9b151b23) +* #7894, translate log in to view (2a5fe2b8) +* minor typo (b99279a8) +* #7893, check private upload setting (0843497d) +* #7892, handle string 'true'/'false' (77cb4b55) +* dont show deleted topics in digest (4652c68b) +* #7824, update timeago settings on userlanguage change (3887fc67) +* don't move theme/plugin to top if its already active (acd95764) +* #7853, dissociation on post purge (30a86ed5) +* added comment back (0c4cd840) +* inability for plugins to actually alter parser sanitization config (fe452762) +* htmlentity instead of url encoding for room rename system message (9b8ac89e) +* page count for filters (e291a609) +* #7866, show correct title based on digest interval (547bb496) +* #7780 (21e81f96) +* pinned tids showing on page > 1 (f2912e9f) +* #7860, allow running single upgrade scripts from plugins (a4dec7e3) +* reset should not automatically build assets (a67762bc) +* update morgan and lodash (2b1912a9) +* #7842, groups.invite works with an array of uids (1e0190ab) +* #7844, add uid to events, log plugin install/uninstall events (592d9c82) +* removed console.logs (c44bf48c) +* broken tests from 71b205a889da1ee8dd326b0891d122a522084f54 (f736f0b3) +* typo (c6c13725) +* category description getting translated in ACP (647713f3) +* #7791 (71620519) +* #7831, fix pagination (014e3153) +* remove empty line (292bbe34) +* remove useless catchs and empty line (5fce4558) +* #7823, fix topic move readding pids when topic is deleted (fd5f9822) +* #7826, fix order of categories on recent dropdown (3ecac97d) +* redis pubsub not being required correctly (8d4f2086) +* mongo.close using wrong client (186321e6) +* digest not sending topics (bc6f22eb) +* #7816, adding GDPR and TOU interstitials earlier on route reloading (52a2e5d6) +* #7809, dont check postDelay if submitting from queue (9780f5b9) +* newPostEditDuration (2abe244b) +* #7789 (6a289fba) +* #7798, fix nested post selection (666e0eaf) +* #7788, fix on topic move and new post (8bf40d04) +* #7788, fix another edge case (053ff510) +* topicData passed to action:topic.edit (b10ad7b6) +* derpy catch (ce912886) +* #7788 No new posts (#7793) (3c32d860) +* user urls in subfolder install (6a486e35) +* #7765 (0b498acd) +* tests (87552c55) +* revert requires (3dd806dc) +* #7763, parse about me on all profile pages (f8d34101) +* status and groupTitle, if its not set (e2e33dfb) +* don't return promise (2f0a331f) +* socket.io methods calling callbacks twice if method returns promise (44a33520) +* tests (87b1148f) +* tests (930ffd07) +* #7601 removed check for another user when sending messages (0e8ee31b) +* mongodb tests (3b24de4c) +* getTopicsFromSet (13aaf07b) +* #7762, allow array for isBanned (9eb1fcd4) +* add flag for change post owner (46639be3) +* sitemap ajaxify (9f78bd7a) +* #7751, make necro separator a partial (2b70e86f) +* #7748, if reputation system is disabled, dont check min reputation (7b95ebbb) +* remove left over code, use proper names (0ac49d63) +* compatibility conditional (fba67196) +* private upload img replacement should happen before img wrapping (16aae517) +* #7423 private uploads are linked to login page, for guests (49e3a368) +* typo (f3440ebf) +* #7722, hsts deprecation warnings (8b1dadb7) +* upgrade script #7720 (accf48f3) +* indents (a5de54f8) +* remove debug code that should not have made it in (af17c6e3) +* dont display post tools if there are no options (708df46e) +* output span in buildAvatar helper instead of div (69fae1a7) +* restore uid in teasers userObj (67b8cb89) +* dont allow edit if post is deleted by someone else (667bc67f) +* dont show delete posts on profile (e48c7cd7) +* on new post add it to cid::uid::pids (6a7bc1c5) +* #5570, create per category user post zsets (a39f0ef5) +* restrict drag drop to pin icon, closes #7702 (e1c05e59) +* remove dupe code (68e5d7ad) +* get uids directly for csv (39ee3980) +* typo (a251032f) +* id/for (b4cc8d88) +* #7659 add option to change cookie link url (25ea6347) +* middle vertical-align for .avatar elements (1894cd9b) +* dependency checker always triggering dep upgrade, hopefully (c241551d) +* #7483, show latest undeleted message as teaser (644504ff) +* #7567, allow invite and approval at the same time (4b843ba1) +* #7625, on group rename update nav/widget items (5b85ed31) +* psql error (8d319e42) +* try to fix psql :dog: (2e6b562f) +* no need for moderate bit for global mods and admins (8aef689f) +* attribute name so it works for both templates (ebb32e78) +* #7647, fix getModeratorUids (64679b37) +* #7644 (5cd9e1bf) +* bad usage of async requisition (603c5262) +* 7638, returnTo accidentally saved into user hash (f321b426) +* #7634, make strip exif configurable (157b921e) +* #7636, use reputation threshold for post queue (a8409fbd) +* #7623, wait for lastonline to update on /users (63e5d383) +* https://github.com/barisusakli/nodebb-plugin-dbsearch/issues/53 (e65ddc98) +* #7593, unable to set account password if no password set (80c0d579) +* incorrect pathname format for app.previousUrl (a97e97b9) +* #7598, use notice element instead of alert (106d52a4) +* #7620, allow adding new fields into user objects for posts (a8e65205) +* #7629, new filter hook for room rename (7ba4a864) +* #7628, log email send errors (7a4b68e8) +* {username} not working in notification.tpl (f55cc667) +* do not prevent nbb from starting (3b0459a0) +* #7624, default open state on stateless flags (91f0bce6) +* #7431, add /unread link to topic route (15391da5) +* #7619 (35d10f76) +* #7618 save pathname into app.previousUrl ins. of entire url (7e5cb72a) +* handle missing timestamps (172e6888) +* broken test for meta tags on ajaxify (b70e03a7) +* #7613 (15ce23da) +* #7600, removing nbsp from email CTAs (#7606) (f552cea5) +* #7604 shortened CTA text and added custom text for some notifs (#7605) (b32da57f) +* **style:** + * requiring parens in block bodies (29f96b19) + * updated code to follow new eslint recommendations (09212309) + +##### Refactors + +* use arrow function (6b3eb014) +* async/await (02d38caf) +* remove log, topics.exists (f8c8038a) +* async/await (dc8d721c) +* async/await mongo (1f0c6f3d) +* async/await socket.io/index (603908c1) +* async/await image.js (c5ffd8cc) +* remove var (05e753c7) +* async/await flags.js (ac6eb31c) +* async/await flags (0ced71be) +* shorter map (572bc297) +* remove logs (03971049) +* dont modify key (7e7ea7a6) +* remove logs (e32a5546) +* async/await flags (9ee1a882) +* shorter, new Date doesnt throw (625b0815) +* remove temp var (b842057f) +* async/await file (f9d6912b) +* async/await analytics (223c108c) +* change to const (5505628c) +* returned fields (86b16629) +* async/await emailer (63bd3fc5) +* async/await routes/feeds (ec3b5dd9) +* async/await rewards (b110aec6) +* async/await socket.io (a7d2b8a1) +* async/await (52b2d670) +* async/await (75d7ae92) +* async/await socket.io/topics (5c2afe5e) +* async/await controllers/user.js (3c6c40b1) +* async/await uploads (5c0266d8) +* move tos parsing to /tos (3e2ed21d) +* remove commented out code (ec98945a) +* async/await controllers/authentication (b9105ef9) +* remove async from isPasswordValid, function is sync (22f80116) +* make categories.buildForSelectCategories non async (6cda3698) +* remove dupe code (a4d84a66) +* async/await socket.io/posts (e93ef0d7) +* async/await socket.io/admin (88dfbf21) +* socket.io/admin/categories async/await (71e50bbf) +* admin groups.join socket async/await (4588a4fd) +* password async/await (dd8386d9) +* sitemap to async/await (0164e51f) +* remove hook assign (d3727207) +* async/await users (f9a804e0) +* remove empty line (19b63bfa) +* remove vars (69333f59) +* async/await controllers (2c4f0446) +* async/await controllers/tags (53624885) +* async/await (f15c7f12) +* globalmods/groups (0722cc47) +* controllers/category.js (bd8736db) +* use arrow func (27c27b49) +* async/await controllers/api (4eaa630b) +* async/await admin/controllers (6f375482) +* async/await, remove dupe code for homepage routes (c9250a01) +* async/await for src/socket.io/groups.js (71b205a8) +* rewrote SocketPosts.getRawPost in await style (08530bb3) +* replace avatar conditional code with buildAvatar helper (#7681) (25238899) + +##### Reverts + +* accidental removal of some needed translation source strings (868dedd1) + #### 1.12.2 (2019-05-15) ##### Chores diff --git a/install/data/defaults.json b/install/data/defaults.json index 194283b400..a6f53f49c0 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -126,6 +126,7 @@ "eventLoopInterval": 500, "onlineCutoff": 30, "timeagoCutoff": 30, + "necroThreshold": 7, "categoryWatchState": "watching", "submitPluginUsage": 1 } \ No newline at end of file diff --git a/install/package.json b/install/package.json index b2f7bc45cf..0c767c10e7 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": "3.1.2", + "connect-mongo": "3.2.0", "connect-multiparty": "^2.1.0", "connect-pg-simple": "^6.0.0", "connect-redis": "4.0.3", @@ -74,24 +74,24 @@ "material-design-lite": "^1.3.0", "mime": "^2.2.0", "mkdirp": "^0.5.1", - "mongodb": "3.3.4", + "mongodb": "3.4.0", "morgan": "^1.9.1", "mousetrap": "^1.6.1", "mubsub-nbb": "^1.5.1", "nconf": "^0.10.0", - "nodebb-plugin-composer-default": "6.3.17", - "nodebb-plugin-dbsearch": "4.0.6", + "nodebb-plugin-composer-default": "6.3.20", + "nodebb-plugin-dbsearch": "4.0.7", "nodebb-plugin-emoji": "^3.0.0", "nodebb-plugin-emoji-android": "2.0.0", - "nodebb-plugin-markdown": "8.10.4", + "nodebb-plugin-markdown": "8.11.0", "nodebb-plugin-mentions": "2.7.3", "nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-spam-be-gone": "0.6.7", "nodebb-rewards-essentials": "0.1.2", "nodebb-theme-lavender": "5.0.11", - "nodebb-theme-persona": "10.1.27", - "nodebb-theme-slick": "1.2.27", - "nodebb-theme-vanilla": "11.1.10", + "nodebb-theme-persona": "10.1.30", + "nodebb-theme-slick": "1.2.28", + "nodebb-theme-vanilla": "11.1.12", "nodebb-widget-essentials": "4.0.17", "nodemailer": "^6.0.0", "passport": "^0.4.0", @@ -107,9 +107,9 @@ "rimraf": "3.0.0", "rss": "^1.2.2", "sanitize-html": "^1.16.3", - "semver": "^6.0.0", + "semver": "^7.0.0", "serve-favicon": "^2.4.5", - "sharp": "0.23.2", + "sharp": "0.23.4", "sitemap": "^5.0.0", "socket.io": "2.3.0", "socket.io-adapter-cluster": "^1.0.1", @@ -124,7 +124,7 @@ "textcomplete.contenteditable": "^0.1.1", "toobusy-js": "^0.5.1", "uglify-es": "^3.3.9", - "validator": "12.0.0", + "validator": "12.1.0", "winston": "3.2.1", "xml": "^1.0.1", "xregexp": "^4.1.1", @@ -133,13 +133,13 @@ "devDependencies": { "@commitlint/cli": "8.2.0", "@commitlint/config-angular": "8.2.0", - "coveralls": "3.0.7", - "eslint": "6.6.0", + "coveralls": "3.0.9", + "eslint": "6.7.0", "eslint-config-airbnb-base": "14.0.0", "eslint-plugin-import": "2.18.2", "grunt": "1.0.4", "grunt-contrib-watch": "1.1.0", - "husky": "3.0.9", + "husky": "3.1.0", "jsdom": "15.2.1", "lint-staged": "9.4.2", "mocha": "6.2.2", diff --git a/public/language/ar/admin/manage/users.json b/public/language/ar/admin/manage/users.json index b29b549bea..c4cc171f76 100644 --- a/public/language/ar/admin/manage/users.json +++ b/public/language/ar/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/ar/admin/settings/post.json b/public/language/ar/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/ar/admin/settings/post.json +++ b/public/language/ar/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/ar/error.json b/public/language/ar/error.json index dd185c7bbc..dd7039ff83 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .", "username-taken": "اسم المستخدم مأخوذ", "email-taken": "البريد الالكتروني مأخوذ", - "email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "لا يمكنك الدردشة حتى تقوم بتأكيد بريدك الإلكتروني، الرجاء إضغط هنا لتأكيد بريدك اﻹلكتروني.", - "email-not-confirmed-email-sent": "بريدك الإلكتروني غير مفعل. رجاءًا تفحص صندوق البريد عن رسالة التفعيل.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.", "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", "confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال", diff --git a/public/language/bg/admin/manage/users.json b/public/language/bg/admin/manage/users.json index 0c0ab447d8..54ee169aee 100644 --- a/public/language/bg/admin/manage/users.json +++ b/public/language/bg/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Изтриване на потребителя/ите", "purge": "Изтриване на потребителя/ите и съдържанието", "download-csv": "Сваляне във формат „CSV“", + "manage-groups": "Управление на групите", + "add-group": "Добавяне на група", "invite": "Покана", "new": "Нов потребител", diff --git a/public/language/bg/admin/settings/post.json b/public/language/bg/admin/settings/post.json index a8406c6d4b..32cdda63a3 100644 --- a/public/language/bg/admin/settings/post.json +++ b/public/language/bg/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Време", "timestamp.cut-off": "Използване на дата след (в брой дни)", "timestamp.cut-off-help": "Датите и времената ще бъдат показвани относително (напр. „преди 3 часа“ или „преди 5 дни“), и преведени на множество\n\\t\\t\\t\\t\\tезици. След определено време, този текст ще започне да показва самите дата и час, според езика на потребителя\n\\t\\t\\t\\t\\t(напр. „5 ноември 2016 15:30“).
(По подразбиране: 30, тоест един месец). Ако зададете 0, винаги ще се изписват дати, а ако оставите полето празно, времето ще бъде винаги относително.", + "timestamp.necro-threshold": "Мъртва граница (в дни)", + "timestamp.necro-threshold-help": "Между публикациите ще бъде показано съобщение, ако времето между тях е по-дълго от мъртвата граница. (По подразбиране: 7, или една седмица). Задайте 0 за изключване.", "teaser": "Представителна публикация", "teaser.last-post": "Последната – Показване на последната публикация, или първоначалната такава, ако няма отговори.", "teaser.last-reply": "Последната – Показване на последния отговор, или „Няма отговори“, ако все още няма такива.", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 92c5491399..de34fa147c 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Грешен номер на странициране, трябва да бъде между %1 и %2", "username-taken": "Потребителското име е заето", "email-taken": "Е-пощата е заета", - "email-not-confirmed": "Вашата е-поща все още не е потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.", + "email-not-confirmed": "Няма да можете да публикувате съобщения, докато е-пощата Ви не бъде потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.", "email-not-confirmed-chat": "Няма да можете да пишете в разговори, докато е-пощата Ви не бъде потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.", - "email-not-confirmed-email-sent": "Вашата е-поща все още не е потвърдена. Моля, проверете входящата си кутия за писмото за потвърждение.", + "email-not-confirmed-email-sent": "Вашата е-поща все още не е потвърдена. Моля, проверете входящата си кутия за писмото за потвърждение. Няма да можете да публикувате съобщения или да пишете в разговори, докато е-пощата Ви не бъде потвърдена.", "no-email-to-confirm": "Този форум изисква потвърдена е-поща. Моля, натиснете тук, за да въведете е-поща", "email-confirm-failed": "Не успяхме да потвърдим е-пощата Ви. Моля, опитайте отново по-късно.", "confirm-email-already-sent": "Е-писмото за потвърждение вече е изпратено. Моля, почакайте още %1 минута/и, преди да изпратите ново.", diff --git a/public/language/bn/admin/manage/users.json b/public/language/bn/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/bn/admin/manage/users.json +++ b/public/language/bn/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/bn/admin/settings/email.json b/public/language/bn/admin/settings/email.json index cfdcc04a5b..94cbc23561 100644 --- a/public/language/bn/admin/settings/email.json +++ b/public/language/bn/admin/settings/email.json @@ -1,12 +1,12 @@ { - "email-settings": "Email Settings", - "address": "Email Address", + "email-settings": "ইমেইল সেটিংস", + "address": "ইমেইল অ্যাড্রেস", "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", - "sendmail-rate-limit": "Send X emails...", - "sendmail-rate-delta": "... every X milliseconds", - "sendmail-rate-help": "Instructs the NodeBB mailer to limit the number of messages sent at once in order to not overwhelm email receiving services. These options do not apply if SMTP Transport is enabled (below).", + "sendmail-rate-limit": "X ইমেইল পাঠাও... ", + "sendmail-rate-delta": "... প্রতিX মিলিসেকেন্ডে", + "sendmail-rate-help": "NodeBB মেইলার কে নির্দেশ দিন যে একবারে পাঠানো মেইলের সংখ্যা সিমিত রাখতে যাতে ইমেইল গ্রাহক সার্ভিস ওভারলোডেড না হয়ে যায়। এই অপশন কার্যকর হবে না যদি SMTP Transport চালু থাকে (নিচে দেখুন)। ", "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Use an external email server to send emails", @@ -33,8 +33,8 @@ "testing.select": "Select Email Template", "testing.send": "Send Test Email", "testing.send-help": "The test email will be sent to the currently logged in user's email address.", - "subscriptions": "Email Digests", - "subscriptions.disable": "Disable email digests", + "subscriptions": "ইমেইল ডাইজেস্ট", + "subscriptions.disable": "ইমেইল ডাইজেস্ট নিষ্ক্রিয়", "subscriptions.hour": "Digest Hour", "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " } \ No newline at end of file diff --git a/public/language/bn/admin/settings/post.json b/public/language/bn/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/bn/admin/settings/post.json +++ b/public/language/bn/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/bn/error.json b/public/language/bn/error.json index 0879ca4459..4a413698f4 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "ইউজারনেম আগেই ব্যবহৃত", "email-taken": "ইমেইল আগেই ব্যবহৃত", - "email-not-confirmed": "আপনার ইমেইল এড্রেস নিশ্চিত করা হয় নি, নিশ্চিত করতে এখানে ক্লিক করুন।", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/cs/admin/manage/digest.json b/public/language/cs/admin/manage/digest.json index a1fb88efa1..0d61a87368 100644 --- a/public/language/cs/admin/manage/digest.json +++ b/public/language/cs/admin/manage/digest.json @@ -1,13 +1,13 @@ { "lead": "Statistický seznam odeslaných přehledů spolu s časy je zobrazen níže.", - "disclaimer": "Please be advised that email delivery is not guaranteed, due to the nature of email technology. Many variables factor into whether an email sent to the recipient server is ultimately delivered into the user's inbox, including server reputation, blacklisted IP addresses, and whether DKIM/SPF/DMARC is configured.", - "disclaimer-continued": "A successful delivery means the message was sent successfully by NodeBB and acknowledged by the recipient server. It does not mean the email landed in the inbox. For best results, we recommend using a third-party email delivery service such as SendGrid.", + "disclaimer": "Vezměte prosím na vědomí, že kvůli charakteru e-mailové technologie není zaručeno doručení e-mailu. Mnoho proměnných ovlivňuje, zda je e-mail odeslán na server příjemce, z něj doručen do doručené pošty uživatele, včetně reputace samotného serveru, IP adres na černé listině a zda je nakonfigurováno správně DKIM / SPF / DMARC.", + "disclaimer-continued": "Úspěšné doručení zprávy znamená, že byla úspěšně odeslána NodeBB a potvrzena serverem příjemce. Ovšem to neznamená, že e-mail byl doručen do doručené pošty uživatele. Pro dosažení nejlepších výsledků doporučujeme použít službu doručování e-mailů třetích stran, například SendGrid.", "user": "Uživatel", "subscription": "Typ odběru", "last-delivery": "Poslední úspěšné doručení", "default": "Výchozí systémové", - "default-help": "System default means the user has not explicitly overridden the global forum setting for digests, which is currently: "%1"", + "default-help": "Výchozí systémové znamená, že uživatel nemůže přenastavit celkové nastavení pravidel na fóru pro odesílání přehledů, které je momentálně%1", "resend": "Znovu odeslat přehled", "resend-all-confirm": "Jste si jist/a, že chcete ručně spustit odeslání přehledu", "resent-single": "Manuální znovu poslání přehledu bylo dokončeno", diff --git a/public/language/cs/admin/manage/users.json b/public/language/cs/admin/manage/users.json index 82244b733e..904ae8fdab 100644 --- a/public/language/cs/admin/manage/users.json +++ b/public/language/cs/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Odstranit uživatele", "purge": "Odstranit uživatele a obsah", "download-csv": "Stáhnout jako CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Pozvat", "new": "Nový uživatel", diff --git a/public/language/cs/admin/settings/post.json b/public/language/cs/admin/settings/post.json index 0417085c23..ef9bb0ed62 100644 --- a/public/language/cs/admin/settings/post.json +++ b/public/language/cs/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Časový otisk", "timestamp.cut-off": "Datum ukončení (ve dnech)", "timestamp.cut-off-help": "Datum a čas bude zobrazen relativně (tj. „před 3 hodinami” / „před 5 dny”), a dle toho lokalizován do různých\n\t\t\t\t\tjazyků. Za určitých okolností, může tento text být přepnut na lokalizované datum\n\t\t\t\t\t(tj. 5 Led 2017 15:30)
(výchozí: 30,nebo měsíc). Nastavte na 0, pro zobrazení datumů, zanecháte-li prázdné, bude vždy zobrazen relativní čas.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Ukázka příspěvku", "teaser.last-post": "Poslední – zobrazení posledního příspěvku, včetně hlavního příspěvku, nejsou-li odpovědi", "teaser.last-reply": "Poslední – zobrazení poslední odpovědi, nebo nejsou-li žádné odpovědi textu „Bez odpovědi”", diff --git a/public/language/cs/email.json b/public/language/cs/email.json index a7f4c7ba55..85a7b847be 100644 --- a/public/language/cs/email.json +++ b/public/language/cs/email.json @@ -8,7 +8,7 @@ "email.verify-your-email.subject": "Ověřte prosím vaší e-mailovou adresu", "email.verify.text1": "Vaše e-mailová adresa byla změněna.", "welcome.text1": "Děkujeme vám za registraci na %1!", - "welcome.text2": "Pro úplnou aktivaci vašeho účtu potřebujeme ověřit vaši e-mailovou adresu.", + "welcome.text2": "Pro úplnou aktivaci vašeho účtu potřebujeme ověřit vaši e-mailovou adresu.", "welcome.text3": "Administrátor právě potvrdil vaší registraci. Nyní se můžete přihlásit jménem a heslem.", "welcome.cta": "Pro potvrzení vaší e-mailové adresy, klikněte zde", "invitation.text1": "%1 vás pozval, abyste se připojil k %2", diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 875215107b..c7e06de54d 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Neplatná hodnota stránkování, musí být alespoň %1 a nejvýše %2", "username-taken": "Uživatelské jméno je již použito", "email-taken": "Tento e-mail je již použit", - "email-not-confirmed": "Vaše e-mailová adresa zatím nebyla potvrzena. Klepněte zde pro její potvrzení.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Nebude schopen konverzovat, dokud nebude váš e-mail potvrzen. Pro jeho potvrzení klikněte zde.", - "email-not-confirmed-email-sent": "Vaše e-mailová schránka nebyla ještě potvrzena. Ověřte prosím vaši příchozí poštu.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Toto fórum vyžaduje ověření e-mailové adresy. Pro zadání e-mailu, klikněte zde.", "email-confirm-failed": "Nemohli jsme ověřit vaši e-mailovou adresu, zkuste to později.", "confirm-email-already-sent": "Potvrzovací e-mail byl již odeslán. Vyčkejte %1 minut/y, chcete-li odeslat další.", diff --git a/public/language/da/admin/manage/users.json b/public/language/da/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/da/admin/manage/users.json +++ b/public/language/da/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/da/admin/settings/post.json b/public/language/da/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/da/admin/settings/post.json +++ b/public/language/da/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/da/error.json b/public/language/da/error.json index 2947e68da3..a980c31c52 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Ugyldig side værdi, skal mindst være %1 og maks. %2", "username-taken": "Brugernavn optaget", "email-taken": "Emailadresse allerede i brug", - "email-not-confirmed": "Din email adresse er ikke blevet bekræftet endnu, klik venligst her for at bekræfte den.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Du kan ikke chatte før din email er bekræftet, klik her for at bekræfte din email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Dette forum kræver bekræftelse af din email, klik her for at indtaste en email", "email-confirm-failed": "Vi kunne ikke bekræfte din email, prøv igen senere.", "confirm-email-already-sent": "Bekræftelses email er allerede afsendt, vent venligt %1 minut(ter) for at sende endnu en.", diff --git a/public/language/de/admin/manage/users.json b/public/language/de/admin/manage/users.json index ddb24d22d2..0a6a666260 100644 --- a/public/language/de/admin/manage/users.json +++ b/public/language/de/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Benutzer Löschen", "purge": "Benutzer mit Beiträgen löschen", "download-csv": "CSV herunterladen", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Einladen", "new": "Neuer Benutzer", diff --git a/public/language/de/admin/settings/post.json b/public/language/de/admin/settings/post.json index 4b8facaf8c..ce2d8980fb 100644 --- a/public/language/de/admin/settings/post.json +++ b/public/language/de/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Zeitstempel", "timestamp.cut-off": "Tageslimit für Relative Zeitangaben (in Tagen)", "timestamp.cut-off-help": "Tage & Zeiten werden relativ angezeigt (z.B. \"vor 3 Stunden\" / \"vor 5 Tagen\"), und in viele Sprachen übersetzt. Nach einem bestimmten Zeitpunkt, kann dieses Text durch das übersetzte Datum selbst ersetzt werden (z.B. 5 Nov 2016 15:30).
(Standard: 30, oder ein Monat). Auf 0 setzen um immer Daten anzuzeigen, leer lassung um immer relative Zeiten anzuzeigen.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser-Beitrag", "teaser.last-post": "Letzter - Den neuesten Beitrag anzeigen, den originalen Beitrag innbegriffen, wenn es keine Antworten gibt", "teaser.last-reply": "Letzter - Den neuesten Beitrag oder einen \"Keine Antworten\" Platzhalter, wenn es keine Antworten gibt anzeigen", diff --git a/public/language/de/error.json b/public/language/de/error.json index 768739ddf8..2f5f4f6440 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Ungültige Seitennummerierung, muss mindestens %1 und maximal %2 sein", "username-taken": "Der Benutzername ist bereits vergeben", "email-taken": "Die E-Mail-Adresse ist bereits vergeben", - "email-not-confirmed": "Deine E-Mail wurde noch nicht bestätigt, bitte klicke hier, um deine E-Mail zu bestätigen.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Du kannst den Chat erst nutzen wenn deine E-Mail bestätigt wurde, bitte klicke hier, um deine E-Mail zu bestätigen.", - "email-not-confirmed-email-sent": "Deine E-Mail wurde noch nicht bestätigt, bitte schaue in deinem Posteingang nach der Bestätigungsmail.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Dieses Forum setzt eine E-Mail-Bestätigung voraus, bitte klicke hier um eine E-Mail-Adresse einzugeben.", "email-confirm-failed": "Wir konnten deine E-Mail-Adresse nicht bestätigen, bitte versuch es später noch einmal", "confirm-email-already-sent": "Die Bestätigungsmail wurde verschickt. Bitte warte %1 Minute(n), um eine weitere zu verschicken.", diff --git a/public/language/el/admin/manage/users.json b/public/language/el/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/el/admin/manage/users.json +++ b/public/language/el/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/el/admin/settings/post.json b/public/language/el/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/el/admin/settings/post.json +++ b/public/language/el/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/el/error.json b/public/language/el/error.json index 355bc3abca..76c05e0021 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Το όνομα χρήστη είναι πιασμένο", "email-taken": "Το email είναι πιασμένο", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/en-GB/admin/manage/users.json b/public/language/en-GB/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/en-GB/admin/manage/users.json +++ b/public/language/en-GB/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/en-GB/admin/settings/post.json b/public/language/en-GB/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/en-GB/admin/settings/post.json +++ b/public/language/en-GB/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/en-GB/error.json b/public/language/en-GB/error.json index e2fab65924..521ea9a7e7 100644 --- a/public/language/en-GB/error.json +++ b/public/language/en-GB/error.json @@ -31,9 +31,9 @@ "username-taken": "Username taken", "email-taken": "Email taken", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/en-US/admin/manage/users.json b/public/language/en-US/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/en-US/admin/manage/users.json +++ b/public/language/en-US/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/en-US/admin/settings/post.json b/public/language/en-US/admin/settings/post.json index 5202330d01..cef97c6aba 100644 --- a/public/language/en-US/admin/settings/post.json +++ b/public/language/en-US/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\\t\\t\\t\\t\\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\\t\\t\\t\\t\\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index 8140d65b4d..b84fe2a1c5 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Username taken", "email-taken": "Email taken", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/en-x-pirate/admin/manage/users.json b/public/language/en-x-pirate/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/en-x-pirate/admin/manage/users.json +++ b/public/language/en-x-pirate/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/en-x-pirate/admin/settings/post.json b/public/language/en-x-pirate/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/en-x-pirate/admin/settings/post.json +++ b/public/language/en-x-pirate/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json index 8140d65b4d..b84fe2a1c5 100644 --- a/public/language/en-x-pirate/error.json +++ b/public/language/en-x-pirate/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Username taken", "email-taken": "Email taken", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/es/admin/manage/users.json b/public/language/es/admin/manage/users.json index e1384e4fa7..5621ad5cf3 100644 --- a/public/language/es/admin/manage/users.json +++ b/public/language/es/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Borrar Usuario(s)", "purge": "Borrar Usuario(s) y Contenido", "download-csv": "Descargar CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invitar", "new": "Nuevo Usuario", diff --git a/public/language/es/admin/settings/post.json b/public/language/es/admin/settings/post.json index 48cbcd5971..75e671059a 100644 --- a/public/language/es/admin/settings/post.json +++ b/public/language/es/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Indicación de fecha y hora", "timestamp.cut-off": "Fecha límite (en días)", "timestamp.cut-off-help": "Las fechas & horas serán mostradas de una forma relativa (e.g. \"hace 3 horas\"/\"hace 5 días\"), y localizadas en varios\n\t\t\t\t\tlenguajes. Después de cierto punto, este texto puede ser cambiado para mostrar la propia fecha localizada\n\t\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Por defecto: 30, o un mes). Ponla a 0 para mostrar siempre las fechas exactas. Déjala en blanco para siempre mostrar las fechas relativas.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Entrada de muestra", "teaser.last-post": "Último – Muestra la última entrada, incluyendo la entrada original, si no hay respuestas.", "teaser.last-reply": "Última – Muestra la última respuesta, o un texto \"No hay respuestas\" si no hay respuestas.", diff --git a/public/language/es/error.json b/public/language/es/error.json index 18bb1969cd..1d28a1bc8d 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Número de página inválido, debe estar entre %1 y %2", "username-taken": "Nombre de usuario ocupado", "email-taken": "Correo electrónico ocupado", - "email-not-confirmed": "Su cuenta de correo electrónico no ha sido confirmada aún, por favor haga click aquí para confirmarla.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "No puedes usar el chat hasta que confirmes tu dirección de correo electrónico, por favor haz click aquí para confirmar tu correo.", - "email-not-confirmed-email-sent": "Tu correo electrónico está sin confirmar, por favor busca el correo de confirmación en tu bandeja de entrada.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Este foro requiere confirmación de su email, por favor pulse aquí para introducir un email", "email-confirm-failed": "No se ha podido confirmar su email, por favor inténtelo de nuevo más tarde.", "confirm-email-already-sent": "El email de confirmación ya ha sido enviado, por favor espera %1 minuto(s) para enviar otro.", diff --git a/public/language/et/admin/manage/users.json b/public/language/et/admin/manage/users.json index cf3b6a1516..4b2f113059 100644 --- a/public/language/et/admin/manage/users.json +++ b/public/language/et/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Kustuta Kasutaja(d)", "purge": "Kustuta Kasutaja(d) ja Sisu", "download-csv": "Lae alla CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Kutsu", "new": "Uus kasutaja", diff --git a/public/language/et/admin/settings/post.json b/public/language/et/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/et/admin/settings/post.json +++ b/public/language/et/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/et/error.json b/public/language/et/error.json index f914f27564..ba7fee9db5 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Väär lehekülje numeratsioon, peab olema vähemalt %1 ja kõige rohkem %2", "username-taken": "Kasutajanimi on juba võetud", "email-taken": "Email on võetud", - "email-not-confirmed": "Su emaili aadress ei ole kinnitatud, vajuta siia et kinnitada.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Sõnumeid ei ole võimalik enne saata kui sinu email on kinnitatud. Kinnitamiseks vajuta siia.", - "email-not-confirmed-email-sent": "Su email ei ole veel kinnitatud, palun kontrolli oma e-posti ning kinnita email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "See foorum nõuab emaili kinnitust, palun vajuta siia, et sisestada email", "email-confirm-failed": "Meil ei õnnestunud sinu emaili kinnitada, proovi hiljem uuesti.", "confirm-email-already-sent": "Kinnituskiri on juba saadetud, palun oota %1 minut(it) uue kirja saatmiseks.", diff --git a/public/language/fa-IR/admin/manage/users.json b/public/language/fa-IR/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/fa-IR/admin/manage/users.json +++ b/public/language/fa-IR/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/fa-IR/admin/settings/post.json b/public/language/fa-IR/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/fa-IR/admin/settings/post.json +++ b/public/language/fa-IR/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index bd6a6648cd..ff79d2f53f 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "ارزش گذاری صفحه نامعتبر است، کمترین مقدار %1 و بیشترین مقدار %2 باید باشد", "username-taken": "این نام کاربری گرفته شده است.", "email-taken": "این ایمیل گرفته شده است.", - "email-not-confirmed": "ایمیل شما تاکنون تایید نشده است، برای تایید ایمیل خود را اینجا را کلیک کنید.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "شما تا قبل از تایید ایمیل قادر به چت نیستید، لطفا برای تایید ایمیل خود اینجا کلیک کنید", - "email-not-confirmed-email-sent": "ایمیل شما هنوز تایید نشده است، لطفا صندوق پیام های خود را برای تایید ایمیل بررسی کنید.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "ایمیل شما تایید نشده است ، لطفا برای وارد کردن ایمیل اینجا کلیک کنید", "email-confirm-failed": "سیستم موفق به تایید ایمیل شما نشد، لطفا بعدا دوباره سعی کنید", "confirm-email-already-sent": "ایمیل فعال‌سازی قبلا فرستاده شده، لطفا %1 دقیقه صبر کنید تا ایمیل دیگری فرستاده شود.", diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json index 6e41504e1f..46d7e3c5b8 100644 --- a/public/language/fa-IR/user.json +++ b/public/language/fa-IR/user.json @@ -1,9 +1,9 @@ { "banned": "اخراج شده", "offline": "آفلاین", - "deleted": "Deleted", + "deleted": "حذف شده", "username": "نام کاربری", - "joindate": "زمان عضویت", + "joindate": "تاریخ عضویت", "postcount": "تعداد پست‌ها", "email": "رایانامه", "confirm_email": "تأیید ایمیل", @@ -25,11 +25,11 @@ "profile_views": "بازدیدهای نمایه", "reputation": "اعتبار", "bookmarks": "نشانک‌ها", - "watched_categories": "Watched categories", - "change_all": "Change All", + "watched_categories": "دسته بندی های پیگیری شده", + "change_all": "تغییر همه", "watched": "پیگیری شده", "ignored": "نادیده گرفته شده", - "default-category-watch-state": "Default category watch state", + "default-category-watch-state": "وضعیت مشاهده دسته بندی پیشفرض ", "followers": "دنبال‌کننده‌ها", "following": "دنبال‌شونده‌ها", "blocks": "کاربران مسدود شده", @@ -116,7 +116,7 @@ "upvote-notif-freq.everyTen": "هر ده امتیاز مثبت", "upvote-notif-freq.threshold": "On 1, 5, 10, 25, 50, 100, 150, 200...", "upvote-notif-freq.logarithmic": "هر 10، 10، 1000 ...", - "upvote-notif-freq.disabled": "Disabled", + "upvote-notif-freq.disabled": "غیر فعال شده", "browsing": "تنظیمات مرور", "open_links_in_new_tab": "پیوندهای به بیرون را در برگ جدید باز کن", "enable_topic_searching": "فعال کردن جستجوی داخل-موضوع", @@ -154,7 +154,7 @@ "info.moderation-note.add": "افزودن یادداشت", "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.", + "consent.lead": "این انجمن اطلاعات شخصی شما را جمع‌آوری و پردازش می‌کند", "consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.

We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights & Consent page.

If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.", "consent.email_intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.", "consent.digest_frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.", @@ -170,7 +170,7 @@ "consent.right_to_erasure_description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account and your content, please contact the administrative team for this website.", "consent.right_to_data_portability": "You have the Right to Data Portability", "consent.right_to_data_portability_description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.", - "consent.export_profile": "Export Profile (.csv)", + "consent.export_profile": "صادر کردن مشخصات کاربری (.csv)", "consent.export_uploads": "Export Uploaded Content (.zip)", "consent.export_posts": "Export Posts (.csv)" } \ No newline at end of file diff --git a/public/language/fi/admin/general/social.json b/public/language/fi/admin/general/social.json index 23aedfcfaa..2d6c8e5690 100644 --- a/public/language/fi/admin/general/social.json +++ b/public/language/fi/admin/general/social.json @@ -1,5 +1,5 @@ { - "post-sharing": "Post Sharing", + "post-sharing": "Viestin jakaminen", "info-plugins-additional": "Plugins can add additional networks for sharing posts.", "save-success": "Successfully saved Post Sharing Networks!" } \ No newline at end of file diff --git a/public/language/fi/admin/manage/users.json b/public/language/fi/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/fi/admin/manage/users.json +++ b/public/language/fi/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/fi/admin/settings/email.json b/public/language/fi/admin/settings/email.json index cfdcc04a5b..f5f6b879cd 100644 --- a/public/language/fi/admin/settings/email.json +++ b/public/language/fi/admin/settings/email.json @@ -1,6 +1,6 @@ { - "email-settings": "Email Settings", - "address": "Email Address", + "email-settings": "Sähköpostin asetukset", + "address": "Sähköpostiosoitteet", "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "from": "From Name", "from-help": "The from name to display in the email.", @@ -33,8 +33,8 @@ "testing.select": "Select Email Template", "testing.send": "Send Test Email", "testing.send-help": "The test email will be sent to the currently logged in user's email address.", - "subscriptions": "Email Digests", - "subscriptions.disable": "Disable email digests", + "subscriptions": "Sähköposti koosteet", + "subscriptions.disable": "Poista sähköpostin koosteet käytöstä", "subscriptions.hour": "Digest Hour", "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " } \ No newline at end of file diff --git a/public/language/fi/admin/settings/post.json b/public/language/fi/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/fi/admin/settings/post.json +++ b/public/language/fi/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/fi/category.json b/public/language/fi/category.json index 3f3b596cab..f5d7c41eb9 100644 --- a/public/language/fi/category.json +++ b/public/language/fi/category.json @@ -1,22 +1,22 @@ { "category": "Kategoria", - "subcategories": "Subcategories", + "subcategories": "Alikategoria", "new_topic_button": "Uusi aihe", "guest-login-post": "Kirjaudu sisään voidaksesi kirjoittaa viesti", "no_topics": "Tässä kategoriassa ei ole yhtään aihetta.
Miksi et aloittaisi uutta?", "browsing": "selaamassa", "no_replies": "Kukaan ei ole vastannut", - "no_new_posts": "No new posts.", - "watch": "Watch", + "no_new_posts": "Ei uusia viestejä", + "watch": "Seuraa", "ignore": "Sivuuta", - "watching": "Watching", - "not-watching": "Not Watching", - "ignoring": "Ignoring", - "watching.description": "Show topics in unread and recent", - "not-watching.description": "Do not show topics in unread, show in recent", - "ignoring.description": "Do not show topics in unread and recent", - "watching.message": "You are now watching updates from this category and all subcategories", - "notwatching.message": "You are not watching updates from this category and all subcategories", - "ignoring.message": "You are now ignoring updates from this category and all subcategories", - "watched-categories": "Watched categories" + "watching": "Seurataan", + "not-watching": "Älä seuraa", + "ignoring": "Ohita", + "watching.description": "Näytä aiheet lukemattomissa ja viimeisimmissä", + "not-watching.description": "Älä näytä aiheita lukemattomissa, näytä viimeisimmissä", + "ignoring.description": "Älä näytä aiheita lukemattomissa ja viimeisimmissä", + "watching.message": "Seuraat nyt päivityksiä tästä kategoriasta ja kaikista alikategorioista", + "notwatching.message": "Et seuraa päivityksiää tästä kategoriasta tai alikategorioista", + "ignoring.message": "Ohitat kaikki päivitykset tästä kategoriasta ja kaikista alikategorioista", + "watched-categories": "Seuratut kategoriat" } \ No newline at end of file diff --git a/public/language/fi/email.json b/public/language/fi/email.json index b2f8bb74f5..c38b6e9ef1 100644 --- a/public/language/fi/email.json +++ b/public/language/fi/email.json @@ -1,19 +1,19 @@ { - "test-email.subject": "Test Email", - "password-reset-requested": "Password Reset Requested!", + "test-email.subject": "Testisähköposti", + "password-reset-requested": "Salasanan nollaus pyydetty!", "welcome-to": "%1 - Tervetuloa", "invite": "Kutsu henkilöltä %1", "greeting_no_name": "Hei", "greeting_with_name": "Hei %1", - "email.verify-your-email.subject": "Please verify your email", - "email.verify.text1": "Your email address has changed!", + "email.verify-your-email.subject": "Tarkista sähköpostisi", + "email.verify.text1": "Sähköpostiosoitteesi on muutettu!", "welcome.text1": "Kiitos rekisteröitymisestäsi sivustolle %1!", "welcome.text2": "Meidän täytyy varmistaa, että omistat sen sähköpostiosoitteen, jolla rekisteröidyit, ennen kuin tilisi voidaan aktivoida kokonaan.", "welcome.text3": "Ylläpitäjä hyväksyi rekisteröintipyyntösi. Voit nyt kirjautua käyttäjänimelläsi ja salasanallasi.", "welcome.cta": "Napsauta tästä vahvistaaksesi sähköpostiosoitteesi", "invitation.text1": "%1 pyysi sinua liittymään %2", - "invitation.text2": "Your invitation will expire in %1 days.", - "invitation.cta": "Click here to create your account.", + "invitation.text2": "Kutsusi vanhenee %1 päivässä.", + "invitation.cta": "Luo tili täältä", "reset.text1": "Saimme pyynnön vaihtaa salasanasi, todennäkösesti koska olit unohtanut sen. Jos näin ei ollut käynyt, voit jättää tämän viestin huomiotta.", "reset.text2": "Jatkaaksesi salasanan nollausta, napsauta seuraavaa linkkiä:", "reset.cta": "Napsauta tästä vaihtaaksesi salasanasi", @@ -22,31 +22,31 @@ "reset.notify.text2": "Jos et tunnista tätä toimintoa, ilmoita välittömästi ylläpitäjälle.", "digest.latest_topics": "Viimeisimmät viestiketjut henkilöltä %1", "digest.cta": "Click here to visit %1", - "digest.unsub.info": "This digest was sent to you due to your subscription settings.", + "digest.unsub.info": "Tämä kooste lähetettiin sinulle tilin tilausasetusten perusteella", "digest.day": "päivä", "digest.week": "viikko", "digest.month": "kuukausi", - "digest.subject": "Digest for %1", - "digest.title.day": "Your Daily Digest", - "digest.title.week": "Your Weekly Digest", - "digest.title.month": "Your Monthly Digest", + "digest.subject": "Koosteesi %1", + "digest.title.day": "Päivittäinen koosteesi", + "digest.title.week": "Viikottainen koosteesi", + "digest.title.month": "Kuukausittainen koosteesi", "notif.chat.subject": "Uusi chatviesti henkilöltä %1", - "notif.chat.cta": "Click here to continue the conversation", - "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", - "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", + "notif.chat.cta": "Klikkaa tästä jatkaaksesi keskustelua", + "notif.chat.unsub.info": "Tämä keskustelun ilmoitus on lähetettty viestiasetuksiesi johdosta", + "notif.post.unsub.info": "Tämä ilmoitus viestistä lähetettiin sinulle viestiasetuksistasi johtuen", "notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking", - "notif.cta": "To the forum", - "notif.cta-new-reply": "View Post", - "notif.cta-new-chat": "View Chat", - "notif.test.short": "Testing Notifications", + "notif.cta": "Foorumille", + "notif.cta-new-reply": "Katso viesti", + "notif.cta-new-chat": "Katso keskustelu", + "notif.test.short": "Testi ilmoitus", "notif.test.long": "This is a test of the notifications email. Send help!", - "test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.", - "unsub.cta": "Click here to alter those settings", - "unsubscribe": "unsubscribe", - "unsub.success": "You will no longer receive emails from the %1 mailing list", + "test.text1": "Tämä on testi sähköposti, jolla voit testata, että sähköpostin asetukset ovat oikein NodeBB:ssä", + "unsub.cta": "Muuta asetuksia täältä", + "unsubscribe": "Lopeta tilaus", + "unsub.success": "Sinut on poistettu %1 postituslistalta", "banned.subject": "You have been banned from %1", "banned.text1": "The user %1 has been banned from %2.", "banned.text2": "This ban will last until %1.", "banned.text3": "This is the reason why you have been banned:", - "closing": "Thanks!" + "closing": "Kiitos!" } \ No newline at end of file diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 92852a0ecd..a4040d2b34 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -3,32 +3,32 @@ "invalid-json": "Invalid JSON", "not-logged-in": "Et taida olla kirjautuneena sisään.", "account-locked": "Käyttäjätilisi on lukittu väliaikaisesti", - "search-requires-login": "Searching requires an account - please login or register.", - "goback": "Press back to return to the previous page", + "search-requires-login": "Haku vaatii tunnukset. Kirjaudu sisään tai luo tunnus.", + "goback": "Paina \"Takaisin\"-nappia palataksesi takaisin edelliselle sivulle.", "invalid-cid": "Virheellinen kategorian ID", "invalid-tid": "Virheellinen aiheen ID", "invalid-pid": "Virheellinen viestin ID", "invalid-uid": "Virheellinen käyttäjän ID", "invalid-username": "Virheellinen käyttäjänimi", "invalid-email": "Virheellinen sähköpostiosoite", - "invalid-fullname": "Invalid Fullname", - "invalid-location": "Invalid Location", - "invalid-birthday": "Invalid Birthday", - "invalid-title": "Invalid title", + "invalid-fullname": "Kokonimi on virheellinen", + "invalid-location": "Virheellinen sijainti", + "invalid-birthday": "Virheellinen syntymäpäivä", + "invalid-title": "Virheellinen otsikko", "invalid-user-data": "Virheellinen käyttäjätieto", "invalid-password": "Virheellinen salasana", - "invalid-login-credentials": "Invalid login credentials", + "invalid-login-credentials": "Virheelliset kirjautumistiedot", "invalid-username-or-password": "Ole hyvä ja anna sekä käyttäjänimi että salasana", "invalid-search-term": "Virheellinen hakutermi", - "invalid-url": "Invalid URL", + "invalid-url": "Virheellinen URL-osoite", "local-login-disabled": "Local login system has been disabled for non-privileged accounts.", "csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again", "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Käyttäjänimi varattu", "email-taken": "Sähköpostiosoite varattu", - "email-not-confirmed": "Sähköpostiasi ei ole vielä vahvistettu, ole hyvä ja napsauta tätä vahvistaaksesi sen.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Et voi keskustella ennen kuin sähköpostiosoitteesi on vahvistettu, ole hyvä ja paina tästä vahvistaaksesi sen.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", @@ -36,8 +36,8 @@ "digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests", "username-too-short": "Käyttäjänimi on liian lyhyt", "username-too-long": "Käyttäjänimi on liian pitkä", - "password-too-long": "Password too long", - "reset-rate-limited": "Too many password reset requests (rate limited)", + "password-too-long": "Salasana on liian pitkä", + "reset-rate-limited": "Liian monta salasanan nollaus pyyntöä (määrärajoitus)", "user-banned": "Käyttäjä on estetty", "user-banned-reason": "Sorry, this account has been banned (Reason: %1)", "user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)", @@ -105,10 +105,10 @@ "group-already-requested": "Your membership request has already been submitted", "group-join-disabled": "You are not able to join this group at this time", "group-leave-disabled": "You are not able to leave this group at this time", - "post-already-deleted": "This post has already been deleted", - "post-already-restored": "This post has already been restored", - "topic-already-deleted": "This topic has already been deleted", - "topic-already-restored": "This topic has already been restored", + "post-already-deleted": "Tämä viesti on jo poistettu", + "post-already-restored": "Tämä viesti on jo palautettu", + "topic-already-deleted": "Tämä aihe on jo poistettu", + "topic-already-restored": "Tämä aihe on jo palautettu", "cant-purge-main-post": "You can't purge the main post, please delete the topic instead", "topic-thumbnails-are-disabled": "Aiheiden kuvakkeet eivät ole käytössä", "invalid-file": "Virheellinen tiedosto", @@ -141,10 +141,10 @@ "already-flagged": "You have already flagged this post", "self-vote": "You cannot vote on your own post", "reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.", - "registration-error": "Registration Error", + "registration-error": "Virhe rekisteröinnissä", "parse-error": "Something went wrong while parsing server response", - "wrong-login-type-email": "Please use your email to login", - "wrong-login-type-username": "Please use your username to login", + "wrong-login-type-email": "Käytä sähköpostiosoitettasi kirjautuaksesi sisään", + "wrong-login-type-username": "Käytä tunnusta kirjautuaksesi sisään", "sso-registration-disabled": "Registration has been disabled for %1 accounts, please register with an email address first", "sso-multiple-association": "You cannot associate multiple accounts from this service to your NodeBB account. Please dissociate your existing account and try again.", "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", @@ -155,7 +155,7 @@ "invalid-home-page-route": "Invalid home page route", "invalid-session": "Session Mismatch", "invalid-session-text": "It looks like your login session is no longer active, or no longer matches with the server. Please refresh this page.", - "no-topics-selected": "No topics selected!", + "no-topics-selected": "Ei aiheita valittuna", "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", diff --git a/public/language/fi/global.json b/public/language/fi/global.json index 4198015644..c579ca7683 100644 --- a/public/language/fi/global.json +++ b/public/language/fi/global.json @@ -7,10 +7,10 @@ "403.login": "Sinun pitäisi kai kirjautua sisään?", "404.title": "Ei löydy", "404.message": "Olet päätynyt sivulle, jota ei ole olemassa. Palaa etusivulle.", - "500.title": "Internal Error.", + "500.title": "Palvelinvirhe", "500.message": "Oho! Jotain meni pieleen!", "400.title": "Bad Request.", - "400.message": "It looks like this link is malformed, please double-check and try again. Otherwise, return to the home page.", + "400.message": "Näyttää siltä, että linkki on virheellinen. Tarkista vielä linkin muoton ja yritä uudestaan. Muusa tapauksessa palaa takaisin kotisivulle", "register": "Rekisteröidy", "login": "Kirjaudu", "please_log_in": "Kirjaudu, ole hyvä", @@ -19,13 +19,13 @@ "welcome_back": "Tervetuloa takaisin", "you_have_successfully_logged_in": "Olet onnistuneesti kirjautunut sisään", "save_changes": "Tallenna muutokset", - "save": "Save", + "save": "Tallenna", "close": "Sulje", "pagination": "Sivutus", "pagination.out_of": "%1/%2", "pagination.enter_index": "Syötä indeksi", "header.admin": "Ylläpitäjä", - "header.categories": "Categories", + "header.categories": "Kategoriat", "header.recent": "Viimeisimmät", "header.unread": "Lukemattomat", "header.tags": "Tagit", @@ -51,19 +51,19 @@ "users": "Käyttäjät", "topics": "Aiheet", "posts": "Viestit", - "best": "Best", - "votes": "Votes", - "upvoters": "Upvoters", - "upvoted": "Upvoted", + "best": "Paras", + "votes": "Ääniä", + "upvoters": "Tykkääjät", + "upvoted": "Tykätyt", "downvoters": "Downvoters", "downvoted": "Downvoted", "views": "Katsottu", "reputation": "Maine", - "lastpost": "Last post", - "firstpost": "First post", + "lastpost": "Viimeisin viesti", + "firstpost": "Ensimmäinen viesti", "read_more": "lue lisää", - "more": "More", - "posted_ago_by_guest": "posted %1 by Guest", + "more": "Lisää", + "posted_ago_by_guest": "Vierailija lähettänyt %1", "posted_ago_by": "posted %1 by %2", "posted_ago": "lähetetty %1", "posted_in": "posted in %1", @@ -72,44 +72,44 @@ "posted_in_ago_by": "posted in %1 %2 by %3", "user_posted_ago": "%1 lähetti %2", "guest_posted_ago": "Vieras kirjoitti %1", - "last_edited_by": "last edited by %1", + "last_edited_by": "Viimeksi muokannut %1", "norecentposts": "Ei viimeaikaisia viestejä", "norecenttopics": "Ei viimeaikaisia aiheita", "recentposts": "Viimeisimmät viestit", "recentips": "Äskettäin kirjautuneet IP-osoitteet", - "moderator_tools": "Moderator Tools", + "moderator_tools": "Ylläpidon työkalut", "online": "Online", "away": "Poissa", - "dnd": "Do not disturb", + "dnd": "Älä häiritse", "invisible": "Näkymätön", "offline": "Offline", "email": "Sähköposti", "language": "Kieli", "guest": "Vieras", "guests": "Vieraat", - "former_user": "A Former User", + "former_user": "Entinen käyttäjä", "updated.title": "Foorumi päivitetty", "updated.message": "Tämä foorumi on juuri päivitetty uusimpaan versioon. Paina tästä päivittääksesi sivun.", "privacy": "Yksityisyys", "follow": "Seuraa", "unfollow": "Älä seuraa", "delete_all": "Poista kaikki", - "map": "Map", + "map": "Kartta", "sessions": "Login Sessions", - "ip_address": "IP Address", - "enter_page_number": "Enter page number", - "upload_file": "Upload file", - "upload": "Upload", - "uploads": "Uploads", - "allowed-file-types": "Allowed file types are %1", - "unsaved-changes": "You have unsaved changes. Are you sure you wish to navigate away?", - "reconnecting-message": "Looks like your connection to %1 was lost, please wait while we try to reconnect.", - "play": "Play", + "ip_address": "IP osoite", + "enter_page_number": "Syötä sivunumero", + "upload_file": "Lähetä tiedosto", + "upload": "Lähetä", + "uploads": "Lähetykset", + "allowed-file-types": "Sallitut tiedostotyypit ovat %1", + "unsaved-changes": "Sinulla on tallentamatotmia muutoksia. Oletko varma, että haluat siirtyä pois näkymästä?", + "reconnecting-message": "Näyttää siltä, että yhteys %1 palveluun katosi. Odotas hetki kun yritän yhdistää.", + "play": "Toista", "cookies.message": "This website uses cookies to ensure you get the best experience on our website.", "cookies.accept": "Got it!", "cookies.learn_more": "Learn More", - "edited": "Edited", + "edited": "Muokattu", "disabled": "Disabled", - "select": "Select", + "select": "Valitse", "user-search-prompt": "Type something here to find users..." } \ No newline at end of file diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index 01dc3a0f72..8c2ce2daa2 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -1,13 +1,13 @@ { "groups": "Ryhmät", - "view_group": "View Group", + "view_group": "Tarkaste ryhmää", "owner": "Ryhmän omistaja", "new_group": "Luo uusi ryhmä", "no_groups_found": "Ei ryhmiä", - "pending.accept": "Accept", - "pending.reject": "Reject", - "pending.accept_all": "Accept All", - "pending.reject_all": "Reject All", + "pending.accept": "Hyväksy", + "pending.reject": "Hylkää", + "pending.accept_all": "Hyväksy kaikki", + "pending.reject_all": "Hylkää kaikki", "pending.none": "There are no pending members at this time", "invited.none": "There are no invited members at this time", "invited.uninvite": "Rescind Invitation", @@ -19,45 +19,45 @@ "cover-saving": "Tallennetaan", "details.title": "Ryhmän tiedot", "details.members": "Jäsenluettelo", - "details.pending": "Pending Members", - "details.invited": "Invited Members", - "details.has_no_posts": "This group's members have not made any posts.", + "details.pending": "Odottavat jäsenet", + "details.invited": "Kutsutut jäsenet", + "details.has_no_posts": "Tämän ryhmän jäsenet eivät ole luoneet vielä yhtään viestiä.", "details.latest_posts": "Uusimmat viestit", - "details.private": "Private", - "details.disableJoinRequests": "Disable join requests", - "details.disableLeave": "Disallow users from leaving the group", + "details.private": "Yksityinen", + "details.disableJoinRequests": "Poista liittymispyynnöt", + "details.disableLeave": "Estä käyttäjiä poistumasta ryhmästä", "details.grant": "Grant/Rescind Ownership", "details.kick": "Potkaise", - "details.kick_confirm": "Are you sure you want to remove this member from the group?", - "details.add-member": "Add Member", - "details.owner_options": "Group Administration", - "details.group_name": "Group Name", - "details.member_count": "Member Count", - "details.creation_date": "Creation Date", - "details.description": "Description", - "details.badge_preview": "Badge Preview", - "details.change_icon": "Change Icon", - "details.change_label_colour": "Change Label Colour", - "details.change_text_colour": "Change Text Colour", - "details.badge_text": "Badge Text", - "details.userTitleEnabled": "Show Badge", - "details.private_help": "If enabled, joining of groups requires approval from a group owner", - "details.hidden": "Hidden", - "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", - "details.delete_group": "Delete Group", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", - "event.updated": "Group details have been updated", - "event.deleted": "The group \"%1\" has been deleted", - "membership.accept-invitation": "Accept Invitation", - "membership.accept.notification_title": "You are now a member of %1", - "membership.invitation-pending": "Invitation Pending", - "membership.join-group": "Join Group", - "membership.leave-group": "Leave Group", - "membership.leave.notification_title": "%1 has left group %2", - "membership.reject": "Reject", - "new-group.group_name": "Group Name:", + "details.kick_confirm": "Oletko varma, että haluat poistaa käyttäjän ryhmästä?", + "details.add-member": "Lisää jäsen", + "details.owner_options": "Ryhmän ylläpito", + "details.group_name": "Ryhmän nimi", + "details.member_count": "Jäsenmäärä", + "details.creation_date": "Luontipäivämäärä", + "details.description": "Kuvaus", + "details.badge_preview": "Merkin esikatselu", + "details.change_icon": "Vaihda kuvake", + "details.change_label_colour": "Vaihda merkin väriä", + "details.change_text_colour": "Vaihda tekstin väriä", + "details.badge_text": "Merkin teksti", + "details.userTitleEnabled": "Näytä merkki", + "details.private_help": "Jos päällä, ryhmään liittyminen vaattii hyväksynnän ryhmän omistajalta.", + "details.hidden": "Piilotettu", + "details.hidden_help": "Jos päällä, niin ryhmä ei ole näkyvissä ryhmälistauksissa ja käyttäjät tulee lisätä ryhmään käsin.", + "details.delete_group": "Poista ryhmä", + "details.private_system_help": "Yksityiset ryhmät on poistettu käytöstä järjestelmän tasolla ja tämä valinta ei tee mitään.", + "event.updated": "Ryhmän tiedot on jo päivitetty", + "event.deleted": "Ryhmä \"%1\" on jo poistettu", + "membership.accept-invitation": "Hyväksy kutsu", + "membership.accept.notification_title": "Olet nyt %1 ryhmän jäsen", + "membership.invitation-pending": "Odottavat kutsut", + "membership.join-group": "Liity ryhmään", + "membership.leave-group": "Poistu ryhmästä", + "membership.leave.notification_title": "%1 on lähtenyt %2 ryhmästä", + "membership.reject": "Hylkää", + "new-group.group_name": "Ryhmän nimi", "upload-group-cover": "Upload group cover", "bulk-invite-instructions": "Enter a list of comma separated usernames to invite to this group", - "bulk-invite": "Bulk Invite", + "bulk-invite": "Massa kutsu", "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?" } \ No newline at end of file diff --git a/public/language/fi/login.json b/public/language/fi/login.json index 7631447d06..301a2cb58b 100644 --- a/public/language/fi/login.json +++ b/public/language/fi/login.json @@ -1,12 +1,12 @@ { - "username-email": "Username / Email", - "username": "Username", - "email": "Email", + "username-email": "Käyttäjätunnus / Sähköposti", + "username": "Käyttäjätunnus", + "email": "Sähköposti", "remember_me": "Muista minut?", "forgot_password": "Unohditko salasanasi?", "alternative_logins": "Vaihtoehtoiset kirjautumistavat", - "failed_login_attempt": "Login Unsuccessful", + "failed_login_attempt": "Kirjautuminen epäonnistui", "login_successful": "Olet onnistuneesti kirjautunut sisään!", "dont_have_account": "Ei käyttäjätunnusta?", - "logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity" + "logged-out-due-to-inactivity": "Sinut on kirjattu ulos hallintapaneelista liian pitkän toimettomuuden takia." } \ No newline at end of file diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json index 629bc9d74c..48e6140919 100644 --- a/public/language/fi/notifications.json +++ b/public/language/fi/notifications.json @@ -6,25 +6,25 @@ "back_to_home": "Palaa takaisin %1", "outgoing_link": "Ulkopuolinen linkki", "outgoing_link_message": "Olet nyt poistumassa %1", - "continue_to": "Continue to %1", - "return_to": "Return to %1", - "new_notification": "You have a new notification", + "continue_to": "Jatka %1", + "return_to": "Palaa %1", + "new_notification": "Sinulle ei ole uusia ilmoituksia", "you_have_unread_notifications": "Sinulla on lukemattomia ilmoituksia.", - "all": "All", - "topics": "Topics", - "replies": "Replies", - "chat": "Chats", - "follows": "Follows", - "upvote": "Upvotes", + "all": "Kaikki", + "topics": "Aiheet", + "replies": "Vastaukset", + "chat": "Keskustelut", + "follows": "Seuratut", + "upvote": "Tykkäykset", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Uusi viesti käyttäjältä %1", - "upvoted_your_post_in": "%1 has upvoted your post in %2.", - "upvoted_your_post_in_dual": "%1 and %2 have upvoted your post in %3.", - "upvoted_your_post_in_multiple": "%1 and %2 others have upvoted your post in %3.", - "moved_your_post": "%1 has moved your post to %2", - "moved_your_topic": "%1 has moved %2", + "upvoted_your_post_in": "%1 käyttäjä tykkäsi viestistäsi aiheessa %2 ", + "upvoted_your_post_in_dual": "%1 ja %2 tykkäsivät viestistäsi aiheesssa %3", + "upvoted_your_post_in_multiple": "%1 ja %2 muuta tykkäsivät viestistäsi aiheessa %3", + "moved_your_post": "%1 on siirtänyt viestisi %2", + "moved_your_topic": "%1 on siirtänyt %2 alueelle", "user_flagged_post_in": "%1 flagged a post in %2", "user_flagged_post_in_dual": "%1 and %2 flagged a post in %3", "user_flagged_post_in_multiple": "%1 and %2 others flagged a post in %3", @@ -32,33 +32,33 @@ "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_posted_to": "%1 on vastannut viestiin: %2", - "user_posted_to_dual": "%1 and %2 have posted replies to: %3", - "user_posted_to_multiple": "%1 and %2 others have posted replies to: %3", + "user_posted_to_dual": "%1 ja %2 ovat vastanneet viestiin: %3", + "user_posted_to_multiple": "%1 ja %2 muuta ovat vastanneet viestiin: %3 ", "user_posted_topic": "%1 on kirjoittanut uuden aiheen: %2", "user_started_following_you": "%1 alkoi seurata sinua.", - "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", - "new_register": "%1 sent a registration request.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "user_started_following_you_dual": "%1 ja %2 alkoivat seurata sinua", + "user_started_following_you_multiple": "%1 ja %2 muuta alkoivat seurata sinua", + "new_register": "%1 lähetti rekisteröitymispyynnön", + "new_register_multiple": "%1 rekisteröintipyyntöä odottaa katselmointia", "flag_assigned_to_you": "Flag %1 has been assigned to you", - "post_awaiting_review": "Post awaiting review", + "post_awaiting_review": "Viesti odottaa katselmointia", "email-confirmed": "Sähköpostiosoite vahvistettu", "email-confirmed-message": "Kiitos sähköpostiosoitteesi vahvistamisesta. Käyttäjätilisi on nyt täysin aktivoitu.", "email-confirm-error-message": "Ongelma sähköpostiosoitteen vahvistamisessa. Ehkäpä koodi oli virheellinen tai vanhentunut.", "email-confirm-sent": "Vahvistussähköposti lähetetty.", - "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_group-request-membership": "When someone requests to join a group you own", - "notificationType_new-register": "When someone gets added to registration queue", - "notificationType_post-queue": "When a new post is queued", + "none": "Ei mitään", + "notification_only": "Vain ilmoitukset", + "email_only": "Vain sähköposti", + "notification_and_email": "Ilmoitukset & Sähköposti", + "notificationType_upvote": "Kun joku tykkää viestistäsi", + "notificationType_new-topic": "Kun joku seuraa viestejäsi aiheessa", + "notificationType_new-reply": "Kun uusi vastaus on lähetetty aiheeseen, jota seuraat", + "notificationType_follow": "Kun joku alkaa seurata sinua", + "notificationType_new-chat": "Kun saat viestin keskusteluun", + "notificationType_group-invite": "Kun saat kutsun ryhmään", + "notificationType_group-request-membership": "Kun joku pyytää lupaa liittyä ryhmään, jonka omistaja olet", + "notificationType_new-register": "Kun joku lisätään rekisteröintijonoon", + "notificationType_post-queue": "Kun uusi viesti tulee jonoon", "notificationType_new-post-flag": "When a post is flagged", "notificationType_new-user-flag": "When a user is flagged" } \ No newline at end of file diff --git a/public/language/fi/pages.json b/public/language/fi/pages.json index 167428148b..f304200c54 100644 --- a/public/language/fi/pages.json +++ b/public/language/fi/pages.json @@ -6,59 +6,59 @@ "popular-month": "Suositut aiheet tässä kuussa", "popular-alltime": "Suositut aiheet koko ajalta", "recent": "Viimeisimmät aiheet", - "top-day": "Top voted topics today", - "top-week": "Top voted topics this week", - "top-month": "Top voted topics this month", - "top-alltime": "Top Voted Topics", - "moderator-tools": "Moderator Tools", + "top-day": "Eniten tykätyt aiheet tänään", + "top-week": "Eniten tykätyt aiheet tällä viikolla", + "top-month": "Eniten tykätyt aiheet tässä kuussa", + "top-alltime": "Eniten tykätyt aiheet", + "moderator-tools": "Ylläpidon työkalut", "flagged-content": "Flagged Content", "ip-blacklist": "IP Blacklist", "post-queue": "Post Queue", "users/online": "Paikalla olevat käyttäjät", "users/latest": "Viimeisimmat käyttäjät", - "users/sort-posts": "Users with the most posts", - "users/sort-reputation": "Users with the most reputation", + "users/sort-posts": "Käyttäjät joilla eniten viestejä", + "users/sort-reputation": "Käyttäjät joilla paras maine", "users/banned": "Banned Users", "users/most-flags": "Most flagged users", - "users/search": "User Search", + "users/search": "Käyttäjähaku", "notifications": "Ilmoitukset", "tags": "Tunnisteet", "tag": "Topics tagged under "%1"", "register": "Luo käyttäjät", - "registration-complete": "Registration complete", + "registration-complete": "Rekisteröinti valmis", "login": "Kirjaudu käyttäjällesi", - "reset": "Reset your account password", - "categories": "Categories", - "groups": "Groups", - "group": "%1 group", + "reset": "Nollaa tunnuksesi salasana", + "categories": "Kategoriat", + "groups": "Ryhmät", + "group": "%1 ryhmä", "chats": "Keskustelut", - "chat": "Chatting with %1", + "chat": "Keskustelee %1 kanssa", "flags": "Flags", "flag-details": "Flag %1 Details", - "account/edit": "Editing \"%1\"", + "account/edit": "Muokkaa \"%1\"", "account/edit/password": "Editing password of \"%1\"", "account/edit/username": "Editing username of \"%1\"", "account/edit/email": "Editing email of \"%1\"", - "account/info": "Account Info", + "account/info": "Käyttäjätilin tiedot", "account/following": "Ihmiset, jota %1 seuraa", "account/followers": "Ihmiset, jotka seuraavat %1", "account/posts": "Posts made by %1", - "account/latest-posts": "Latest posts made by %1", - "account/topics": "Topics created by %1", - "account/groups": "%1's Groups", + "account/latest-posts": "%1 viimeisimmät viestit", + "account/topics": "%1 luomat aiheet", + "account/groups": "%1 ryhmät", "account/watched_categories": "%1's Watched Categories", "account/bookmarks": "%1's Bookmarked Posts", - "account/settings": "User Settings", - "account/watched": "Topics watched by %1", - "account/ignored": "Topics ignored by %1", - "account/upvoted": "Posts upvoted by %1", + "account/settings": "Käyttäjän asetukset", + "account/watched": "%1 seuraamat aiheet", + "account/ignored": "%1 sivuuttamat aiheet", + "account/upvoted": "%1 tykkäämät viestit", "account/downvoted": "Posts downvoted by %1", - "account/best": "Best posts made by %1", + "account/best": "%1 tekemät parhaat viestit", "account/blocks": "Blocked users for %1", - "account/uploads": "Uploads by %1", + "account/uploads": "%1 lähetykset", "account/sessions": "Login Sessions", - "confirm": "Email Confirmed", - "maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.", - "maintenance.messageIntro": "Additionally, the administrator has left this message:", - "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." + "confirm": "Sähköposti varmistettu", + "maintenance.text": "%1 sivustoa huolletaan parhaillaan. Tarkista sivusto hetken kuluttua uudestaan.", + "maintenance.messageIntro": "Lisäksi ylläpitäjä on jättänyt seuraavan viestin:", + "throttled.text": "%1 sivusto on tällähetkellä alhaalla johtuen liiasta kuormituksesta. Tule takaisin myöhemmin." } \ No newline at end of file diff --git a/public/language/fi/recent.json b/public/language/fi/recent.json index aed5a7a0fd..d7a3dfb5ce 100644 --- a/public/language/fi/recent.json +++ b/public/language/fi/recent.json @@ -6,14 +6,14 @@ "year": "Vuosi", "alltime": "Alusta lähtien", "no_recent_topics": "Ei viimeisimpiä aiheita.", - "no_popular_topics": "There are no popular topics.", + "no_popular_topics": "Ei päivityksiä suosituimmissa aiheissa", "there-is-a-new-topic": "Uusi aihe.", "there-is-a-new-topic-and-a-new-post": "Uusi aihe ja uusi viesti.", "there-is-a-new-topic-and-new-posts": "Uusi aihe ja %1 uutta viestiä.", "there-are-new-topics": "%1 uutta aihetta.", "there-are-new-topics-and-a-new-post": "%1 uutta aihetta ja uusi viesti.", "there-are-new-topics-and-new-posts": "%1 uutta aihetta ja %2 uutta viestiä.", - "there-is-a-new-post": "Uusi viesti.", + "there-is-a-new-post": "Ei uusia viestejä", "there-are-new-posts": "%1 uutta viestiä.", "click-here-to-reload": "Päivitä napsauttamalla tätä." } \ No newline at end of file diff --git a/public/language/fi/register.json b/public/language/fi/register.json index 60019c0c98..4b68b0ad6f 100644 --- a/public/language/fi/register.json +++ b/public/language/fi/register.json @@ -1,6 +1,6 @@ { "register": "Rekisteröidy", - "cancel_registration": "Cancel Registration", + "cancel_registration": "Peruuta rekisteröinti", "help.email": "Oletuksena sähköpostiosoitettasi ei näytetä muille.", "help.username_restrictions": "Yksilöllisen käyttäjätunnuksen pitää olla %1-%2 merkkiä pitkä. Toiset voivat mainita sinut @username.", "help.minimum_password_length": "Salasanasi pitää olla vähintään %1 merkin mittainen.", @@ -16,11 +16,11 @@ "alternative_registration": "Vaihtoehtoiset rekisteröitymistavat", "terms_of_use": "Käyttöehdot", "agree_to_terms_of_use": "Hyväksyn käyttöehdot", - "terms_of_use_error": "You must agree to the Terms of Use", - "registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.", - "interstitial.intro": "We require some additional information before we can create your account.", - "interstitial.errors-found": "We could not complete your registration:", - "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.", - "gdpr_agree_email": "I consent to receive digest and notification emails from this website.", - "gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails." + "terms_of_use_error": "Sinun täytyy hyväksyä sopimusehdot", + "registration-added-to-queue": "Rekisteröintisi on lisätty listalle odottamaan hyväksyntää. Saat ilmoituksen sähköpostiisi, kun ylläpitäjä on hyväksynyt rekisteröitymisesin.", + "interstitial.intro": "Sivusto vaatii lisätietoja ennenkuin voi luoda tunnuksen.", + "interstitial.errors-found": "Rekisteröitymisesi keskeytyi", + "gdpr_agree_data": "Annan hyväksyntäni henkilökohtaisten tietojen keräämiseen ja prosessointiin tälle verkkosivulle.", + "gdpr_agree_email": "Haluan vastaanottaa viestikoosteita ja ilmoituksia tältä verkkosivulta", + "gdpr_consent_denied": "Sinun täytyy antaa suostumus sivustolle, jotta se voi kerätä ja tallentaa tietosi ja lähettää sinulle tarvittaessa sähköpostia." } \ No newline at end of file diff --git a/public/language/fi/reset_password.json b/public/language/fi/reset_password.json index 45fad951c6..a3d8cf20e1 100644 --- a/public/language/fi/reset_password.json +++ b/public/language/fi/reset_password.json @@ -9,9 +9,9 @@ "repeat_password": "Vahvista salasana", "enter_email": "Syötä sähköpostiosoitteesi, niin me lähetämme sinulle sähköpostilla ohjeet käyttäjätilisi palauttamiseksi.", "enter_email_address": "Syötä sähköpostiosoite", - "password_reset_sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.", + "password_reset_sent": "Salasanan nollaus viesti on lähetetty annettuun osoitteeseen, jos osoite löytyy järjestelmän kannasta. Huomaa, että on mahdollista lähettää vain yksi palautusviesti minuutissa.", "invalid_email": "Virheellinen sähköpostiosoite / Sähköpostiosoitetta ei ole olemassa!", "password_too_short": "Salasana on liian lyhyt, käytä pidempää salasanaa.", "passwords_do_not_match": "Salasana ja sen vahvistus eivät täsmää.", - "password_expired": "Your password has expired, please choose a new password" + "password_expired": "Salasanasi on vanhentunut. Luo uusi salasana." } \ No newline at end of file diff --git a/public/language/fi/search.json b/public/language/fi/search.json index 2428b84808..47bc243f81 100644 --- a/public/language/fi/search.json +++ b/public/language/fi/search.json @@ -1,23 +1,23 @@ { - "results_matching": "%1 result(s) matching \"%2\", (%3 seconds)", - "no-matches": "No matches found", - "advanced-search": "Advanced Search", + "results_matching": "%1 tulosta löytyi hakusanalla \"%2\" (%3 sekunnissa).", + "no-matches": "Ei hakuosumia", + "advanced-search": "Laajennettu haku", "in": "In", "titles": "Otsikot", "titles-posts": "Otsikot ja Viestit", "match-words": "Match words", - "all": "All", - "any": "Any", + "all": "Kaikki", + "any": "Mikä tahansa", "posted-by": "Kirjoittanut", - "in-categories": "In Categories", + "in-categories": "Kategorioissa", "search-child-categories": "Hae alikategorioista", - "has-tags": "Has tags", + "has-tags": "Sisältää tagit", "reply-count": "Vastausten määrä", "at-least": "Vähintään", "at-most": "Enintään", - "relevance": "Relevance", + "relevance": "Relevanssi", "post-time": "Julkaisuaika", - "votes": "Votes", + "votes": "Ääniä", "newer-than": "Uudemmat kuin", "older-than": "Vanhemmat kuin", "any-date": "Mikä tahansa päivä", @@ -31,7 +31,7 @@ "sort-by": "Lajitteluperuste", "last-reply-time": "Vastattu viimeksi", "topic-title": "Aiheen otsikko", - "topic-votes": "Topic votes", + "topic-votes": "Aiheiden äänet", "number-of-replies": "Vastausten määrä", "number-of-views": "Katselukertojen määrä", "topic-start-date": "Aiheen aloituspäivä", @@ -39,10 +39,10 @@ "category": "Kategoria", "descending": "Laskevassa järjestyksessä", "ascending": "Nousevassa järjestyksessä", - "save-preferences": "Save preferences", - "clear-preferences": "Clear preferences", - "search-preferences-saved": "Search preferences saved", - "search-preferences-cleared": "Search preferences cleared", - "show-results-as": "Show results as", - "see-more-results": "See more results (%1)" + "save-preferences": "Tallenna asetukset", + "clear-preferences": "Tyhjennä asetukset", + "search-preferences-saved": "Haun asetukset tallennettu", + "search-preferences-cleared": "Haun asetukset nollattu", + "show-results-as": "Näytä tulokset", + "see-more-results": "Näytä lisää tuloksia (%1)" } \ No newline at end of file diff --git a/public/language/fi/success.json b/public/language/fi/success.json index 0c0d613bde..b782e7e9a5 100644 --- a/public/language/fi/success.json +++ b/public/language/fi/success.json @@ -1,7 +1,7 @@ { "success": "Onnistui", "topic-post": "Viestin lähettäminen onnistui.", - "post-queued": "Your post is queued for approval.", + "post-queued": "Viestisi on jonossa odottamassa hyväksyntää", "authentication-successful": "Tunnistautuminen onnistui", "settings-saved": "Asetukset tallennettu!" } \ No newline at end of file diff --git a/public/language/fi/tags.json b/public/language/fi/tags.json index 35903730b2..970d087ec2 100644 --- a/public/language/fi/tags.json +++ b/public/language/fi/tags.json @@ -1,7 +1,7 @@ { "no_tag_topics": "Ei viimeisimpiä aiheita tällä tagilla.", "tags": "Tagit", - "enter_tags_here": "Enter tags here, between %1 and %2 characters each.", + "enter_tags_here": "Syötä tagit tähän merkkien %1 ja %2 väliin.", "enter_tags_here_short": "Syötä tagit...", "no_tags": "Ei vielä yhtään tagia." } \ No newline at end of file diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json index a2a9917b8d..5f3ec66000 100644 --- a/public/language/fi/topic.json +++ b/public/language/fi/topic.json @@ -5,7 +5,7 @@ "no_topics_found": "Aiheita ei löytynyt!", "no_posts_found": "Viestejä ei löytynyt!", "post_is_deleted": "Tämä viesti poistettiin!", - "topic_is_deleted": "This topic is deleted!", + "topic_is_deleted": "Tämä aihe on poistettu!", "profile": "Profiili", "posted_by": "%1 kirjoitti", "posted_by_guest": "Vieras kirjoitti", @@ -13,127 +13,127 @@ "notify_me": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä", "quote": "Lainaa", "reply": "Vastaa", - "replies_to_this_post": "%1 Replies", - "one_reply_to_this_post": "1 Reply", - "last_reply_time": "Last reply", - "reply-as-topic": "Reply as topic", + "replies_to_this_post": "%1 vastauksia", + "one_reply_to_this_post": "1 vastaus", + "last_reply_time": "Viimeisin vastaus", + "reply-as-topic": "Vastaa aiheeseen", "guest-login-reply": "Kirjaudu sisään voidaksesi vastata", - "login-to-view": "🔒 Log in to view", + "login-to-view": "Kirjaudu sisään", "edit": "Muokkaa", "delete": "Poista", - "purge": "Purge", + "purge": "Poista pysyvästi", "restore": "Palauta", "move": "Siirrä", - "change-owner": "Change Owner", + "change-owner": "Vaihda omistaja", "fork": "Haaroita", "link": "Linkitä", "share": "Jaa", "tools": "Työkalut", "locked": "Lukittu", - "pinned": "Pinned", - "moved": "Moved", - "copy-ip": "Copy IP", + "pinned": "Kiinnitetty", + "moved": "Siirretty", + "copy-ip": "Kopioi IP", "ban-ip": "Ban IP", - "view-history": "Edit History", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "view-history": "Muokkaa historiaa", + "bookmark_instructions": "Klikkaa tästä palataksesi viimeisimpään luettuun viestiin tässä aiheessa", "flag_title": "Ilmianna tämä viesti moderaattoreille", - "merged_message": "This topic has been merged into %2", + "merged_message": "Tämä aihe on sulautettu aiheeseen %2¤", "deleted_message": "Tämä aihe on poistettu. Vain käyttäjät, joilla on aiheen hallintaoikeudet, voivat nähdä sen.", "following_topic.message": "Saat nyt ilmoituksen, kun joku kirjoittaa tähän aiheeseen.", - "not_following_topic.message": "You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.", - "ignoring_topic.message": "You will no longer see this topic in the unread topics list. You will be notified when you are mentioned or your post is up voted.", + "not_following_topic.message": "Et näe tätä aihetta lukemattomissa aiheissa, mutta saat ilmoituksen kun joku lähettää viestin tähän aiheeseen.", + "ignoring_topic.message": "Et enää näe tätä aihetta lukemattomat aiheet listauksessa. Saat ilmoituksen, kun joku mainitsee sinut tai viestistäsi tykätään.", "login_to_subscribe": "Ole hyvä ja rekisteröidy tai kirjaudu sisään tilataksesi tämän aiheen.", "markAsUnreadForAll.success": "Aihe merkitty lukemattomaksi kaikille.", - "mark_unread": "Mark unread", - "mark_unread.success": "Topic marked as unread.", - "watch": "Tarkkaile", + "mark_unread": "Merkitse lukemattomaksi", + "mark_unread.success": "Aihe on merkitty lukemattomaksi", + "watch": "Seuraa", "unwatch": "Älä seuraa", "watch.title": "Ilmoita, kun tähän keskusteluun tulee uusia viestejä", "unwatch.title": "Lopeta tämän aiheen seuraaminen", "share_this_post": "Jaa tämä viesti", - "watching": "Watching", - "not-watching": "Not Watching", - "ignoring": "Ignoring", - "watching.description": "Notify me of new replies.
Show topic in unread.", - "not-watching.description": "Do not notify me of new replies.
Show topic in unread if category is not ignored.", - "ignoring.description": "Do not notify me of new replies.
Do not show topic in unread.", + "watching": "Seurataan", + "not-watching": "Ei seurannassa", + "ignoring": "Sivuutettu", + "watching.description": "Ilmoita minulle uusista vastauksista.
Näytä aiheet lukemattomissa.", + "not-watching.description": "Älä ilmoita minulle uusista vastauksista.
Näytä aihe lukemattomissa jos kategoriaa ei ole sivuutettu.", + "ignoring.description": "Älä ilmoita minulle uusista vastauksista.", "thread_tools.title": "Aiheen työkalut", - "thread_tools.markAsUnreadForAll": "Mark Unread For All", + "thread_tools.markAsUnreadForAll": "Merkitse lukemattomaksi kaikille", "thread_tools.pin": "Kiinnitä aihe", "thread_tools.unpin": "Poista aiheen kiinnitys", "thread_tools.lock": "Lukitse aihe", "thread_tools.unlock": "Poista aiheen lukitus", "thread_tools.move": "Siirrä aihe", - "thread_tools.move-posts": "Move Posts", + "thread_tools.move-posts": "Siirrä viestit", "thread_tools.move_all": "Siirrä kaikki", - "thread_tools.change_owner": "Change Owner", - "thread_tools.select_category": "Select Category", + "thread_tools.change_owner": "Vaihda omistaja", + "thread_tools.select_category": "Valitse kategoria", "thread_tools.fork": "Haaroita aihe", "thread_tools.delete": "Poista aihe", - "thread_tools.delete-posts": "Delete Posts", + "thread_tools.delete-posts": "Poista viestit", "thread_tools.delete_confirm": "Haluatko varmasti poistaa tämän aiheen?", "thread_tools.restore": "Palauta aihe", "thread_tools.restore_confirm": "Haluatko varmasti palauttaa tämän aiheen?", - "thread_tools.purge": "Purge Topic", - "thread_tools.purge_confirm": "Are you sure you want to purge this topic?", - "thread_tools.merge_topics": "Merge Topics", - "thread_tools.merge": "Merge", - "topic_move_success": "This topic has been successfully moved to %1", + "thread_tools.purge": "Poista aihe pysyvästi", + "thread_tools.purge_confirm": "Oletko varma, että haluat poistaa pysyvästi tämän aiheen?", + "thread_tools.merge_topics": "Sulauta aiheet", + "thread_tools.merge": "Sulauta", + "topic_move_success": "Tämä aihe on siirretty onnistuneesti %1 alueelle", "post_delete_confirm": "Haluatko varmasti poistaa tämän viestin?", "post_restore_confirm": "Haluatko varmasti palauttaa tämän viestin?", - "post_purge_confirm": "Are you sure you want to purge this post?", + "post_purge_confirm": "Oletko varma, että haluat poistaa pysyvästi tämän viestin?", "load_categories": "Ladataan aihealueita", "confirm_move": "Siirrä", "confirm_fork": "Haaroita", - "bookmark": "Bookmark", - "bookmarks": "Bookmarks", - "bookmarks.has_no_bookmarks": "You haven't bookmarked any posts yet.", + "bookmark": "Kirjanmerkki", + "bookmarks": "Kirjanmerkit", + "bookmarks.has_no_bookmarks": "Et ole kirjanmerkinnyt yhtään viestiä vielä.", "loading_more_posts": "Ladataan lisää viestejä", "move_topic": "Siirrä aihe", - "move_topics": "Move Topics", + "move_topics": "Siirrä aiheet", "move_post": "Siirrä viesti", - "post_moved": "Post moved!", + "post_moved": "Viestit siirretty!", "fork_topic": "Haaroita keskustelu", "fork_topic_instruction": "Napsauta viestejä, jotka haluat haaroittaa", "fork_no_pids": "Ei valittuja viestejä!", - "fork_pid_count": "%1 post(s) selected", - "fork_success": "Successfully forked topic! Click here to go to the forked topic.", - "delete_posts_instruction": "Click the posts you want to delete/purge", - "merge_topics_instruction": "Click the topics you want to merge", - "move_posts_instruction": "Click the posts you want to move", - "change_owner_instruction": "Click the posts you want to assign to another user", + "fork_pid_count": "%1 viesti(ä) valittuna", + "fork_success": "Aihe eriytetty onnistuneesti! Klikkaa täältä mennäkseksi uuteen aiheeseen.", + "delete_posts_instruction": "Valitse viestit jotka haluat poistaa (pysyvästi)", + "merge_topics_instruction": "Valitse viestit jotka haluat sulauttaa", + "move_posts_instruction": "Valitse viestit jotka haluat siirtää", + "change_owner_instruction": "Valitse viestit jotka haluat siirtää toiselle henkilölle", "composer.title_placeholder": "Syötä aiheesi otsikko tähän...", - "composer.handle_placeholder": "Name", + "composer.handle_placeholder": "Nimi", "composer.discard": "Hylkää", "composer.submit": "Lähetä", - "composer.replying_to": "Replying to %1", + "composer.replying_to": "Vastaus viestiin %1", "composer.new_topic": "Uusi aihe", "composer.uploading": "ladataan palvelimelle...", - "composer.thumb_url_label": "Paste a topic thumbnail URL", - "composer.thumb_title": "Add a thumbnail to this topic", + "composer.thumb_url_label": "Liitä aiheen aiheen kuvakkeen URL", + "composer.thumb_title": "Lisää kuvake tähän aiheeseen", "composer.thumb_url_placeholder": "http://example.com/thumb.png", "composer.thumb_file_label": "Tai lataa tiedosto palvelimelle", - "composer.thumb_remove": "Clear fields", + "composer.thumb_remove": "Tyhjennä kentät", "composer.drag_and_drop_images": "Vedä ja pudota kuvat tähän", - "more_users_and_guests": "%1 more user(s) and %2 guest(s)", + "more_users_and_guests": "%1 käyttäjä(ä) ja %2 vieras(sta)", "more_users": "%1 more user(s)", "more_guests": "%1 more guest(s)", "users_and_others": "%1 and %2 others", - "sort_by": "Sort by", - "oldest_to_newest": "Oldest to Newest", - "newest_to_oldest": "Newest to Oldest", - "most_votes": "Most Votes", - "most_posts": "Most Posts", + "sort_by": "Lajittele", + "oldest_to_newest": "Vanhimmasta uusimpaan", + "newest_to_oldest": "Uusimmasta vanhimpaan", + "most_votes": "Eniten ääniä", + "most_posts": "Eniten viestejä", "stale.title": "Create new topic instead?", - "stale.warning": "The topic you are replying to is quite old. Would you like to create a new topic instead, and reference this one in your reply?", - "stale.create": "Create a new topic", - "stale.reply_anyway": "Reply to this topic anyway", - "link_back": "Re: [%1](%2)", - "diffs.title": "Post Edit History", - "diffs.description": "This post has %1 revisions. Click one of the revisions below to see the post content at that point in time.", - "diffs.no-revisions-description": "This post has %1 revisions.", - "diffs.current-revision": "current revision", - "diffs.original-revision": "original revision", - "timeago_later": "%1 later", - "timeago_earlier": "%1 earlier" + "stale.warning": "Aihe johon olet vastaamassa on melko vanha. Haluaisitko luoda mieluummin uuden aiheen ja viitata siitä tähän viestissäsi?", + "stale.create": "Luo uusi aihe", + "stale.reply_anyway": "Vastaa kuitenkin tähän aiheeseen", + "link_back": "Vs: [%1] (%2)", + "diffs.title": "Viestin muokkaushistoria", + "diffs.description": "Tästä viestistä on %1 versiota. Klikkaa alempaa viestiä haluttua viestiä, jonka sisällön haluat nähdä.", + "diffs.no-revisions-description": "Tästä viestistä on %1 versiota", + "diffs.current-revision": "nykyinen versio", + "diffs.original-revision": "alkuperäinen versio", + "timeago_later": "%1 myöhempi", + "timeago_earlier": "%1 aiempi" } \ No newline at end of file diff --git a/public/language/fi/unread.json b/public/language/fi/unread.json index ab7ffbf7eb..63b6b4b1be 100644 --- a/public/language/fi/unread.json +++ b/public/language/fi/unread.json @@ -5,11 +5,11 @@ "mark_as_read": "Merkitse luetuksi", "selected": "Valitut", "all": "Kaikki", - "all_categories": "All categories", + "all_categories": "Kaikki kategoriat", "topics_marked_as_read.success": "Aihe merkitty luetuksi!", - "all-topics": "All Topics", - "new-topics": "New Topics", - "watched-topics": "Watched Topics", - "unreplied-topics": "Unreplied Topics", - "multiple-categories-selected": "Multiple Selected" + "all-topics": "Kaikki aiheet", + "new-topics": "Uudet aiheet", + "watched-topics": "Seuratut aiheet", + "unreplied-topics": "Vastaamattomat aiheet", + "multiple-categories-selected": "Useita valittuna" } \ No newline at end of file diff --git a/public/language/fi/uploads.json b/public/language/fi/uploads.json index 651a839876..3cbe97b030 100644 --- a/public/language/fi/uploads.json +++ b/public/language/fi/uploads.json @@ -1,9 +1,9 @@ { - "uploading-file": "Uploading the file...", - "select-file-to-upload": "Select a file to upload!", - "upload-success": "File uploaded successfully!", - "maximum-file-size": "Maximum %1 kb", - "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." + "uploading-file": "Lähetetään tiedostoa..", + "select-file-to-upload": "Valitse tiedosto lähetettäväksi!", + "upload-success": "Tiedoston lähetys onnistui", + "maximum-file-size": "Maksimi koko on %1 kt", + "no-uploads-found": "Lähetyksiä ei löytynyt", + "public-uploads-info": "Lähetettyjen tiedostojen näkyvyys on julkinen, kirjautumattomat käyttäjät voivat nähdä ne.", + "private-uploads-info": "Lähetettyjen tiedostojen näkyvyys on rajoitettu, vain kirjautuneet käyttäjät voivat nähdä ne." } \ No newline at end of file diff --git a/public/language/fi/user.json b/public/language/fi/user.json index cd8ed527ca..9c9ce75f52 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -1,20 +1,20 @@ { "banned": "Bannattu", "offline": "Offline", - "deleted": "Deleted", + "deleted": "Poistettu", "username": "Käyttäjän nimi", "joindate": "Liittymispäivä", "postcount": "Viestien määrä", "email": "Sähköposti", "confirm_email": "Vahvista sähköpostiosoite", - "account_info": "Account Info", - "ban_account": "Ban Account", - "ban_account_confirm": "Do you really want to ban this user?", - "unban_account": "Unban Account", + "account_info": "Tilin tiedot", + "ban_account": "Bannaa käyttäjätili", + "ban_account_confirm": "Haluatko varmasti bannata käyttäjän?", + "unban_account": "Peru käyttäjätilin banni", "delete_account": "Poista käyttäjätili", "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_this_account_confirm": "Are you sure you want to delete this account?
This action is irreversible and you will not be able to recover any data

", - "account-deleted": "Account deleted", + "account-deleted": "Tili poistettu", "fullname": "Koko nimi", "website": "Kotisivu", "location": "Sijainti", @@ -24,11 +24,11 @@ "profile": "Profiili", "profile_views": "Profiilia katsottu", "reputation": "Maine", - "bookmarks": "Bookmarks", - "watched_categories": "Watched categories", - "change_all": "Change All", + "bookmarks": "Kirjanmerkit", + "watched_categories": "Seuratut kategoriat", + "change_all": "Muuta kaikki", "watched": "Seurattu", - "ignored": "Ignored", + "ignored": "Ohitetut", "default-category-watch-state": "Default category watch state", "followers": "Seuraajat", "following": "Seuratut", @@ -36,24 +36,24 @@ "block_toggle": "Toggle Block", "block_user": "Block User", "unblock_user": "Unblock User", - "aboutme": "About me", + "aboutme": "Tietoja minusta", "signature": "Allekirjoitus", "birthday": "Syntymäpäivä", "chat": "Keskustele", - "chat_with": "Continue chat with %1", - "new_chat_with": "Start new chat with %1", + "chat_with": "Jatka keskustelua %1 kanssa", + "new_chat_with": "Aloita keskutelu %1 kanssa", "flag-profile": "Flag Profile", "follow": "Seuraa", "unfollow": "Älä seuraa", - "more": "More", + "more": "Lisää", "profile_update_success": "Profiili päivitettiin onnistuneesti!", "change_picture": "Vaihda kuva", - "change_username": "Change Username", - "change_email": "Change Email", + "change_username": "Vaihda käyttäjänimi", + "change_email": "Vaihda sähköpostiosoite", "email_same_as_password": "Please enter your current password to continue – you've entered your new email again", "edit": "Muokkaa", - "edit-profile": "Edit Profile", - "default_picture": "Default Icon", + "edit-profile": "Muokkaa profiiliasi", + "default_picture": "Oletus kuvake", "uploaded_picture": "Ladattu kuva", "upload_new_picture": "Lataa uusi kuva", "upload_new_picture_from_url": "Lataa uusi kuva URL-osoitteesta", @@ -67,21 +67,21 @@ "confirm_password": "Vahvista salasana", "password": "Salasana", "username_taken_workaround": "Pyytämäsi käyttäjänimi oli jo varattu, joten muutimme sitä hieman. Käyttäjänimesi on siis nyt %1", - "password_same_as_username": "Your password is the same as your username, please select another password.", - "password_same_as_email": "Your password is the same as your email, please select another password.", - "weak_password": "Weak password.", + "password_same_as_username": "Salasanasi on sama kuin käytttänimesi. Valitse joku toinen salasana.", + "password_same_as_email": "Salasanasi on sama kuin sähköpostiosoitteesi. Valitse joku toinen salasana.", + "weak_password": "Heikko salasana", "upload_picture": "Lataa kuva", "upload_a_picture": "Lataa kuva", - "remove_uploaded_picture": "Remove Uploaded Picture", + "remove_uploaded_picture": "Poista lisätty kuva", "upload_cover_picture": "Upload cover picture", "remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?", - "crop_picture": "Crop picture", - "upload_cropped_picture": "Crop and upload", + "crop_picture": "Rajaa kuvaa", + "upload_cropped_picture": "Rajaa ja lähetä", "settings": "Asetukset", "show_email": "Näytä sähköpostiosoitteeni", "show_fullname": "Näytä koko nimeni", "restrict_chats": "Salli pikaviestit vain seuraamiltani käyttäjiltä", - "digest_label": "Subscribe to Digest", + "digest_label": "Tilaa kooste", "digest_description": "Tilaa päivitykset sähköpostilla tästä foorumista (uudet ilmoitukset ja aiheet) asetetun ajastuksen mukaan", "digest_off": "Pois päältä", "digest_daily": "Päivittäin", @@ -89,14 +89,14 @@ "digest_monthly": "Kuukausittain", "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.", - "has_no_topics": "This user hasn't posted any topics yet.", - "has_no_watched_topics": "This user hasn't watched any topics yet.", - "has_no_ignored_topics": "This user hasn't ignored any topics yet.", - "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", + "has_no_posts": "Käyttäjä ei ole vielä lähettänyt viestejä ", + "has_no_topics": "Käyttäjä ei ole lähettänyt viestiä yhteenkään aiheeseen vielä.", + "has_no_watched_topics": "Käyttäjä ei seuraa mitään aihetta vielä.", + "has_no_ignored_topics": "Käyttäjä ei ole merkannut sivuutettavaksi yhtään aihetta.", + "has_no_upvoted_posts": "Käyttäjä ei ole tykännyt yhdestäkään viestistä vielä.", "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", - "has_no_voted_posts": "This user has no voted posts", - "has_no_blocks": "You have blocked no users.", + "has_no_voted_posts": "Käyttäjä ei ole antanut tykkäyksiä viesteille", + "has_no_blocks": "Käyttäjä ei ole estänyt käyttäjiä", "email_hidden": "Sähköposti piilotettu", "hidden": "piilotettu", "paginate_description": "Paginate topics and posts instead of using infinite scroll", @@ -111,25 +111,25 @@ "notification-sound": "Notification sound", "no-sound": "No sound", "upvote-notif-freq": "Upvote Notification Frequency", - "upvote-notif-freq.all": "All Upvotes", + "upvote-notif-freq.all": "Kaikki tykkäykset", "upvote-notif-freq.first": "First Per Post", "upvote-notif-freq.everyTen": "Every Ten Upvotes", "upvote-notif-freq.threshold": "On 1, 5, 10, 25, 50, 100, 150, 200...", "upvote-notif-freq.logarithmic": "On 10, 100, 1000...", - "upvote-notif-freq.disabled": "Disabled", + "upvote-notif-freq.disabled": "Poistettu käytöstä", "browsing": "Selataan asetuksia", - "open_links_in_new_tab": "Open outgoing links in new tab", + "open_links_in_new_tab": "Avaa palvelunulkopuoliset linkit uuteen ikkunaan", "enable_topic_searching": "Salli aiheen sisäiset haut", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", "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", - "grouptitle": "Group Title", + "grouptitle": "Ryhmän nimi", "group-order-help": "Select a group and use the arrows to order titles", - "no-group-title": "No group title", + "no-group-title": "Ei ryhmän nimeä", "select-skin": "Select a Skin", - "select-homepage": "Select a Homepage", - "homepage": "Homepage", + "select-homepage": "Valitse kotisivu", + "homepage": "Kotisivu", "homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.", "custom_route": "Custom Homepage Route", "custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\", or \"popular\")", @@ -145,13 +145,13 @@ "info.no-ban-history": "This user has never been banned", "info.banned-until": "Banned until %1", "info.banned-permanently": "Banned permanently", - "info.banned-reason-label": "Reason", - "info.banned-no-reason": "No reason given.", + "info.banned-reason-label": "Syy ", + "info.banned-no-reason": "Syytä ei ole annettu", "info.username-history": "Username History", "info.email-history": "Email History", - "info.moderation-note": "Moderation Note", + "info.moderation-note": "Ylläpidon muistiinpano", "info.moderation-note.success": "Moderation note saved", - "info.moderation-note.add": "Add note", + "info.moderation-note.add": "Lisää muistiinpano", "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.", @@ -161,7 +161,7 @@ "consent.digest_off": "Unless explicitly changed in your user settings, this community does not send out email digests", "consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.", "consent.not_received": "You have not provided consent for data collection and processing. At any time this website's administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.", - "consent.give": "Give consent", + "consent.give": "Anna suostumus", "consent.right_of_access": "You have the Right of Access", "consent.right_of_access_description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.", "consent.right_to_rectification": "You have the Right to Rectification", diff --git a/public/language/fi/users.json b/public/language/fi/users.json index 554916ea76..219e91403c 100644 --- a/public/language/fi/users.json +++ b/public/language/fi/users.json @@ -2,21 +2,21 @@ "latest_users": "Viimeisimmät käyttäjät", "top_posters": "Aktiivisimmat viestittelijät", "most_reputation": "Eniten mainetta", - "most_flags": "Most Flags", + "most_flags": "Eniten ", "search": "Hae", "enter_username": "Syötä käyttäjätunnus hakeaksesi", "load_more": "Lataa lisää", "users-found-search-took": "%1 käyttäjä(ä) löytyi! Haku kesti %2 sekuntia.", "filter-by": "Suodata", "online-only": "Vain verkossa olevat", - "invite": "Invite", - "prompt-email": "Emails:", - "invitation-email-sent": "An invitation email has been sent to %1", - "user_list": "User List", - "recent_topics": "Recent Topics", - "popular_topics": "Popular Topics", - "unread_topics": "Unread Topics", - "categories": "Categories", - "tags": "Tunnisteet", - "no-users-found": "No users found!" + "invite": "Kutsu", + "prompt-email": "Sähköpostit:", + "invitation-email-sent": "Kutsusähköposti on lähetetty %1", + "user_list": "Käyttäjälista", + "recent_topics": "Viimeisimmät aiheet", + "popular_topics": "Suositut aiheet", + "unread_topics": "Lukemattomat aiheet", + "categories": "Kategoriat", + "tags": "Tagit", + "no-users-found": "Ei käyttäjiä!" } \ No newline at end of file diff --git a/public/language/fr/admin/manage/digest.json b/public/language/fr/admin/manage/digest.json index 20c8298ee8..6bc11f8524 100644 --- a/public/language/fr/admin/manage/digest.json +++ b/public/language/fr/admin/manage/digest.json @@ -1,13 +1,13 @@ { "lead": "Une liste des statistiques des résumés envoyés est affichée ci-dessous.", - "disclaimer": "Veuillez noter que l'envoi par courrier électronique n'est pas garantie en raison de la nature de la technologie de messagerie. De nombreuses variables déterminent si un courrier électronique envoyé au serveur destinataire arrive dans la boîte de réception de l'utilisateur, y compris la réputation du serveur, les adresses IP figurant sur la liste noire et si DKIM / SPF / DMARC sont configurés.", + "disclaimer": "Veuillez noter que l'envoi par courrier électronique n'est pas garantie en raison de la nature de la technologie de votre messagerie. De nombreuses variables déterminent si un courrier électronique envoyé au serveur destinataire arrive dans la boîte de réception de l'utilisateur, y compris la réputation du serveur, les adresses IP figurant sur la liste noire et si les DKIM / SPF / DMARC sont configurés.", "disclaimer-continued": "Un envoi réussie signifie que le message a été envoyé avec succès par NodeBB et acquitté par le serveur destinataire. Cela ne signifie pas que l'e-mail a atterri dans la boîte de réception. Pour de meilleurs résultats, nous vous recommandons d'utiliser un service de messagerie tiers, tel que SendGrid.", "user": "Utilisateur", "subscription": "Type d'abonnement", "last-delivery": "Dernier envoi réussi", "default": "Valeur par défaut", - "default-help": "La valeur par défaut signifie que l'utilisateur n'a pas explicitement modifié ses paramètre pour les résumés; qui sont : "%1"", + "default-help": "La valeur par défaut signifie que l'utilisateur n'a pas explicitement modifié ses paramètres pour les résumés; qui sont : "%1"", "resend": "Renvoi", "resend-all-confirm": "Êtes-vous sûr de vouloir exécuter manuellement ce résumé?", "resent-single": "Renvoi manuel du Résumé terminé", diff --git a/public/language/fr/admin/manage/users.json b/public/language/fr/admin/manage/users.json index c5b739ea98..5e86e4f4da 100644 --- a/public/language/fr/admin/manage/users.json +++ b/public/language/fr/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Supprimer les utilisateurs", "purge": "Supprimer les utilisateurs ainsi que leurs contenus", "download-csv": "Télécharger au format CSV", + "manage-groups": "Gérer les groupes", + "add-group": "Ajouter un groupe", "invite": "Inviter", "new": "Nouvel utilisateur", diff --git a/public/language/fr/admin/settings/post.json b/public/language/fr/admin/settings/post.json index 0d3b1bf28e..26c8992e2e 100644 --- a/public/language/fr/admin/settings/post.json +++ b/public/language/fr/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Horodatage", "timestamp.cut-off": "Date de coupure (en jours)", "timestamp.cut-off-help": "Les dates et heures seront affichées de façon relative (par exemple \"il y a 3 heures\", \"il y a 5 jours\"), et localisées. Après un certain point, le texte peut afficher la date emlle-même (par exemple 5 Novembre 2016, 15:30).
(Défaut : 30, ou un mois). Régler à 0 pour toujours afficher des dates, laisser vide pour toujours afficher des dates relatives.", + "timestamp.necro-threshold": "Seuil d'archivage (en jours)", + "timestamp.necro-threshold-help": "Un message sera affiché entre les messages si le temps qui les sépare est plus long que le seuil d'archivage. (Par défaut: 7 ou une semaine). Définissez sur 0 pour désactiver.", "teaser": "Message d'aperçu", "teaser.last-post": "Dernier – Affiche le dernier message, ou celui d'origine, si il n'y a pas de réponse", "teaser.last-reply": "Dernier – Affiche le dernier message, ou \"Aucune réponse\" si il n'y a pas de réponse", diff --git a/public/language/fr/error.json b/public/language/fr/error.json index 1ecc0d8331..b4e2b285be 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Valeur de pagination invalide. Celle-ci doit être comprise entre %1 et %2.", "username-taken": "Nom d’utilisateur déjà utilisé", "email-taken": "Email déjà utilisé", - "email-not-confirmed": "Votre adresse email n'est pas confirmée, cliquez ici pour la valider.", + "email-not-confirmed": "Vous ne pouvez pas publier de message tant que votre adresse e-mail n'est pas confirmée. Veuillez cliquer ici pour confirmer votre adresse e-mail.", "email-not-confirmed-chat": "Il ne vous est pas possible d'utiliser le chat tant que votre adresse email n'a pas été vérifiée. Veuillez cliquer ici pour confirmer votre adresse email.", - "email-not-confirmed-email-sent": "Votre adresse email n'a pas encore été confirmée. Merci de vérifier l'email de confirmation dans votre boîte de réception.", + "email-not-confirmed-email-sent": "Votre email n'a pas encore été confirmé, veuillez vérifier votre boîte mail. Vous ne pourrez pas poster ou discuter avant que votre email ne soit confirmé.", "no-email-to-confirm": "Ce forum requiert une vérification de votre adresse email. Veuillez cliquer ici pour entrer une adresse.", "email-confirm-failed": "Votre adresse email n'a pas pu être vérifiée. Veuillez ré-essayer plus tard.", "confirm-email-already-sent": "L'email de confirmation a déjà été envoyé. Veuillez attendre %1 minute(s) avant de redemander un nouvel envoi.", diff --git a/public/language/gl/admin/manage/users.json b/public/language/gl/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/gl/admin/manage/users.json +++ b/public/language/gl/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/gl/admin/settings/post.json b/public/language/gl/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/gl/admin/settings/post.json +++ b/public/language/gl/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/gl/error.json b/public/language/gl/error.json index 96032c4b98..6aa6a01afe 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Valor de paxinación incorreto, ten que estar entre %1 e %2", "username-taken": "Nome de usuario en uso", "email-taken": "Enderezo electrónico en uso", - "email-not-confirmed": "O teu correo aínda non está confirmado, por favor pica aquí para confirmalo.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Non podes charlar ata que confirmes o teu correo, por favor pica aquí para confirmalo.", - "email-not-confirmed-email-sent": "O teu enderezo electrónico está sen confirmar. Por favor, busca o correo de confirmación na túa bandexa de entrada.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "O foro require confirmación de enderezo electrónico, por favor pica aquí para engadir un.", "email-confirm-failed": "Non podemos confirmar o teu enderezo, por favor téntao de novo máis tarde.", "confirm-email-already-sent": "O correo de confirmación foi enviado, agarda %1 minute(s) para enviar outro.", diff --git a/public/language/he/admin/manage/users.json b/public/language/he/admin/manage/users.json index 79246e9a82..d36180454a 100644 --- a/public/language/he/admin/manage/users.json +++ b/public/language/he/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "מחק משתמש(ים)", "purge": "מחק משתמש(ים) ומידע", "download-csv": "טען קובץ משתמשים", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "הזמן", "new": "משתמש חדש", diff --git a/public/language/he/admin/settings/post.json b/public/language/he/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/he/admin/settings/post.json +++ b/public/language/he/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/he/error.json b/public/language/he/error.json index cb7acafb9f..cfcf5cb738 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "ערך דף לא חוקי, חייב להיות לפחות %1 ולא מעל %2", "username-taken": "שם משתמש תפוס", "email-taken": "כתובת אימייל תפוסה", - "email-not-confirmed": "כתובת המייל שלך עוד לא אושרה, לחץ כאן על-מנת לאשר את המייל שלך.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "אין באפשרותך לשוחח עד שהדוא\"ל שלך יאושר, אנא לחץ כאן כדי לאשר את הדוא\"ל שלך.", - "email-not-confirmed-email-sent": "האימייל עדין לא אושר. אנא בדוק בתיבת הדואר בנוגע לאישור האימייל שנשלח לך על ידנו.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "פורום זה דורש אישור בדוא\"ל, אנא לחץ כאן כדי להכניס לדואר אלקטרוני", "email-confirm-failed": "לא הצלחנו לאשר את הדוא\"ל שלך, תנסה שוב אחר כך", "confirm-email-already-sent": "מייל האישור כבר נשלח, אנא המתן %1 דקות כדי לשלוח מייל נוסף.", diff --git a/public/language/he/user.json b/public/language/he/user.json index db3a470983..52877f1892 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -25,8 +25,8 @@ "profile_views": "צפיות בפרופיל", "reputation": "מוניטין", "bookmarks": "מועדפים", - "watched_categories": "Watched categories", - "change_all": "Change All", + "watched_categories": "קטגוריות במעקב", + "change_all": "שנה הכל", "watched": "נצפה", "ignored": "התעלם", "default-category-watch-state": "Default category watch state", diff --git a/public/language/hr/admin/manage/users.json b/public/language/hr/admin/manage/users.json index bc67c12553..9f33e56cf8 100644 --- a/public/language/hr/admin/manage/users.json +++ b/public/language/hr/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Obriši korisnika", "purge": "Obriši korisnike i sadržaj", "download-csv": "Preuzmi CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Pozivnica", "new": "Novi korisnik", diff --git a/public/language/hr/admin/settings/post.json b/public/language/hr/admin/settings/post.json index 2765860883..abe0112c2d 100644 --- a/public/language/hr/admin/settings/post.json +++ b/public/language/hr/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Vremenska oznaka", "timestamp.cut-off": "Datum prekida (u danima)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Zadirkivač objava", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/hr/error.json b/public/language/hr/error.json index 6356bcae52..e32b337e91 100644 --- a/public/language/hr/error.json +++ b/public/language/hr/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Netočno numeriranje stranica, mora biti %1 ili %2", "username-taken": "Korisničko ime je zauzeto", "email-taken": "Email je zauzet", - "email-not-confirmed": "Vaš email još nije potvrđen, kliknite ovdje da bi potvrdili svoj email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Nemožete razgovarati dok Vaš email nije potvrđen, kliknite ovdje da bi potvrdili svoj email.", - "email-not-confirmed-email-sent": "Vaš email još nije potvrđen, provjerite svoj sandučić za potvrdni email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Ovaj forum zahtijeva potvrdu emaila, kliknite ovdje da bi potvrdili svoj email.", "email-confirm-failed": "Nismo u mogućnosti potvrditi Vaš email, pokušajte ponovno kasnije.", "confirm-email-already-sent": "Potvrdni email je poslan, počekajte %1 minuta za ponovni pokušaj.", diff --git a/public/language/hu/admin/manage/users.json b/public/language/hu/admin/manage/users.json index 087932190f..bceecc56e3 100644 --- a/public/language/hu/admin/manage/users.json +++ b/public/language/hu/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Felhasználó(k) törlése", "purge": "Felhasználó(k) és tartalmai(k) törlése", "download-csv": "CSV letöltése", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Meghívás", "new": "Új felhasználó", diff --git a/public/language/hu/admin/settings/post.json b/public/language/hu/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/hu/admin/settings/post.json +++ b/public/language/hu/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/hu/error.json b/public/language/hu/error.json index f973262f3f..a5586791f3 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Foglalt felhasználónév", "email-taken": "Foglalt e-mail", - "email-not-confirmed": "Az e-mail címed még nem lett ellenőrizve, kérlek kattints ide az e-mail címed ellenőrzéséhez!", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Ez a fórum e-mail megerősítést kíván, kérlek kattints ide egy cím beírásához", "email-confirm-failed": "Nem tudtuk ellenőrizni az e-mail címedet, kérlek próbálkozz később.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/id/admin/manage/users.json b/public/language/id/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/id/admin/manage/users.json +++ b/public/language/id/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/id/admin/settings/post.json b/public/language/id/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/id/admin/settings/post.json +++ b/public/language/id/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/id/error.json b/public/language/id/error.json index b22de8f8ea..7f3ebee99a 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Nomor pagination tidak valid, minimal %1 dan maksimal %2", "username-taken": "Username sudah terdaftar", "email-taken": "Email sudah terdaftar", - "email-not-confirmed": "Email kamu belum dikonfirmasi, klik disini untuk mengkonfirmasi email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/it/admin/manage/users.json b/public/language/it/admin/manage/users.json index e9fa6aeea1..cf19a7307c 100644 --- a/public/language/it/admin/manage/users.json +++ b/public/language/it/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Rimuovi Utente(i)", "purge": "Rimuovi Utente(i) e Contenuto", "download-csv": "Scarica CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invito", "new": "Nuovo utente", diff --git a/public/language/it/admin/menu.json b/public/language/it/admin/menu.json index 3da411aca9..57dcdb9e53 100644 --- a/public/language/it/admin/menu.json +++ b/public/language/it/admin/menu.json @@ -18,7 +18,7 @@ "manage/groups": "Gruppi", "manage/ip-blacklist": "Lista degli IP bloccati", "manage/uploads": "Uploads", - "manage/digest": "Digests", + "manage/digest": "Riepilogo", "section-settings": "Impostazioni", "settings/general": "Generale", diff --git a/public/language/it/admin/settings/post.json b/public/language/it/admin/settings/post.json index d7c54d06a3..3e1d873ddf 100644 --- a/public/language/it/admin/settings/post.json +++ b/public/language/it/admin/settings/post.json @@ -1,45 +1,47 @@ { - "sorting": "Post Sorting", - "sorting.post-default": "Default Post Sorting", - "sorting.oldest-to-newest": "Oldest to Newest", - "sorting.newest-to-oldest": "Newest to Oldest", - "sorting.most-votes": "Most Votes", - "sorting.most-posts": "Most Posts", - "sorting.topic-default": "Default Topic Sorting", - "length": "Post Length", - "post-queue": "Post Queue", + "sorting": "Ordinamento Post", + "sorting.post-default": "Ordinamento Post Predefinito", + "sorting.oldest-to-newest": "Dal meno recente al più recente", + "sorting.newest-to-oldest": "Dal più recente al meno recente", + "sorting.most-votes": "Più Voti", + "sorting.most-posts": "Più Post", + "sorting.topic-default": "Ordinamento Discussione Predefinito", + "length": "Lunghezza Post", + "post-queue": "Coda Post", "restrictions": "Restrizioni pubblicazione", - "restrictions-new": "New User Restrictions", + "restrictions-new": "Restrizioni Nuovo Utente", "restrictions.post-queue": "Abilita post in attesa", - "restrictions.post-queue-rep-threshold": "Reputation required to bypass post queue", - "restrictions.groups-exempt-from-post-queue": "Select groups that should be exempt from the post queue", - "restrictions-new.post-queue": "Enable new user restrictions", - "restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval", - "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users", - "restrictions.seconds-between": "Number of seconds between posts", - "restrictions.seconds-between-new": "Seconds between posts for new users", - "restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted", - "restrictions.seconds-before-new": "Seconds before a new user can make their first post", - "restrictions.seconds-edit-after": "Number of seconds a post remains editable (set to 0 to disable)", - "restrictions.seconds-delete-after": "Number of seconds a post remains deletable (set to 0 to disable)", - "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics (set to 0 to disable)", - "restrictions.min-title-length": "Minimum Title Length", - "restrictions.max-title-length": "Maximum Title Length", - "restrictions.min-post-length": "Minimum Post Length", - "restrictions.max-post-length": "Maximum Post Length", + "restrictions.post-queue-rep-threshold": "Reputazione necessaria a superare la coda dei post", + "restrictions.groups-exempt-from-post-queue": "Seleziona i gruppi che dovrebbero essere esclusi dalla coda dei post", + "restrictions-new.post-queue": "Abilita le restrizioni per i nuovi utenti", + "restrictions.post-queue-help": "Abilitando la coda dei post, i post dei nuovi utenti, verranno messi in coda per l'approvazione", + "restrictions-new.post-queue-help": "Abilitando le restrizioni per i nuovi utenti verranno impostate le restrizioni sui post dei nuovi utenti", + "restrictions.seconds-between": "Numero di secondi tra i post", + "restrictions.seconds-between-new": "Numero di secondi tra i post per i nuovi utenti", + "restrictions.rep-threshold": "Soglia di reputazione dopo la quale queste restrizioni vengono rimosse", + "restrictions.seconds-before-new": "Secondi dopo i quali un nuovo utente può creare il suo primo post", + "restrictions.seconds-edit-after": "Numero di secondi per i quali il post rimane modificabile (imposta a 0 per disabilitare)", + "restrictions.seconds-delete-after": "Numero di secondi per i quali il post rimane cancellabile (imposta a 0 per disabilitare)", + "restrictions.replies-no-delete": "Numero di risposte dopo le quali l'utente non può più cancellare le proprie discussioni (imposta a 0 per disabilitare)", + "restrictions.min-title-length": "Lunghezza Minima Titolo", + "restrictions.max-title-length": "Lunghezza Massima Titolo", + "restrictions.min-post-length": "Lunghezza Minima Post", + "restrictions.max-post-length": "Lunghezza Massima Post", "restrictions.days-until-stale": "Days until topic is considered stale", "restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.", "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", - "teaser.first": "First", + "teaser.first": "Primo", "unread": "Unread Settings", "unread.cutoff": "Unread cutoff days", "unread.min-track-last": "Minimum posts in topic before tracking last read", - "recent": "Recent Settings", + "recent": "Impostazioni Recenti", "recent.categoryFilter.disable": "Disable filtering of topics in ignored categories on the /recent page", "signature": "Signature Settings", "signature.disable": "Disable signatures", diff --git a/public/language/it/admin/settings/user.json b/public/language/it/admin/settings/user.json index 1388495e3d..3c72014667 100644 --- a/public/language/it/admin/settings/user.json +++ b/public/language/it/admin/settings/user.json @@ -1,43 +1,43 @@ { "authentication": "Autenticazione", "require-email-confirmation": "Richiesta Email di Conferma", - "email-confirm-interval": "User may not resend a confirmation email until", + "email-confirm-interval": "L'utente non può mandare una nuova email di conferma fino a", "email-confirm-email2": "minuti trascorsi", "allow-login-with": "Consenti l'accesso con", "allow-login-with.username-email": "Username o Email", "allow-login-with.username": "Solo Username", "allow-login-with.email": "Solo Email", "account-settings": "Impostazioni Account", - "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": "Abilita la raccolta di consensi GDPR", + "gdpr_enabled_help": "Quando abilitato, tutti i soggetti in fase di registrazione dovranno dare il consenso esplicito per l'acquisizione e l'uso dei dati secondo la General Data Protection Regulation (GDPR). Nota: Attivando la GDPR gli utenti pre-esistenti non verranno forzati a dare il consenso. Per fare ciò, dovrai installare il plugin GDPR.", "disable-username-changes": "Disabilita il cambio dello username", - "disable-email-changes": "Disabilita il cambio della mail", + "disable-email-changes": "Disabilita il cambio di email", "disable-password-changes": "Disabilita cambio password", "allow-account-deletion": "Abilita cancellazione dell'account", "hide-fullname": "Nascondi nome completo agli utenti", - "hide-email": "Hide email from users", + "hide-email": "Nascondi l'email dagli utenti", "themes": "Temi", - "disable-user-skins": "Prevent users from choosing a custom skin", + "disable-user-skins": "Non permettere agli utenti di scegliere una skin personalizzata", "account-protection": "Protezione Account", "admin-relogin-duration": "Durata di riaccesso dell'amministratore (minuti)", "admin-relogin-duration-help": "Dopo un determinato periodo di tempo l'accesso alla sezione amministratore richiederà un nuovo accesso, impostandolo a 0 si disabilita", "login-attempts": "Tentativi di accesso all'ora", "login-attempts-help": "Se il numero di tentativi di accesso a un account supera questa soglia, l'account sarà bloccato per un periodo di tempo preconfigurato.", - "lockout-duration": "Account Lockout Duration (minutes)", + "lockout-duration": "Account Lockout Duration (minuti)", "login-days": "Giorni per ricordare le sessioni di accesso utente", "password-expiry-days": "Forza il reset della password a un numero di giorni", "session-time": "Tempo di Sessione", "session-time-days": "Giorni", "session-time-seconds": "Secondi", - "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.", + "session-time-help": "Questi valori vengono utilizzati per definire per quanto tempo un utente rimane loggato quando spuntano "Remember Me" al login. Nota che solo uno di questi valori verrà utilizzato. Se non ci sono valori per secondi si passerà ai giorni. Se non ci sono valori per igiorni si passerà al valore di dafault di 14 giorni.", "online-cutoff": "Minuti dopo per cui l'utente è considerato inattivo", - "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", + "online-cutoff-help": "Se l'utente non esegue alcuna azione per questa durata di tempo, vengono considerati inattivi e non ricevono aggiornamenti in tempo reale.", "registration": "Registrazione Utente", "registration-type": "Tipo Registrazione", - "registration-approval-type": "Registration Approval Type", + "registration-approval-type": "Tipo di Approvazione registrazione", "registration-type.normal": "Normale", - "registration-type.admin-approval": "Admin Approval", - "registration-type.admin-approval-ip": "Admin Approval for IPs", + "registration-type.admin-approval": "Approvazione Amministratore", + "registration-type.admin-approval-ip": "Approvazione Amministratore per gli IP", "registration-type.invite-only": "Solo Invito", "registration-type.admin-invite-only": "Solo invito per Amministratori", "registration-type.disabled": "Niente registrazione", @@ -52,26 +52,26 @@ "max-username-length": "Lunghezza Massima Username", "min-password-length": "Lunghezza Minima Password", "min-password-strength": "Lunghezza Minima Password", - "max-about-me-length": "Maximum About Me Length", + "max-about-me-length": "Massima Lunghezza Riguardo a Me", "terms-of-use": "Termini di Utilizzo del Forum (Lasciare vuoto per disabilitare)", "user-search": "Ricerca Utente", "user-search-results-per-page": "Numero di risultati per visualizzazioni", - "default-user-settings": "Default User Settings", - "show-email": "Show email", + "default-user-settings": "Impostazioni Utente Predefinite", + "show-email": "Mostra email ", "show-fullname": "Mostra nome completo", - "restrict-chat": "Only allow chat messages from users I follow", - "outgoing-new-tab": "Open outgoing links in new tab", + "restrict-chat": "Permetti messaggi in chat solo da utenti che seguo", + "outgoing-new-tab": "Apri link esterni in una nuova scheda", "topic-search": "Abilita ricerca nella Discussione", "digest-freq": "Iscriviti al Riepilogo", "digest-freq.off": "Off", - "digest-freq.daily": "Daily", - "digest-freq.weekly": "Weekly", - "digest-freq.monthly": "Monthly", - "email-chat-notifs": "Send an email if a new chat message arrives and I am not online", - "email-post-notif": "Send an email when replies are made to topics I am subscribed to", - "follow-created-topics": "Follow topics you create", - "follow-replied-topics": "Follow topics that you reply to", - "default-notification-settings": "Default notification settings", + "digest-freq.daily": "Quotidiano", + "digest-freq.weekly": "Settimanale", + "digest-freq.monthly": "Mensile", + "email-chat-notifs": "Manda una email se arriva un nuovo messaggio di chat e non sono online", + "email-post-notif": "Manda una email quando ci sono nuove risposte a discussioni a cui sono iscritto", + "follow-created-topics": "Segui le discussioni che tu crei", + "follow-replied-topics": "Segui discussioni a cui rispondi tu", + "default-notification-settings": "Impostazioni di notifica predefinite", "categoryWatchState": "Default category watch state", "categoryWatchState.watching": "Watching", "categoryWatchState.notwatching": "Not Watching", diff --git a/public/language/it/error.json b/public/language/it/error.json index c25377f516..e42e2f7c56 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Valore di impaginazione non valido, deve essere almeno %1 ed al massimo %2", "username-taken": "Nome utente già esistente", "email-taken": "Email già esistente", - "email-not-confirmed": "La tua email non è stata ancora confermata, clicca qui per confermare la tua email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Non puoi chattare finché non confermi la tua email, per favore clicca qui per confermare la tua email.", - "email-not-confirmed-email-sent": "La tua email non è ancora stata confermata, per favore controlla la tua casella di posta per l'email di conferma.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Questo forum richiede una conferma via email, clicca qui per inserire un'email", "email-confirm-failed": "Non abbiamo potuto confermare la tua email, per favore riprovaci più tardi.", "confirm-email-already-sent": "Email di conferma già inviata, per favore attendere %1 minuto(i) per inviarne un'altra.", diff --git a/public/language/it/reset_password.json b/public/language/it/reset_password.json index 8605de5312..29d1925e18 100644 --- a/public/language/it/reset_password.json +++ b/public/language/it/reset_password.json @@ -9,7 +9,7 @@ "repeat_password": "Conferma Password", "enter_email": "Per favore inserisci il tuo indirizzo email e ti invieremo un'email con le istruzioni per resettare il tuo account.", "enter_email_address": "Inserisci l'Indirizzo Email", - "password_reset_sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.", + "password_reset_sent": "Se l'indirizzo specificato corrisponde ad un account utente esistente, è stata inviata un'email di reset della password. Si prega di notare che sarà inviata una sola email al minuto.", "invalid_email": "Email invalida / L'email non esiste!", "password_too_short": "La password inserita è troppo corta, per favore inserisci una password differente.", "passwords_do_not_match": "Le due password che hai inserito non corrispondono.", diff --git a/public/language/it/user.json b/public/language/it/user.json index 36744e50ab..b0238a3858 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -26,7 +26,7 @@ "reputation": "Reputazione", "bookmarks": "Preferiti", "watched_categories": "Categorie seguite", - "change_all": "Change All", + "change_all": "Cambia Tutto", "watched": "Seguiti", "ignored": "Ignorati", "default-category-watch-state": "Stato di controllo della categoria predefinita", diff --git a/public/language/ja/admin/manage/users.json b/public/language/ja/admin/manage/users.json index 2cff7649af..4487a89bcd 100644 --- a/public/language/ja/admin/manage/users.json +++ b/public/language/ja/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "ユーサー(s)を削除します", "purge": "ユーザー(s)とコンテンツを削除する", "download-csv": "CSVでダウンロード", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "招待", "new": "新しいユーザー", diff --git a/public/language/ja/admin/settings/post.json b/public/language/ja/admin/settings/post.json index 3b3405bb84..8bc5143feb 100644 --- a/public/language/ja/admin/settings/post.json +++ b/public/language/ja/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "タイムスタンプ", "timestamp.cut-off": "日付のカットオフ(日数)", "timestamp.cut-off-help": "日付&時間は相対的な方法で表示されます(例:「3時間前」/「5日前」)。そしてさまざまな地域にローカライズされています。\n\\t\\t\\t\\t\\t言語。特定のポイントの後、このテキストは、ローカライズされた日付自体を表示するように切り替えることができます。\n\\t\\t\\t\\t\\t(例:2016年11月5日15:30)
(デフォルト:30 、または1か月)。日付を常に表示するには0に設定し、常に相対時間を表示するには空白のままにします。", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "ティーザーの投稿", "teaser.last-post": "最後–返信がない場合は、元の投稿を含む最新の投稿を表示", "teaser.last-reply": "最後–最新の返信を表示するか、返信がない場合は「返信なし」のプレースホルダを表示する", diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 2ba0d799df..fb0f91517c 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "無効なページネーション値です。%1 から%2の値でなければありません。", "username-taken": "ユーザー名は既に使われています", "email-taken": "メールアドレスは既に使われています", - "email-not-confirmed": "あなたのメールアドレスはまだ確認されていません。メールアドレスを確認するためにはここをクリックしてください。", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "チャットを行うにはメールアドレスの確認を行う必要があります。メールアドレスを確認するためにはここをクリックしてください。", - "email-not-confirmed-email-sent": "あなたのEメールはまだ確認されておりません。お手数ですが、あなたの受信トレイのEメールをチェックしてください。", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "このフォーラムを利用するにはメールアドレスの確認を行う必要があります。メールアドレスを確認するためにはここをクリックしてください。", "email-confirm-failed": "メールアドレスの確認が出来ませんでした。再度お試しください。", "confirm-email-already-sent": "確認のメールは既に送信されています。再度送信するには、%1分後に再度お試しください。", diff --git a/public/language/ko/admin/manage/users.json b/public/language/ko/admin/manage/users.json index 70091cb7e1..7b43960a29 100644 --- a/public/language/ko/admin/manage/users.json +++ b/public/language/ko/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "사용자 삭제", "purge": "사용자와 사용자의 컨텐츠 삭제", "download-csv": "CSV 다운로드", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "초대", "new": "새로운 사용자", diff --git a/public/language/ko/admin/settings/post.json b/public/language/ko/admin/settings/post.json index c355ed93cc..a4daa53c7d 100644 --- a/public/language/ko/admin/settings/post.json +++ b/public/language/ko/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "시간표기", "timestamp.cut-off": "상대시간 표기 기간(일)", "timestamp.cut-off-help": "날짜 및 시간은 상대시간으로 표기 (예: \"3시간 전\" / \"5일 전\"). 표기 기간이 지나면 지역시간으로 변환(예: 2016년 11월 5일 15:30).
(기본값: 30일, 또는 한달). 0으로 지정 시 항상 날짜 표기, 비워둘 시 항상 상대시간 표기.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "미리보기", "teaser.last-post": "최근 글 - 가장 최근 글 보여주기. 답글이 없을 시 게시물 본문 보여주기", "teaser.last-reply": "최근 글 - 가장 최근 글 보여주기. 답글이 없을 시 \"답글 없음\" 표기", diff --git a/public/language/ko/error.json b/public/language/ko/error.json index 18c569175c..cab46daee3 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "올바르지 않은 페이지 값입니다. 최소 1% 에서 최대 2% 사이로 설정해야 합니다.", "username-taken": "이미 사용 중인 사용자명 입니다.", "email-taken": "이미 사용 중인 이메일입니다.", - "email-not-confirmed": "아직 이메일이 인증되지 않았습니다. 여기를 누르면 인증 메일을 발송할 수 있습니다.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "아직 이메일이 인증되지 않았습니다. 대화기능은 인증 후에 사용이 가능합니다.", - "email-not-confirmed-email-sent": "아직 이메일이 인증되지 않았습니다. 메일함을 확인 해주세요.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "이메일 인증이 필요합니다. 이곳을 클릭하여 이메일 입력하세요.", "email-confirm-failed": "이메일 인증이 실패하였습니다. 잠시 후에 다시 시도하세요.", "confirm-email-already-sent": "확인 메일이 이미 발송되었습니다. 다시 보내려면 %1 분을 기다리세요.", diff --git a/public/language/lt/admin/manage/users.json b/public/language/lt/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/lt/admin/manage/users.json +++ b/public/language/lt/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/lt/admin/settings/post.json b/public/language/lt/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/lt/admin/settings/post.json +++ b/public/language/lt/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/lt/error.json b/public/language/lt/error.json index c06af0dd36..6fe7449460 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Bloga puslapių išdėstymo reikšmė. Ji turėtų būti ne mažesnė nei %1 ir ne didesnė nei %2", "username-taken": "Vartotojo vardas jau užimtas", "email-taken": "El. pašto adresas jau užimtas", - "email-not-confirmed": "Jūsų el. paštas nepatvirtintas, prašome paspausti čia norint jį patvirtinti.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Jūs negalite bendrauti, kol jūsų el.paštas nėra patvirtintas, prašome spausti čia kad aktyvuoti jūsų el.paštą", - "email-not-confirmed-email-sent": "Jūsų el. paštas dar nepatvirtintas. Patikrinkite, ar nėra patvirtinimo laiško jūsų pašto dėžutėje.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Šis forumas reikalauja patvirtinimo el. paštu prašome spausti čia el. adreso įrašymui", "email-confirm-failed": "Negalime patvirtinti jūsų el. adreso, prašom bandyti vėliau.", "confirm-email-already-sent": "Patvirtinimo laiškas išsiųstas, prašome palaukti %1 minute(s) kad išsiųstume kita", diff --git a/public/language/lv/admin/manage/users.json b/public/language/lv/admin/manage/users.json index 4e725b9c1e..07fa47d860 100644 --- a/public/language/lv/admin/manage/users.json +++ b/public/language/lv/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Izdzēst lietotāju(-s)", "purge": "Izdzēst lietotāju(-s) un tā(to) saturu", "download-csv": "Lejupielādēt .csv", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Uzaicināt", "new": "Izveidot jaunu lietotāju", diff --git a/public/language/lv/admin/settings/post.json b/public/language/lv/admin/settings/post.json index e7c50ed6d6..1ca23d433c 100644 --- a/public/language/lv/admin/settings/post.json +++ b/public/language/lv/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Datumi", "timestamp.cut-off": "Datuma formāta maiņas punkts (dienās)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Ķircinājuma raksts", "teaser.last-post": "Pēdējo – rādīt jaunāko rakstu, ieskaitot sākotnējo rakstu, ja atbildes nav", "teaser.last-reply": "Pēdējo – rādīt jaunāko atbildi, vai \"Nav atbildes\" tekstu, ja atbildes nav", diff --git a/public/language/lv/error.json b/public/language/lv/error.json index 4f8c3d43c1..7005992b08 100644 --- a/public/language/lv/error.json +++ b/public/language/lv/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Nederīgs vienību skaits, ir jābūt vismaz %1 un ne vairāk kā %2", "username-taken": "Lietotājvārds jau izmantots", "email-taken": "E-pasta adrese jau izmantota", - "email-not-confirmed": "Tava e-pasta adrese vēl nav apstiprināta, lūdzu, noklikšķini, lai apstiprinātu savu e-pasta adresi.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Nevar sarunāties, kamēr Tava e-pasta adrese netiek apstiprināta, lūdzu, noklikšķini, lai apstiprinātu savu e-pasta adresi.", - "email-not-confirmed-email-sent": "Tava e-pasta adrese vēl nav apstiprināta, lūdzu, pārbaudi ienākušos e-pastus apstiprinājuma e-pastam.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Šis forums pieprasa e-pasta apstiprinājumu, lūdzu, noklikšķini, lai ievadītu e-pasta adresi", "email-confirm-failed": "Mēs nevarējām apstiprināt Tavu e-pasta adresi, lūdzu, vēlāk mēģini vēlreiz.", "confirm-email-already-sent": "Apstiprinājuma e-pasts ir jau nosūtīts, lūdzu, uzgaidi %1 minūti(-es), lai nosūtītu vēl vienu.", diff --git a/public/language/ms/admin/manage/users.json b/public/language/ms/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/ms/admin/manage/users.json +++ b/public/language/ms/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/ms/admin/settings/post.json b/public/language/ms/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/ms/admin/settings/post.json +++ b/public/language/ms/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 7b2d8c0049..9b70f5a98d 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Nombor halaman tidak sah, mesti tidak kurang dari %1 dan tidak lebih dari %2", "username-taken": "Nama pengguna telah digunakan", "email-taken": "Emel telah digunakan", - "email-not-confirmed": "Emel anda belum disahkan lagi, sila klik sini untuk mengesahkan emel anda.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Anda tidak dibenarkan sembang sehingga emel disahkan, sila sahkan emel anda.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Forum ini memerlukan pengesahan emel, sila klik sini untuk memasukkan emel", "email-confirm-failed": "Kami tidak dapat memastikan emel anda, sila cuba lagi nanti", "confirm-email-already-sent": "Pengesahan emel telah dihantar, sila tunggu %1 minit() untuk menghantar yang baru.", diff --git a/public/language/nb/admin/manage/users.json b/public/language/nb/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/nb/admin/manage/users.json +++ b/public/language/nb/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/nb/admin/settings/post.json b/public/language/nb/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/nb/admin/settings/post.json +++ b/public/language/nb/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index f53d894e5b..ca39d1c5dd 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Brukernavn opptatt", "email-taken": "E-post opptatt", - "email-not-confirmed": "E-posten din har ikke blitt bekreftet enda, vennligst klikk for å bekrefte din e-post.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Du kan ikke chatte før e-posten din er bekreftet, vennligst klikk her for å bekrefte e-postadressen.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Dette forumet krever e-postbekreftelse, vennligst klikk her for å skrive inn en e-post", "email-confirm-failed": "Vi kunne ikke bekrefte e-posten din, vennligst prøv igjen senere.", "confirm-email-already-sent": "E-post for bekreftelse er allerede sendt, vennligst vent %1 minutt(er) for å sende en til.", diff --git a/public/language/nl/admin/manage/users.json b/public/language/nl/admin/manage/users.json index 75469ef9bb..a77a98775d 100644 --- a/public/language/nl/admin/manage/users.json +++ b/public/language/nl/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Verwijder gebruiker(s)", "purge": "Verwijder gebruiker(s) en inhoud", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Uitnodigen", "new": "Nieuwe gebruiker", diff --git a/public/language/nl/admin/settings/email.json b/public/language/nl/admin/settings/email.json index c5af5f22a2..ac472a4cda 100644 --- a/public/language/nl/admin/settings/email.json +++ b/public/language/nl/admin/settings/email.json @@ -4,9 +4,9 @@ "address-help": "Het volgende e-mailadres refereert aan de e-mail die ontvanger ziet in de \"From\" en \"Reply To\" velden.", "from": "From Naam", "from-help": "De from naam om te tonen in de e-mail.", - "sendmail-rate-limit": "Send X emails...", - "sendmail-rate-delta": "... every X milliseconds", - "sendmail-rate-help": "Instructs the NodeBB mailer to limit the number of messages sent at once in order to not overwhelm email receiving services. These options do not apply if SMTP Transport is enabled (below).", + "sendmail-rate-limit": "Zend X e-mails...", + "sendmail-rate-delta": "... elke X milliseconden", + "sendmail-rate-help": "Instrueert de NodeBB mailer om het aantal berichten dat in een keer wordt verstuurd, om de e-mail ontvangende diensten niet te overbelasten. Deze opties zijn niet van toepassing als het SMTP Transport (hieronder) is ingeschakeld.", "smtp-transport": "SMTP Transport", "smtp-transport.enabled": "Gebruik een externe mail server om mails te verzenden", @@ -33,8 +33,8 @@ "testing.select": "Selecteer E-mail Template", "testing.send": "Verzend Test E-mail", "testing.send-help": "De test mail zal worden verstuurd naar het email adres van de op dit moment ingelogde gebruiker.", - "subscriptions": "Email Digests", - "subscriptions.disable": "Disable email digests", + "subscriptions": "E-mail digests", + "subscriptions.disable": "Schakel e-mail digests uit", "subscriptions.hour": "Uur van Digest", "subscriptions.hour-help": "Voer het nummer in dat het uur representeerd waarop scheduled email digests worden verstuurd (bv. 0 voor middernacht, 17 voor 17:00). Neem er s.v.p. notie van dat dit het uur is van de server self, dit hoeft niet exact overeen te komen met de klok van uw systeem.
De tijd op de server is bij benadering:
De volgende dagelijkse digest staat gepland om " } \ No newline at end of file diff --git a/public/language/nl/admin/settings/general.json b/public/language/nl/admin/settings/general.json index 1977c9678a..e6ddedc452 100644 --- a/public/language/nl/admin/settings/general.json +++ b/public/language/nl/admin/settings/general.json @@ -28,8 +28,8 @@ "touch-icon": "Startscherm / Aanraakpictogram", "touch-icon.upload": "Uploaden", "touch-icon.help": "Aangeraden grootte en formaat: 192x192, alleen PNG formaat. Als er geen touch icoon is gespecificeerd zal NodeBB terugvallen op het favicon.", - "outgoing-links": "Outgoing Links", - "outgoing-links.warning-page": "Use Outgoing Links Warning Page", - "search-default-sort-by": "Search default sort by", - "outgoing-links.whitelist": "Domains to whitelist for bypassing the warning page" + "outgoing-links": "Uitgaande links", + "outgoing-links.warning-page": "Gebruik waarschuwingspagina voor uitgaande links", + "search-default-sort-by": "Standaard sortering voor zoeken", + "outgoing-links.whitelist": "Domeinen op de whitelist voor het omzeilen van de waarschuwingspagina" } \ No newline at end of file diff --git a/public/language/nl/admin/settings/post.json b/public/language/nl/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/nl/admin/settings/post.json +++ b/public/language/nl/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/nl/email.json b/public/language/nl/email.json index 0b515a74e7..fd7afba54e 100644 --- a/public/language/nl/email.json +++ b/public/language/nl/email.json @@ -34,7 +34,7 @@ "notif.chat.cta": "Klik hier om het gesprek te hervatten", "notif.chat.unsub.info": "Deze notificatie is verzonden vanwege de gebruikersinstellingen voor abonnementen.", "notif.post.unsub.info": "Deze notificatie is door ons verzonden vanwege gebruikersinstellingen voor abonnementen en berichten.", - "notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking", + "notif.post.unsub.one-click": "Of om uit te schrijven voor toekomstige e-mails zoals deze: klik", "notif.cta": "Naar het forum", "notif.cta-new-reply": "Bericht weergeven", "notif.cta-new-chat": "Chat weergeven", @@ -42,8 +42,8 @@ "notif.test.long": "Dit is een test van de notificaties e-mail. Stuur hulp!", "test.text1": "Dit is een testbericht om te verifiëren dat NodeBB de e-mailberichtservice correct heeft opgezet.", "unsub.cta": "Klik hier om deze instellingen te wijzigen", - "unsubscribe": "unsubscribe", - "unsub.success": "You will no longer receive emails from the %1 mailing list", + "unsubscribe": "uitschrijven", + "unsub.success": "U zult niet langer e-mails ontvangen van de %1 mailing lijst", "banned.subject": "U bent verbannen van %1", "banned.text1": "De gebruiker %1 is verbannen van %2.", "banned.text2": "Deze verbanning duurt tot %1.", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index d9d55101c1..a20d7e1005 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -26,14 +26,14 @@ "invalid-pagination-value": "Ongeldig paginering waarde. De waarde moet op z'n minst %1 zijn en niet hoger dan %2 zijn.", "username-taken": "Gebruikersnaam is al in gebruik ", "email-taken": "E-mailadres is al in gebruik", - "email-not-confirmed": "Het e-mailadres van dit account is nog niet bevestigd, klik hier om je e-mailadres te bevestigen.", + "email-not-confirmed": "Het plaatsen van berichten is pas toegestaan na validatie van het e-mailadres.", "email-not-confirmed-chat": "Het gebruik van chatfunctionaliteit is pas toegestaan na validatie van het e-mailadres.", - "email-not-confirmed-email-sent": "Je email adres is niet bevestigd, kijk of je de bevestigingsmail hebt ontvangen.", + "email-not-confirmed-email-sent": "Je e-mailadres is nog niet bevestigd, kijk of je de bevestigingsmail hebt ontvangen. Tot je e-mailadres is bevestigd kun je geen berichten plaatsen of aan chats deelnemen.", "no-email-to-confirm": "Dit berichtenforum vereist bevestiging per e-mail, klik hier om een e-mailadres te registreren", "email-confirm-failed": "Helaas kon het e-mailadres niet bevestigd worden, probeer het later nog eens.", "confirm-email-already-sent": "Bevestigingsmail is zojuist al verzonden, wacht alsjeblieft %1 minuut (minuten) voordat je opnieuw een bevestigingsmail aanvraagt.", "sendmail-not-found": "De sendmail executable kon niet worden gevonden, zorg ervoor dat deze is geïnstalleerd en dat de gebruiker die NodeBB draait deze kan uitvoeren.", - "digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests", + "digest-not-enabled": "De gebruiker heeft samenvatting niet aangezet, of de systeem default is niet geconfigureerd om samenvattingen te versturen", "username-too-short": "Gebruikersnaam is te kort", "username-too-long": "Gebruikersnaam is te lang", "password-too-long": "Wachtwoord is te lang", diff --git a/public/language/nl/reset_password.json b/public/language/nl/reset_password.json index 6850e0312e..93229897a9 100644 --- a/public/language/nl/reset_password.json +++ b/public/language/nl/reset_password.json @@ -9,7 +9,7 @@ "repeat_password": "Bevestiging wachtwoord", "enter_email": "Geef het e-mailadres op dat tijdens registratie gebruikt is, en we versturen je een bericht met vervolginstructies voor het ontgrendelen van de account.", "enter_email_address": "Geef het e-mailadres op", - "password_reset_sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.", + "password_reset_sent": "Indien het opgegeven adres overeenkomt met een bestaande gebruikersaccount dan is er nu een wachtwoord reset mail verstuurd. Houd er rekening mee dat er slechts één e-mail per minuut zal worden verstuurd.", "invalid_email": "Onbekend e-mailadres!", "password_too_short": "Het opgegeven wachtwoord bevat te weinig tekens. Kies een veiliger wachtwoord met meer tekens.", "passwords_do_not_match": "De twee opgegeven wachtwoorden komen niet overeen", diff --git a/public/language/pl/admin/manage/users.json b/public/language/pl/admin/manage/users.json index af47612015..7b218170b4 100644 --- a/public/language/pl/admin/manage/users.json +++ b/public/language/pl/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Usuń użytkownika(-ów)", "purge": "Usuń użytkownika(-ów) oraz zawartość", "download-csv": "Pobierz CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Zaproś", "new": "Nowy użytkownik", diff --git a/public/language/pl/admin/settings/post.json b/public/language/pl/admin/settings/post.json index cfc6e70921..fac43cb28d 100644 --- a/public/language/pl/admin/settings/post.json +++ b/public/language/pl/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Znacznik czasowy", "timestamp.cut-off": "Termin odcięcia (w dniach)", "timestamp.cut-off-help": "Daty oraz godziny będą wyświetlane w sposób relatywny (np. \"3 godziny temu\" / \"5 dni temu\"), oraz przetłumaczone na różne\n\t\t\t\t\tjęzyki. Po określonym czasie, ten tekst może zostać zmieniony, aby wyświetlać sformatowane daty.\n\t\t\t\t\t(np. 4 Lut 2017 12:45).
(domyślnie: 30, lub jeden miesiąc). Ustaw 0, aby zawsze wyświetlać daty; pozostaw puste, aby korzystać z tylko z relatywnych opisów.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Zwiastun postu", "teaser.last-post": "Ostatni – Pokaż ostatni post, włączając pierwszy post, w razie braku odpowiedzi", "teaser.last-reply": "Ostatni – Pokaż ostatnią odpowiedź lub komunikat „Brak odpowiedzi” w razie ich braku", diff --git a/public/language/pl/error.json b/public/language/pl/error.json index 6ccac918f7..9dd4e7d239 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Błędna wartość paginacji, zakres od %1 do %2", "username-taken": "Login zajęty", "email-taken": "Email zajęty", - "email-not-confirmed": "Twój email nie został jeszcze potwierdzony. Proszę kliknąć tutaj, by go potwierdzić.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Nie możesz prowadzić rozmów, dopóki twój email nie zostanie potwierdzony. Kliknij tutaj, aby potwierdzić swój email.", - "email-not-confirmed-email-sent": "Twój e-mail jeszcze nie został potwierdzony, proszę sprawdzić swoją skrzynkę odbiorczą.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "To forum wymaga weryfikacji przez email. Proszę kliknąć tutaj, aby wprowadzić adres.", "email-confirm-failed": "Nie byliśmy w stanie potwierdzić Twojego adresu e-mail. Spróbuj później.", "confirm-email-already-sent": "Email potwierdzający został już wysłany, proszę odczekaj jeszcze %1 minut(y), aby wysłać kolejny.", diff --git a/public/language/pt-BR/admin/manage/users.json b/public/language/pt-BR/admin/manage/users.json index eebc97bd2b..c5e4f50fa7 100644 --- a/public/language/pt-BR/admin/manage/users.json +++ b/public/language/pt-BR/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Deletar Usuário(s)", "purge": "Excluir Usuário(s) e Conteúdo", "download-csv": "Baixar CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Convidar", "new": "Novo Usuário", diff --git a/public/language/pt-BR/admin/settings/post.json b/public/language/pt-BR/admin/settings/post.json index 3f038b323f..1d4d1768f4 100644 --- a/public/language/pt-BR/admin/settings/post.json +++ b/public/language/pt-BR/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Data de corte (em dias)", "timestamp.cut-off-help": "Datas & horários serão exibidos de uma forma relativa (por exemplo: \"3 horas atrás\" / \"5 dias atrás\"), e de acordo com os mais diversos\n\t\t\t\t\tidiomas. Após um certo ponto, este texto pode ser trocado para mostrar a própria data local\n\t\t\t\t\t(por exemplo: 5 Nov 2016 15:30).
(Padrão: 30, ou um mês). Defina como 0 para sempre mostrar datas, deixe em branco para sempre mostrar horários relativos.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Post de Propaganda", "teaser.last-post": "Último – Exibir o último post, incluindo o post original, se não houver respostas", "teaser.last-reply": "Último – Exibir a última resposta, ou um marcador \"Sem respostas\" se não houver respostas", diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index c7c0c2a8a1..6638132815 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Valor de paginação inválido, precisa ser no mínimo %1 e no máximo %2", "username-taken": "Nome de usuário já existe", "email-taken": "Email já cadastrado", - "email-not-confirmed": "O seu email ainda não foi confirmado, por favor clique aqui para confirmar seu email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Você não está habilitado a conversar até que seu email seja confirmado, por favor clique aqui para confirmar seu email.", - "email-not-confirmed-email-sent": "O seu e-mail ainda não foi confirmado. Por favor, verifique sua caixa de entrada para o e-mail de confirmação.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Este fórum exige confirmação de email, por gentileza clique aqui para digitar um email", "email-confirm-failed": "Nós não pudemos confirmar seu email, por gentileza tente novamente mais tarde.", "confirm-email-already-sent": "O email de confirmação já foi enviado, por favor aguarde %1 minuto(s) para enviar outro.", diff --git a/public/language/pt-PT/admin/manage/users.json b/public/language/pt-PT/admin/manage/users.json index 950b22d66e..43f92917f6 100644 --- a/public/language/pt-PT/admin/manage/users.json +++ b/public/language/pt-PT/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Eliminar Utilizador(es)", "purge": "Apagar Utilizador(es) e Conteúdo", "download-csv": "Transferir CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Convidar", "new": "Novo Utilizador", diff --git a/public/language/pt-PT/admin/settings/post.json b/public/language/pt-PT/admin/settings/post.json index 2879a99a6f..253d21d847 100644 --- a/public/language/pt-PT/admin/settings/post.json +++ b/public/language/pt-PT/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json index 1f6161f1a8..71e0920bec 100644 --- a/public/language/pt-PT/error.json +++ b/public/language/pt-PT/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Valor de paginação errado, deve ser no mínimo %1 e no máximo %2", "username-taken": "Nome de utilizar já utilizado", "email-taken": "E-mail já utilizado", - "email-not-confirmed": "O teu e-mail ainda não foi confirmado, por favor clica aqui para confirmares o teu e-mail.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Não podes utilizar o chat enquanto não confirmares o teu e-mail, por favor clica aqui para confirmares o teu e-mail.", - "email-not-confirmed-email-sent": "O teu e-mail ainda não foi confirmado, por favor verifica na tua caixa de entrada o e-mail de confirmação.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Este fórum requer confirmação de e-mail, por favor clica aqui para inserires um e-mail", "email-confirm-failed": "Não conseguimos confirmar o teu e-mail, por favor tenta mais tarde.", "confirm-email-already-sent": "O e-mail de confirmação já foi enviado, por favor espera %1 minuto(s) para enviares outro.", diff --git a/public/language/ro/admin/manage/users.json b/public/language/ro/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/ro/admin/manage/users.json +++ b/public/language/ro/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/ro/admin/settings/post.json b/public/language/ro/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/ro/admin/settings/post.json +++ b/public/language/ro/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/ro/error.json b/public/language/ro/error.json index d10046d6cf..2510f6ab43 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Numele de utilizator este deja folosit", "email-taken": "Adresa de email este deja folostă", - "email-not-confirmed": "Adresa ta de email nu a fost inca confirmata, click aici ca sa o confirmi.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Nu vei putea trimite mesaje daca email-ul tau nu e confirmat, click aici sa il confirmi.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Ca sa accesezi forumul trebuie sa iti confirmi email-ul, click aici ca sa intri in mail.", "email-confirm-failed": "Mail-ul tau nu a putut fi confirmat, te rog incearca mai tarziu.", "confirm-email-already-sent": "Email-ul de confirmare ti-a fost trimis, asteapta te rog %1 minut(e) ca sa trimiti inca unul.", diff --git a/public/language/ru/admin/advanced/cache.json b/public/language/ru/admin/advanced/cache.json index b882409255..ddb762a243 100644 --- a/public/language/ru/admin/advanced/cache.json +++ b/public/language/ru/admin/advanced/cache.json @@ -5,7 +5,7 @@ "length-to-max": "Размер / Максимум", "percent-full": "Заполнен на%1%", "post-cache-size": "Размер кэша сообщений", - "items-in-cache": "Элементы в Кэш", + "items-in-cache": "Закешировано элементов", "control-panel": "Панель управления", "update-settings": "Обновить настройки кэша" } \ No newline at end of file diff --git a/public/language/ru/admin/advanced/database.json b/public/language/ru/admin/advanced/database.json index 3056b72870..b570dab82f 100644 --- a/public/language/ru/admin/advanced/database.json +++ b/public/language/ru/admin/advanced/database.json @@ -13,7 +13,7 @@ "mongo.avg-object-size": "Средний размер документа", "mongo.data-size": "Размер данных", "mongo.storage-size": "Размер хранилища", - "mongo.index-size": "Размер Индекса", + "mongo.index-size": "Размер индекса", "mongo.file-size": "Размер файла", "mongo.resident-memory": "Долгосрочная память", "mongo.virtual-memory": "Виртуальная память", @@ -22,7 +22,7 @@ "mongo.bytes-out": "Байт исходящих", "mongo.num-requests": "Количество запросов", "mongo.raw-info": "Сырые данные о MongoDB", - "mongo.unauthorized": "NodeBB не смог создать запрос к базе данных MongoDB соответствующей статистики. Пожалуйста убедитесь, что пользователь, используемый NodeBB имеет "clusterMonitor" привилегию для "admin" базы данных. ", + "mongo.unauthorized": "NodeBB не смог получить статистические данные от MongoDB. Пожалуйста, проверьте, что пользователь, от имени которого NodeBB соединяется с БД имеет привилегию «clusterMonitor» в БД «admin». ", "redis": "Redis", "redis.version": "Версия Redis", @@ -32,11 +32,11 @@ "redis.connected-clients": "Подключенные клиенты", "redis.connected-slaves": "Подключенные устройства", "redis.blocked-clients": "Заблокированные клиенты", - "redis.used-memory": "Используемая Память", + "redis.used-memory": "Использовано памяти", "redis.memory-frag-ratio": "Коэффициент фрагментации памяти", "redis.total-connections-recieved": "Общее число подключений получено", "redis.total-commands-processed": "Команд обработано в общем", - "redis.iops": "Мгновенные операции. в секунду", + "redis.iops": "Операций в секунду", "redis.iinput": "Текущих входящих в секунду", "redis.ioutput": "Текущих исходящих в секунду", "redis.total-input": "Всего входящих", @@ -44,7 +44,7 @@ "redis.keyspace-hits": "Количество ключевых просмотров", "redis.keyspace-misses": "Количество не ключевых просмотров", - "redis.raw-info": "Redis необработанная информация", + "redis.raw-info": "Сырые данные о Redis", "postgres": "Postgres", "postgres.version": "Версия PostgreSQL", diff --git a/public/language/ru/admin/advanced/errors.json b/public/language/ru/admin/advanced/errors.json index 5134a7408a..f4d5688223 100644 --- a/public/language/ru/admin/advanced/errors.json +++ b/public/language/ru/admin/advanced/errors.json @@ -1,11 +1,11 @@ { - "figure-x": "Рисунок %1", + "figure-x": "График %1", "error-events-per-day": "событий %1 в день", "error.404": "404 Не найдено", "error.503": "503 Сервис недоступен", - "manage-error-log": "Управление журналами ошибок", - "export-error-log": "Экспорт логи ошибок (CSV)", - "clear-error-log": "Очистить логи ошибок", + "manage-error-log": "Управление журналом ошибок", + "export-error-log": "Экспорт журнала (CSV)", + "clear-error-log": "Очистить журнал", "route": "Путь", "count": "Кол-во", "no-routes-not-found": "Ура! Ошибок 404 нет!", diff --git a/public/language/ru/admin/advanced/events.json b/public/language/ru/admin/advanced/events.json index 371a0d5fa9..210a45e60c 100644 --- a/public/language/ru/admin/advanced/events.json +++ b/public/language/ru/admin/advanced/events.json @@ -2,10 +2,10 @@ "events": "События", "no-events": "Нет событий", "control-panel": "Панель управления событиями", - "filters": "Filters", - "filters-apply": "Apply Filters", - "filter-type": "Event Type", - "filter-start": "Start Date", - "filter-end": "End Date", - "filter-perPage": "Per Page" + "filters": "Фильтр", + "filters-apply": "Применить фильтр", + "filter-type": "Тип события", + "filter-start": "Дата начала", + "filter-end": "Дата окончания", + "filter-perPage": "Записей на страницу" } \ No newline at end of file diff --git a/public/language/ru/admin/advanced/logs.json b/public/language/ru/admin/advanced/logs.json index 971dec1cf5..74485d3820 100644 --- a/public/language/ru/admin/advanced/logs.json +++ b/public/language/ru/admin/advanced/logs.json @@ -1,7 +1,7 @@ { - "logs": "Логи", - "control-panel": "Логирование контрольной панели", - "reload": "Перезагрузить Логи", - "clear": "Очистить Логи", - "clear-success": "Логи очищены!" + "logs": "Журнал событий", + "control-panel": "Управление журналом событий", + "reload": "Перезагрузить", + "clear": "Очистить", + "clear-success": "Журнал событий очищен!" } \ No newline at end of file diff --git a/public/language/ru/admin/appearance/customise.json b/public/language/ru/admin/appearance/customise.json index ef18fcf2ae..dfb96c7a8d 100644 --- a/public/language/ru/admin/appearance/customise.json +++ b/public/language/ru/admin/appearance/customise.json @@ -1,15 +1,15 @@ { "custom-css": "Пользовательский CSS/LESS", - "custom-css.description": "Введите собственные CSS/LESS здесь, применяемые после всех других стилей.", + "custom-css.description": "Добавьте собственные стили CSS/LESS. Они будут применяться в последнюю очередь, после всех остальных.", "custom-css.enable": "Включить пользовательский CSS/LESS", - "custom-js": "Каcтомный Javascript", - "custom-js.description": "Укажите свой javascript здесь. Он будет выполнен после полной загрузки страницы.", - "custom-js.enable": "Включить пользовательский Javascript", + "custom-js": "Пользовательский JavaScript", + "custom-js.description": "Добавьте собственный JS-код. Он будет выполнен после полной загрузки страницы.", + "custom-js.enable": "Включить пользовательский JavaScript", - "custom-header": "Пользовательский Заголовок", - "custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <head> section of your forum's markup. Script tags are allowed, but are discouraged, as the Custom Javascript tab is available.", - "custom-header.enable": "Включить Пользовательский заголовок", + "custom-header": "Пользовательский заголовок", + "custom-header.description": "Добавьте HTML в секцию <head> шаблонов страниц форума. Тег <script> использовать можно, но не рекомендуется (для этого предусмотрен раздел Пользовательский JavaScript).", + "custom-header.enable": "Включить пользовательский заголовок", "custom-css.livereload": "Включить автоматическую перезагрузку страниц", "custom-css.livereload.description": "Включите эту опцию, чтобы принудительно обновлять все сеансы на каждом устройстве под этой учетной записью при каждом нажатии кнопки Сохранить" diff --git a/public/language/ru/admin/appearance/skins.json b/public/language/ru/admin/appearance/skins.json index abffb8d58c..5058f79b94 100644 --- a/public/language/ru/admin/appearance/skins.json +++ b/public/language/ru/admin/appearance/skins.json @@ -1,5 +1,5 @@ { - "loading": "Загрузка стилей", + "loading": "Загрузка стилей...", "homepage": "Домашняя страница", "select-skin": "Выбрать стиль", "current-skin": "Текущий стиль", diff --git a/public/language/ru/admin/appearance/themes.json b/public/language/ru/admin/appearance/themes.json index c9ff6086a8..08bdac4239 100644 --- a/public/language/ru/admin/appearance/themes.json +++ b/public/language/ru/admin/appearance/themes.json @@ -1,11 +1,11 @@ { - "checking-for-installed": "Проверка установленных тем", + "checking-for-installed": "Проверка установленных тем...", "homepage": "Домашняя страница", "select-theme": "Выбрать тему", "current-theme": "Текущая тема", - "no-themes": "Не найдено установленные темы", - "revert-confirm": "Вы уверены, что хотите восстановить стандартную NodeBB тему?", - "theme-changed": "Тема сменена", - "revert-success": "Вы успешно вернули ваш NodeBB обратно к его стандартной теме.", - "restart-to-activate": "Пожалуйста, перестройте и перезагрузите NodeBB, для полной активации этой темы." + "no-themes": "Не найдено установленных тем", + "revert-confirm": "Вы уверены, что хотите восстановить стандартную тему оформления NodeBB?", + "theme-changed": "Тема оформления изменена", + "revert-success": "Вы успешно вернули стандартную тему оформления NodeBB.", + "restart-to-activate": "Пожалуйста, пересоберите и перезагрузите NodeBB для полной активации этой темы." } \ No newline at end of file diff --git a/public/language/ru/admin/development/info.json b/public/language/ru/admin/development/info.json index b0a0962b8b..a0250a743a 100644 --- a/public/language/ru/admin/development/info.json +++ b/public/language/ru/admin/development/info.json @@ -1,5 +1,5 @@ { - "you-are-on": "Инфо - Вы находитесь на %1:%2", + "you-are-on": "Вы находитесь на %1:%2", "nodes-responded": "Узлов: %1. Время ответа %2мс!", "host": "хост", "pid": "pid", @@ -8,12 +8,12 @@ "git": "git", "memory": "память", "load": "системная загрузка", - "cpu-usage": "Использование процессора", - "uptime": "время работы", + "cpu-usage": "загрузка процессора", + "uptime": "продолжительность работы", - "registered": "Зарегистрированных", + "registered": "Авторизованных", "sockets": "Сокеты", "guests": "Гостей", - "info": "Инфо" + "info": "Сырые данные" } \ No newline at end of file diff --git a/public/language/ru/admin/development/logger.json b/public/language/ru/admin/development/logger.json index 5fceb15935..420b27b720 100644 --- a/public/language/ru/admin/development/logger.json +++ b/public/language/ru/admin/development/logger.json @@ -1,12 +1,12 @@ { - "logger-settings": "Настройки логгера", - "description": "Включив чек-боксы, вы получите логи на свой терминал. Если вы укажете путь, логи будут сохранены в файле. Протокол HTTP полезен для сбора статистики о том, кто, когда и где посетители получают на вашем форуме. Помимо регистрации HTTP-запросов, мы также можем регистрировать события socket.io. Регистрация Socket.io в сочетании с монитором redis-cli может быть очень полезна для исследования внутреннего состояния NodeBB.", - "explanation": "Просто установить/снять настройки логирования чтобы включить или отключить логирование на лету. Перезапуск не нужен.", - "enable-http": "Включить HTTP логирование", - "enable-socket": "Включить логирование событий socket.io", - "file-path": "Путь до файла логов", - "file-path-placeholder": "/path/to/log/file.log ::: оставить пустым чтобы смотреть логи в командной строке", + "logger-settings": "Настройки журналирования", + "description": "Включите, чтобы выводить в консоль отчёт о событиях. Чтобы сохранять эти данные в файл, укажите путь к файлу. Журналирование запросов HTTP полезно для сбора данных о том, что именно и когда просматривают посетители вашего форума. Кроме того, возможна запись событий Socket.io, что, в сочетании с мониторингом redis-cli, крайне полезно для отслеживания состояния NodeBB.", + "explanation": "Просто включите или выключите соответствующую опцию, чтобы настроить журналирование. Перезапуск NodeBB не потребуется.", + "enable-http": "Отслеживать HTTP-запросы", + "enable-socket": "Отслеживать события Socket.io", + "file-path": "Путь к файлу журнала", + "file-path-placeholder": "/path/to/log/file.log ::: оставьте пустым для вывода сообщений в консоль", - "control-panel": "Контрольная панель логгера", - "update-settings": "Применить настройки логгера" + "control-panel": "Панель управления", + "update-settings": "Обновить настройки" } \ No newline at end of file diff --git a/public/language/ru/admin/extend/plugins.json b/public/language/ru/admin/extend/plugins.json index ed12af6798..a497727e3f 100644 --- a/public/language/ru/admin/extend/plugins.json +++ b/public/language/ru/admin/extend/plugins.json @@ -1,26 +1,26 @@ { - "installed": "Установленные", - "active": "Активные", - "inactive": "Неактивные", - "out-of-date": "Устаревшие", + "installed": "Установлены", + "active": "Включены", + "inactive": "Отключены", + "out-of-date": "Устарели", "none-found": "Плагины не найдены.", "none-active": "Нет активных плагинов", "find-plugins": "Найти плагины", "plugin-search": "Поиск плагинов", "plugin-search-placeholder": "Искать плагин...", - "submit-anonymous-usage": "Submit anonymous plugin usage data.", - "reorder-plugins": "Изменить порядок плагинов", - "order-active": "Упорядочить активные плагины", - "dev-interested": "Заинтересованы в написании плагинов для NodeBB?", - "docs-info": "Полную документацию, относящаяся к созданию плагина, можно найти на Портале NodeBB", + "submit-anonymous-usage": "Отправлять анонимные сведения об используемых плагинах.", + "reorder-plugins": "Порядок загрузки плагинов", + "order-active": "Изменить", + "dev-interested": "Хотите создать свой плагин для NodeBB?", + "docs-info": "Полная документация по разработке для NodeBB опубликована на Портале NodeBB", - "order.description": "Некоторые плагины работают идеально только когда они инициализируются до иди после других плагинов.", - "order.explanation": "Плагины загружаются в порядке указанном здесь, сверху вниз.", + "order.description": "Некоторые плагины работают идеально только когда они инициализируются в определённом порядке, или до, или после других плагинов.", + "order.explanation": "Плагины загружаются в указанном порядке, сверху вниз.", "plugin-item.themes": "Темы", - "plugin-item.deactivate": "Деактивировать", - "plugin-item.activate": "Активировать", + "plugin-item.deactivate": "Отключить", + "plugin-item.activate": "Включить", "plugin-item.install": "Установить", "plugin-item.uninstall": "Удалить", "plugin-item.settings": "Настройки", @@ -30,27 +30,27 @@ "plugin-item.more-info": "Дополнительная информация:", "plugin-item.unknown": "Неизвестно", "plugin-item.unknown-explanation": "Состояние плагина не удается определить, возможно это проблема с настройками.", - "plugin-item.compatible": "This plugin works on NodeBB %1", - "plugin-item.not-compatible": "This plugin has no compatibility data, make sure it works before installing on your production environment.", + "plugin-item.compatible": "Этот плагин совместим с NodeBB %1", + "plugin-item.not-compatible": "Для этого плагина нет данных о совместимости. Проверьте, что он корректно работает, прежде чем использовать его.", "alert.enabled": "Плагин включен", "alert.disabled": "Плагин выключен", "alert.upgraded": "Плагин обновлен", "alert.installed": "Плагин установлен", - "alert.uninstalled": "Плагин удален", + "alert.uninstalled": "Плагин удалён", "alert.activate-success": "Пожалуйста, перезапустите NodeBB чтобы полностью активировать этот плагин", "alert.deactivate-success": "Плагин успешно отключен", "alert.upgrade-success": "Пожалуйста, пересоберите и перезапустите NodeBB чтобы полностью активировать этот плагин", - "alert.install-success": "Плагин успешно установлен, пожалуйста активируйте этот плагин.", - "alert.uninstall-success": "Плагин успешно отключен и удален.", + "alert.install-success": "Плагин успешно установлен. Пожалуйста, активируйте его.", + "alert.uninstall-success": "Плагин успешно отключен и удалён.", "alert.suggest-error": "

NodeBB не может запустить менеджер пакетов, продолжить установку последней версии?

Ответ сервера (%1): %2
", - "alert.package-manager-unreachable": "

NodeBB не может запустить менеджер пакетов, установка обновления не рекоммендуется

", - "alert.incompatible": "

Ваша версия NodeBB (v%1) не совместима в версией v%2 этого плагина. Пожалуйста, обновите ваш NodeBB если вы хотите установить обновление этого плагина

", - "alert.possibly-incompatible": "

Информации о совместимости не найдено

Данный плагин не содержит информации о совместимости с вашей версией NodeBB. Полная совместимость не гарантируется, возможно форум даже не запустится.

В случае, если NodeBB не запускается:

$ ./nodebb reset plugin=\"%1\"

Продолжить установку последней версии плагина?

", - "alert.reorder": "Порядок плагинов изменен", + "alert.package-manager-unreachable": "

NodeBB не может запустить менеджер пакетов, установка обновления не рекомендуется

", + "alert.incompatible": "

Ваша версия NodeBB (v%1) совместима только с версией v%2 этого плагина. Пожалуйста, обновите NodeBB, если вы хотите пользоваться более свежей версией.

", + "alert.possibly-incompatible": "

Нет данных о совместимости

Этот плагин не содержит сведений о совместимости с вашей версией NodeBB. Полная совместимость не гарантируется, возможно форум даже не запустится.

В случае, если NodeBB не запускается:

$ ./nodebb reset plugin=\"%1\"

Продолжить установку последней версии плагина?

", + "alert.reorder": "Порядок плагинов изменён", "alert.reorder-success": "Пожалуйста, пересоберите и перезапустите NodeBB чтобы полностью завершить процесс.", - "license.title": "Лицензионная информация плагина", + "license.title": "Сведения о лицензии плагина", "license.intro": "Плагин %1 распространяется под лицензией %2. Пожалуйста, внимательно прочтите условия лицензии перед активацией плагина.", "license.cta": "Вы хотите продолжить и активировать плагин?" } diff --git a/public/language/ru/admin/extend/rewards.json b/public/language/ru/admin/extend/rewards.json index fcacebde2e..616afc7178 100644 --- a/public/language/ru/admin/extend/rewards.json +++ b/public/language/ru/admin/extend/rewards.json @@ -1,17 +1,17 @@ { "rewards": "Награды", - "condition-if-users": "Если участник", - "condition-is": "Есть", + "condition-if-users": "Если у пользователя", + "condition-is": "Соответствует", "condition-then": "Тогда", - "max-claims": "Количество наград для участников", - "zero-infinite": "Введите 0 для бесконечного количества", + "max-claims": "Сколько раз можно наградить", + "zero-infinite": "Введите 0, если не ограничено", "delete": "Удалить", "enable": "Включить", "disable": "Выключить", "control-panel": "Управление наградами", "new-reward": "Новая награда", - "alert.delete-success": "Награды успешно удалены", - "alert.no-inputs-found": "Не правильная награда", + "alert.delete-success": "Награда успешно удалена", + "alert.no-inputs-found": "Некорректная награда!", "alert.save-success": "Награды успешно сохранены" } \ No newline at end of file diff --git a/public/language/ru/admin/extend/widgets.json b/public/language/ru/admin/extend/widgets.json index 12ff23a91f..7e3ef9e9b9 100644 --- a/public/language/ru/admin/extend/widgets.json +++ b/public/language/ru/admin/extend/widgets.json @@ -1,30 +1,30 @@ { "available": "Доступные виджеты", - "explanation": "Выберете виджет из выпадающего меню и затем перетащите его на виджет шаблона слева.", - "none-installed": "Виджеты не найдены! Активируйте основной плагин виджетов в панели управления плагинов", - "clone-from": "Скопировать виджет из", + "explanation": "Выберите виджет из выпадающего меню и перетащите его в подходящую область слева.", + "none-installed": "Виджеты не найдены! Активируйте основной плагин виджетов в панели управления плагинами", + "clone-from": "Скопировать виджеты из", "containers.available": "Доступные контейнеры", - "containers.explanation": "Перетащите вверх любого активного виджета", - "containers.none": "Нет", - "container.well": "Хорошо", - "container.jumbotron": "Медиа-панель", + "containers.explanation": "Перетащите поверх любого активного виджета", + "containers.none": "Отсутствует", + "container.well": "Well", + "container.jumbotron": "Jumbotron", "container.panel": "Панель", - "container.panel-header": "Заголовок понели", + "container.panel-header": "Заголовок панели", "container.panel-body": "Тело панели", - "container.alert": "Предупреждение", + "container.alert": "Уведомление", - "alert.confirm-delete": "Вы уверены что хотите удалить этот виджет?", + "alert.confirm-delete": "Вы уверены, что хотите удалить этот виджет?", "alert.updated": "Виджеты обновлены", "alert.update-success": "Виджеты успешно обновлены", "alert.clone-success": "Виджеты успешно скопированы", - "error.select-clone": "Пожалуйста, выберите страницу с которой копировать виджеты", + "error.select-clone": "Пожалуйста, выберите страницу, откуда нужно скопировать виджеты", - "title": "Title", - "title.placeholder": "Title (only shown on some containers)", - "container": "Container", - "container.placeholder": "Drag and drop a container or enter HTML here.", - "show-to-groups": "Show to groups", - "hide-from-groups": "Hide from groups", - "hide-on-mobile": "Hide on mobile" + "title": "Заголовок", + "title.placeholder": "Заголовок (используется только в некоторых контейнерах)", + "container": "Контейнер", + "container.placeholder": "Перетащите контейнер сюда или добавьте HTML вручную.", + "show-to-groups": "Показывать группам", + "hide-from-groups": "Скрывать от групп", + "hide-on-mobile": "Скрывать на мобильных устройствах" } \ No newline at end of file diff --git a/public/language/ru/admin/general/dashboard.json b/public/language/ru/admin/general/dashboard.json index e778e1a5d0..77ccd68c98 100644 --- a/public/language/ru/admin/general/dashboard.json +++ b/public/language/ru/admin/general/dashboard.json @@ -2,78 +2,78 @@ "forum-traffic": "Трафик ", "page-views": "Просмотров", "unique-visitors": "Посетителей", - "new-users": "New Users", - "posts": "Записи", - "topics": "Темы", - "page-views-seven": "Последние 7 дней", - "page-views-thirty": "Последние 30 дней", - "page-views-last-day": "Последние 24 часа", - "page-views-custom": "Свой диапазон дат", - "page-views-custom-start": "Начала диапазона", - "page-views-custom-end": "Конец диапазона", - "page-views-custom-help": "Введите диапазон дат, за который вы хотите увидеть количество просмотров. Если выбор даты не доступен, то принимает можете указать дату в формате ГГГГ-ММ-ДД ", + "new-users": "Новых пользователей", + "posts": "Сообщений", + "topics": "Тем", + "page-views-seven": "За 7 дней", + "page-views-thirty": "За 30 дней", + "page-views-last-day": "За 24 часа", + "page-views-custom": "Другой диапазон дат", + "page-views-custom-start": "Начало", + "page-views-custom-end": "Конец", + "page-views-custom-help": "Укажите начало и конец периода, за который вы хотите получить данные о просмотрах. Если выбор даты не доступен, то вы можете указать дату в формате ГГГГ-ММ-ДД ", "page-views-custom-error": "Пожалуйста, укажите правильный диапазон дат в формате ГГГГ-ММ-ДД", - "stats.yesterday": "Yesterday", - "stats.today": "Today", - "stats.last-week": "Last Week", - "stats.this-week": "This Week", - "stats.last-month": "Last Month", - "stats.this-month": "This Month", - "stats.all": "Всё время", + "stats.yesterday": "Вчера", + "stats.today": "Сегодня", + "stats.last-week": "За прошл. неделю", + "stats.this-week": "За эту неделю", + "stats.last-month": "За прошл. месяц", + "stats.this-month": "За этот месяц", + "stats.all": "За всё время", "updates": "Обновления", - "running-version": "У вас установлен NodeBB версии %1", - "keep-updated": "Всегда проверяйте, что ваш NodeBB обновлен и содержит последнии патчи безопасности и исправления.", - "up-to-date": "

Вы обновились

", - "upgrade-available": "

Вышла новая версия (v%1). Рассмотрите обновление вашего NodeBB

", - "prerelease-upgrade-available": "

Данная версия является предрелизной и уже устарела. Вышла новая версия (v%1). Рассмотрите обновление вашего NodeBB.

", - "prerelease-warning": "

Данная версия NodeBB является предрелизной. Возможно вы столкнетесь со случайными багами.

", - "running-in-development": "Форум работает в режиме для разработчиков. Это может привести к уязвимостям; пожалуйста, свяжитесь с вашим сисадмином.", + "running-version": "Вы используете NodeBB версии %1", + "keep-updated": "Пожалуйста, следите за тем, чтобы NodeBB своевременно обновлялся и получал все необходимые исправления ошибок и уязвимостей.", + "up-to-date": "

Вы используете актуальную версию

", + "upgrade-available": "

Вышла новая версия NodeBB (v%1). Хотите установить обновление?

", + "prerelease-upgrade-available": "

Вы используете устаревшую предрелизную версию NodeBB. Вышла новая (v%1). Хотите установить обновление?

", + "prerelease-warning": "

Вы используете предрелизную версию NodeBB. Вы можете столкнуться с разнообразными ошибками в её работе.

", + "running-in-development": "Форум работает в режиме для разработчиков. Это значит, что он может быть более уязвим для внешних угроз; пожалуйста, свяжитесь с вашим сисадмином.", "latest-lookup-failed": "

Не удалось проверить наличие обновлений NodeBB

", - "notices": "Уведомления", - "restart-not-required": "Перезапуск не необходим", - "restart-required": "Перезапуск необходим", - "search-plugin-installed": "Поисковой плагин установлен", - "search-plugin-not-installed": "Поисковой плагин не установлен", - "search-plugin-tooltip": "Установите поисковый плагин на странице плагинов чтобы включить функцию поиска", + "notices": "Примечания", + "restart-not-required": "Перезапуск не требуется", + "restart-required": "Требуется перезапуск", + "search-plugin-installed": "Плагин поиска установлен", + "search-plugin-not-installed": "Плагин поиска не установлен", + "search-plugin-tooltip": "Чтобы включить функцию поиска, установите соответствующий плагин на странице управления плагинами", - "control-panel": "Управление", + "control-panel": "Управление системой", "rebuild-and-restart": "Пересобрать и Перезапустить", "restart": "Перезапустить", - "restart-warning": "Пересборка и Перезапуск вашего NodeBB оборвет все имеющиеся соединения на несколько секунд.", - "restart-disabled": "Пересборка и Перезапуск вашего NodeBB была отключена, т.к. похоже, что вы запустили форум без использования соответствующего демона.", - "maintenance-mode": "Режим тех обслуживания", - "maintenance-mode-title": "Нажмите, чтобы включить режим тех обслуживания", + "restart-warning": "Пересборка или перезапуск вашего NodeBB на несколько секунд оборвёт все имеющиеся соединения.", + "restart-disabled": "Пересборка и перезапуск вашего NodeBB была отключена, поскольку вы запустили форум без использования соответствующего демона.", + "maintenance-mode": "Режим техобслуживания", + "maintenance-mode-title": "Нажмите, чтобы включить и настроить режим техобслуживания", "realtime-chart-updates": "Обновление графиков в реальном времени", - "active-users": "Активных пользователей", - "active-users.users": "Пользователей", + "active-users": "Активных посетителей", + "active-users.users": "Польз.", "active-users.guests": "Гостей", "active-users.total": "Всего", "active-users.connections": "Соединений", - "anonymous-registered-users": "Анонимных и Зарегистированных", - "anonymous": "Анонимных", - "registered": "Зарегистрированных", + "anonymous-registered-users": "Анонимные / Авторизованные", + "anonymous": "Анонимные", + "registered": "Авторизованные", - "user-presence": "Присутствующих пользователей", - "on-categories": "В списках тем", + "user-presence": "Присутствие", + "on-categories": "В списке категорий", "reading-posts": "Читают сообщения", "browsing-topics": "Просматривают темы", - "recent": "Новые", - "unread": "Непрочитанные", + "recent": "Просм. последние темы", + "unread": "Просм. непрочитанные", "high-presence-topics": "Популярные темы", - "graphs.page-views": "Просмотров", - "graphs.page-views-registered": "Зарегистрировано просмотров", - "graphs.page-views-guest": "Просмотров гостей", - "graphs.page-views-bot": "Просмотров ботов", - "graphs.unique-visitors": "Уникальных пользователей", - "graphs.registered-users": "Зарегистрированных пользователей", + "graphs.page-views": "Просмотры", + "graphs.page-views-registered": "Просм. авторизованными", + "graphs.page-views-guest": "Просмотров гостями", + "graphs.page-views-bot": "Просмотров ботами", + "graphs.unique-visitors": "Уникальных посетителей", + "graphs.registered-users": "Авторизованных пользователей", "graphs.anonymous-users": "Анонимных пользователей", "last-restarted-by": "Последний перезапуск:", - "no-users-browsing": "Участников нет" + "no-users-browsing": "Просмотров нет" } diff --git a/public/language/ru/admin/general/homepage.json b/public/language/ru/admin/general/homepage.json index 494c564c6a..2b6c14fe4d 100644 --- a/public/language/ru/admin/general/homepage.json +++ b/public/language/ru/admin/general/homepage.json @@ -1,8 +1,8 @@ { - "home-page": "Домашняя страница", - "description": "Выюбрать какую страницу показывать когда пользователи доходят до верхнего URL форума.", - "home-page-route": "Переход на домашнюю страницу", - "custom-route": "Настраиваемый переход", - "allow-user-home-pages": "Разрешить пользовательские домашние страницы", - "home-page-title": "Название домашней страницы (по умолчанию \"Домашняя\")" + "home-page": "Главная страница", + "description": "Выберите, какую страницу показывать по корневому URL форума.", + "home-page-route": "Маршрут для главной страницы", + "custom-route": "Другой маршрут", + "allow-user-home-pages": "Разрешить пользователям выбирать персональные главные страницы", + "home-page-title": "Заголовок домашней страницы («Главная» по умолчанию)" } \ No newline at end of file diff --git a/public/language/ru/admin/general/languages.json b/public/language/ru/admin/general/languages.json index 641d366241..f7a6b365f9 100644 --- a/public/language/ru/admin/general/languages.json +++ b/public/language/ru/admin/general/languages.json @@ -1,6 +1,6 @@ { "language-settings": "Языковые настройки", - "description": "Язык по умолчанию определяет языковые настройки для все посетителей форума.
Отдельные пользователи могут переопределить язык по умолчанию на странице настроек их аккаунта.", + "description": "Язык по умолчанию определяет языковые настройки для всех посетителей форума.
Зарегистрированные пользователи могут выбрать другой язык в настройках своего профиля.", "default-language": "Язык по умолчанию", - "auto-detect": "Настройки автоопределения языка для Гостей" + "auto-detect": "Автоматически определять язык для гостей" } \ No newline at end of file diff --git a/public/language/ru/admin/general/navigation.json b/public/language/ru/admin/general/navigation.json index 2fee361bf4..4bcef87827 100644 --- a/public/language/ru/admin/general/navigation.json +++ b/public/language/ru/admin/general/navigation.json @@ -1,12 +1,12 @@ { "icon": "Иконка:", "change-icon": "изменить", - "route": "Роут:", + "route": "Маршрут:", "tooltip": "Подсказка:", "text": "Текст:", - "text-class": "Класс текста: опциоально", + "text-class": "Класс текста: опционально", "class": "Класс: опционально", - "id": "ID: опциоанально", + "id": "ID: опционально", "properties": "Свойства:", "groups": "Группы:", @@ -17,7 +17,7 @@ "btn.enable": "Включить", "available-menu-items": "Доступные пункты меню", - "custom-route": "Настроить роут", + "custom-route": "Произвольный маршрут", "core": "ядро", "plugin": "плагин" } \ No newline at end of file diff --git a/public/language/ru/admin/general/social.json b/public/language/ru/admin/general/social.json index 706bd3cf95..7a4239e955 100644 --- a/public/language/ru/admin/general/social.json +++ b/public/language/ru/admin/general/social.json @@ -1,5 +1,5 @@ { - "post-sharing": "Поделиться постом", - "info-plugins-additional": "Плагины могут добавить дополнительные сети чтобы делиться постами", - "save-success": "Успешно сохранены сети чтобы делиться постами!" + "post-sharing": "Делиться сообщениями в", + "info-plugins-additional": "Плагины могут добавить дополнительные опции для функции «поделиться сообщением»", + "save-success": "Настройки функции «поделиться сообщением» сохранены!" } \ No newline at end of file diff --git a/public/language/ru/admin/general/sounds.json b/public/language/ru/admin/general/sounds.json index aeb35e856b..f84b71d629 100644 --- a/public/language/ru/admin/general/sounds.json +++ b/public/language/ru/admin/general/sounds.json @@ -1,9 +1,9 @@ { "notifications": "Уведомления", - "chat-messages": "Сообщения", + "chat-messages": "Сообщения чата", "play-sound": "Воспроизвести", "incoming-message": "Входящие сообщения", "outgoing-message": "Исходящие сообщения", - "upload-new-sound": "Загрузить новую мелодию", + "upload-new-sound": "Загрузить новый звук", "saved": "Настройки сохранены" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/admins-mods.json b/public/language/ru/admin/manage/admins-mods.json index a51865bea9..a3fc963deb 100644 --- a/public/language/ru/admin/manage/admins-mods.json +++ b/public/language/ru/admin/manage/admins-mods.json @@ -1,10 +1,10 @@ { "administrators": "Администраторы", - "global-moderators": "Глобальные Модераторы", - "no-global-moderators": "Нет Глобальных Модераторов", - "moderators-of-category": "%1 Модераторов", - "no-moderators": "Нет Модераторов", - "add-administrator": "Добавить Администратора", - "add-global-moderator": "Добавить Глобального Администратора", - "add-moderator": "Добавить Модератора" + "global-moderators": "Глобальные модераторы", + "no-global-moderators": "Нет глобальных модераторов", + "moderators-of-category": "Модераторы категории «%1»", + "no-moderators": "Нет модераторов", + "add-administrator": "Добавить администратора", + "add-global-moderator": "Добавить глобального модератора", + "add-moderator": "Добавить модератора" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/categories.json b/public/language/ru/admin/manage/categories.json index 29541e536d..6715885107 100644 --- a/public/language/ru/admin/manage/categories.json +++ b/public/language/ru/admin/manage/categories.json @@ -1,6 +1,6 @@ { "settings": "Настройки категории", - "privileges": "Привилегии", + "privileges": "Права доступа", "name": "Название категории", "description": "Описание категории", @@ -15,67 +15,67 @@ "delete-image": "Удалить", "category-image": "Изображение категории", "parent-category": "Родительская категория", - "optional-parent-category": "(не обязательно) Родительская категория\n", - "parent-category-none": "(Пусто)", - "copy-parent": "Скопировать Родительский", + "optional-parent-category": "(Не обязательно) Родительская категория\n", + "parent-category-none": "(Не указана)", + "copy-parent": "Скопировать из родительской", "copy-settings": "Копировать настройки из", - "optional-clone-settings": "(не обязательно) Копировать настройки из", - "clone-children": "Дублировать вложенные категориии настройки", + "optional-clone-settings": "(Не обязательно) Копировать настройки из", + "clone-children": "Скопировать вложенные категории и их настройки", "purge": "Очистить категорию", "enable": "Включить", - "disable": "Выключить", + "disable": "Отключить", "edit": "Редактировать", "select-category": "Указать категорию", "set-parent-category": "Указать родительскую категорию", - "privileges.description": "В этой секции вы можете настроить права на управление доступом. Права могут быть предоставлены как на пользователя, так и на группу. Выберите применяемый домен с помощью формы поиска ниже.", - "privileges.category-selector": "Настройка привилегий для", - "privileges.warning": "Замечание: Настройки прав применяются немедленно. Нет необходимости сохранять категорию после изменения настроек.", + "privileges.description": "Здесь вы можете настроить права доступа к разделам форума. Права могут предоставляться как отдельному пользователю, так и группе. Выберите область действия прав доступа в списке ниже.", + "privileges.category-selector": "Настройка прав доступа для", + "privileges.warning": "Примечание: Настройки прав доступа применяются сразу же, как вы их выбираете. Сохранять настройки категории для этого не нужно.", "privileges.section-viewing": "Права на просмотр", - "privileges.section-posting": "Права на создание поста", + "privileges.section-posting": "Права на публикацию", "privileges.section-moderation": "Права модераторов", "privileges.section-other": "Другое", "privileges.section-user": "Пользователь", "privileges.search-user": "Добавить пользователя", "privileges.no-users": "В этой категории нет специально заданных прав пользователя.", "privileges.section-group": "Группа", - "privileges.group-private": "Это частная группа", + "privileges.group-private": "Это закрытая группа", "privileges.search-group": "Добавить группу", - "privileges.copy-to-children": "Скопировать в дочерний", + "privileges.copy-to-children": "Скопировать в дочерние", "privileges.copy-from-category": "Скопировать из категории", - "privileges.copy-privileges-to-all-categories": "Copy to All Categories", - "privileges.copy-group-privileges-to-children": "Copy this group's privileges to the children of this category.", - "privileges.copy-group-privileges-to-all-categories": "Copy this group's privileges to all categories.", - "privileges.copy-group-privileges-from": "Copy this group's privileges from another category.", - "privileges.inherit": "Если группа зарегистрированных пользователей получает дополнительные права, то все другие группы (¿какие другие группы? подгруппы?¿) получают эти права неявным образом, даже если они специально не заданы. Эти неявным образом заданные права показаны вам потому что все пользователи (¿и даже незарегистрированные?¿) являются частью группы зарегистрированных пользователей, так что права для дополнительных групп не обязаны задаваться явным образом.", - "privileges.copy-success": "Privileges copied!", + "privileges.copy-privileges-to-all-categories": "Скопировать во все категории", + "privileges.copy-group-privileges-to-children": "Скопировать настройки доступа группы и применить ко всем дочерним подкатегориям.", + "privileges.copy-group-privileges-to-all-categories": "Скопировать настройки доступа группы и применить ко всем категориям.", + "privileges.copy-group-privileges-from": "Скопировать настройки доступа группы из другой категории.", + "privileges.inherit": "Если стандартная группа зарегистрированные пользователи получает определённые права, то все остальные группы также получают аналогичные права неявным образом, то есть, даже если они специально не заданы. Это происходит потому, что статус зарегистрированного пользователя распространяется на всех участников.", + "privileges.copy-success": "Настройки прав доступа скопированы!", "analytics.back": "Назад к списку категорий", - "analytics.title": "Аналитика \"%1\" категории", - "analytics.pageviews-hourly": "График 1 – просмотры этой категории за час", - "analytics.pageviews-daily": "График 2 – просмотры этой категории за день", - "analytics.topics-daily": "График 3 – Созданные топики в этой категории за день", - "analytics.posts-daily": "График 4 – Посты, сделанные в этой категории за день", + "analytics.title": "Статистика категории «%1»", + "analytics.pageviews-hourly": "График 1 – просмотров за час", + "analytics.pageviews-daily": "График 2 – просмотров за день", + "analytics.topics-daily": "График 3 – новых тем за день", + "analytics.posts-daily": "График 4 – новых сообщений за день", "alert.created": "Создано", "alert.create-success": "Категория успешно создана!", "alert.none-active": "У вас нет активных категорий.", "alert.create": "Создать категорию", - "alert.confirm-moderate": " Вы уверены, что предоставляете права модератора этой группе пользователей? Это открытая группа, так что любой пользователь может к ней присоединиться по желанию.", - "alert.confirm-purge": "

Вы точно хотите очистить эту категорию \"%1\"?

Предупреждение! Все топики и посты этой категории будут удалены

Очистка категории удаляет все топики и посты, а также удаляет категорию из базы данных. Если вы хотите удалить категорию временно, вместо очистки вам нужно выбрать \"отключить\" .

", + "alert.confirm-moderate": " Вы уверены, что хотите предоставить участникам этой группы права модератора? Это открытая группа, так что любой пользователь может к ней присоединиться по желанию.", + "alert.confirm-purge": "

Вы точно хотите очистить категорию «%1»?

Предупреждение! Все темы и сообщения в этой категории будут удалены

Очистка категории удаляет все темы и сообщения, а также саму категорию из базы данных. Если вы хотите удалить категорию временно, вместо очистки вам нужно выбрать \"отключить\" .

", "alert.purge-success": "Категория очищена!", "alert.copy-success": "Настройки скопированы!", - "alert.set-parent-category": "Установить родительскую категорию", + "alert.set-parent-category": "Выбрать родительскую категорию", "alert.updated": "Обновленные категории", - "alert.updated-success": "Категория IDs %1 успешно обновлена.", + "alert.updated-success": "Категории с ID %1 успешно обновлены.", "alert.upload-image": "Загрузить изображение категории", "alert.find-user": "Найти пользователя", "alert.user-search": "Искать пользователя...", - "alert.find-group": "Найти Группу", + "alert.find-group": "Найти группу", "alert.group-search": "Искать группу...", "collapse-all": "Свернуть всё", "expand-all": "Развернуть всё", - "disable-on-create": "Отключить при созднии" + "disable-on-create": "Отключить при создании" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/digest.json b/public/language/ru/admin/manage/digest.json index 075b8e1aff..4249fb11d1 100644 --- a/public/language/ru/admin/manage/digest.json +++ b/public/language/ru/admin/manage/digest.json @@ -1,21 +1,21 @@ { - "lead": "A listing of digest delivery stats and times is displayed below.", - "disclaimer": "Please be advised that email delivery is not guaranteed, due to the nature of email technology. Many variables factor into whether an email sent to the recipient server is ultimately delivered into the user's inbox, including server reputation, blacklisted IP addresses, and whether DKIM/SPF/DMARC is configured.", - "disclaimer-continued": "A successful delivery means the message was sent successfully by NodeBB and acknowledged by the recipient server. It does not mean the email landed in the inbox. For best results, we recommend using a third-party email delivery service such as SendGrid.", + "lead": "Здесь представлен отчёт об отправке регулярных рассылок-дайджестов.", + "disclaimer": "Пожалуйста, имейте в в виду, что в силу специфики работы электронной почты доставку писем гарантировать невозможно. Получит пользователь рассылку или нет, зависит от множества факторов: репутации сервера, наличие или отсутствие вашего IP-адреса в чёрных списках, наличие или отсутствие настроек DKIM/SPF/DMARC и т.п.", + "disclaimer-continued": "Успешная доставка означает, что NodeBB отправил письмо, и оно прибыло на почтовый сервер получателя. Это ещё не значит, что пользователь увидел его во «Входящих». Для более надёжной доставки мы рекомендуем использовать специальные сторонние сервисы, например SendGrid.", - "user": "User", - "subscription": "Subscription Type", - "last-delivery": "Last successful delivery", - "default": "System default", - "default-help": "System default means the user has not explicitly overridden the global forum setting for digests, which is currently: "%1"", - "resend": "Resend Digest", - "resend-all-confirm": "Are you sure you wish to mnually execute this digest run?", - "resent-single": "Manual digest resend completed", - "resent-day": "Daily digest resent", - "resent-week": "Weekly digest resent", - "resent-month": "Monthly digest resent", - "null": "Never", - "manual-run": "Manual digest run:", + "user": "Пользователь", + "subscription": "Тип подписки", + "last-delivery": "Последняя доставка", + "default": "Стандартная системная", + "default-help": "Стандартная системная означает, что пользователь не выбирал своих собственных параметров рассылки и пользуется настройками по умолчанию. В данный момент это «%1».", + "resend": "Отправить заново", + "resend-all-confirm": "Вы уверены, что хотите повторить рассылку вручную?", + "resent-single": "Повтор рассылки вручную завершён", + "resent-day": "Ежедневная рассылка отправлена повторно", + "resent-week": "Еженедельная рассылка отправлена повторно", + "resent-month": "Ежемесячная рассылка отправлена повторно", + "null": "Никогда", + "manual-run": "Повтор вручную:", - "no-delivery-data": "No delivery data found" + "no-delivery-data": "Нет данных о доставке" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/groups.json b/public/language/ru/admin/manage/groups.json index 17972116f5..ab6fc33476 100644 --- a/public/language/ru/admin/manage/groups.json +++ b/public/language/ru/admin/manage/groups.json @@ -1,12 +1,12 @@ { "name": "Название группы", - "badge": "Badge", - "properties": "Properties", + "badge": "Значок", + "properties": "Свойства", "description": "Описание группы", "member-count": "Число участников", - "system": "System", - "hidden": "Hidden", - "private": "Private", + "system": "Системная", + "hidden": "Скрытая", + "private": "Закрытая", "edit": "Редактировать", "search-placeholder": "Поиск", "create": "Создать группу", @@ -18,17 +18,17 @@ "edit.name": "Название", "edit.description": "Описание", - "edit.user-title": "Имя участников", + "edit.user-title": "Звание участников", "edit.icon": "Иконка группы", - "edit.label-color": "Цвет метки группы", - "edit.text-color": "Group Text Color", - "edit.show-badge": "Показывать бейдж", - "edit.private-details": "Если включено, то вступление в группу требует подтверждение владельца.", - "edit.private-override": "Внимание: Приватные группы отключены на системном уровне.", - "edit.disable-join": "Disable join requests", - "edit.disable-leave": "Disallow users from leaving the group", - "edit.hidden": "Скрыто", - "edit.hidden-details": "Если включено, то эта группа не будет отображаться в списке групп, и участников нужно будет приглашать вручную", + "edit.label-color": "Цвет ярлыка группы", + "edit.text-color": "Цвет текста на ярлыке", + "edit.show-badge": "Показывать значок группы", + "edit.private-details": "Если включено, то вступление в группу требует подтверждения от её владельца.", + "edit.private-override": "Внимание: Закрытые группы отключены на системном уровне.", + "edit.disable-join": "Отключить запросы на вступление", + "edit.disable-leave": "Запретить участникам покидать группу", + "edit.hidden": "Скрытая", + "edit.hidden-details": "Если включено, группа будет скрыта в списках, а участников необходимо будет приглашать вручную", "edit.add-user": "Добавить участника в группу", "edit.add-user-search": "Поиск участников", "edit.members": "Список участников", @@ -36,6 +36,6 @@ "revert": "Отменить", "edit.no-users-found": "Участников не найдено", - "edit.confirm-remove-user": "Вы уверены что хотите удалить этого участника?", + "edit.confirm-remove-user": "Вы уверены, что хотите удалить этого участника?", "edit.save-success": "Изменения сохранены!" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/ip-blacklist.json b/public/language/ru/admin/manage/ip-blacklist.json index 7db2340b08..d1813147cf 100644 --- a/public/language/ru/admin/manage/ip-blacklist.json +++ b/public/language/ru/admin/manage/ip-blacklist.json @@ -1,19 +1,19 @@ { "lead": "Настройка черного списка IP", - "description": "Иногда блокировка учетной записи является недостаточной. В в этом случае ограничение доступа к форуму по IP-адресу или списку IP-адресов — лучший способ защиты. Здесь вы можете добавить нежелательные IP-адреса или целые блоки IP-адресов в формате CIDR в этот черный список, и им будет запрещено входить в систему или регистрировать новую учетную запись.", + "description": "Иногда блокировки учётной записи не достаточно. В этом случае ограничение доступа к форуму по IP-адресу или списку IP-адресов — лучший способ защиты. Здесь вы можете добавить нежелательные IP-адреса или целые блоки IP-адресов в формате CIDR в чёрный список, и им будет запрещено входить в систему или регистрировать новую учётную запись.", "active-rules": "Активные правила", "validate": "Проверить черный список", "apply": "Применить черный список", "hints": "Подсказки по синтаксису", - "hint-1": "Указывайте один IP адрес в строке. Вы можете добавлять блокировки для подсетей в формате CIDR (например, 192.168.100.0/22)", - "hint-2": "Вы можете добавить комментарии поставив символ # в начале строки.", + "hint-1": "Указывайте по одному IP-адресу на строку. Вы можете добавлять блокировки для подсетей в формате CIDR (например, 192.168.100.0/22)", + "hint-2": "Вы можете добавить комментарий, поставив символ # в начале строки.", - "validate.x-valid": "%1 из %2 правил неверны.", - "validate.x-invalid": "Следующие правила %1 неверны:", + "validate.x-valid": "%1 из %2 правил некорректны.", + "validate.x-invalid": "Следующие правила %1 некорректны:", - "alerts.applied-success": "Черный список применен", + "alerts.applied-success": "Черный список применён", - "analytics.blacklist-hourly": "Цыфра 1 – количество блокировок в час", - "analytics.blacklist-daily": "Цыфра 2 – количество блокировок в день", + "analytics.blacklist-hourly": "График 1 – количество блокировок в час", + "analytics.blacklist-daily": "График 2 – количество блокировок в день", "ip-banned": "IP заблокирован" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/post-queue.json b/public/language/ru/admin/manage/post-queue.json index cc15956a53..48d59429e6 100644 --- a/public/language/ru/admin/manage/post-queue.json +++ b/public/language/ru/admin/manage/post-queue.json @@ -1,7 +1,7 @@ { - "post-queue": "Очередь модерации", - "description": "There are no posts in the post queue.
To enable this feature, go to Settings → Post → Post Queue and enable Post Queue.", - "user": "Участник", + "post-queue": "Очередь на публикацию", + "description": "В очереди на публикацию нет сообщений.
Чтобы включить эту функцию, перейдите в Настройки → Сообщения → Очередь на публикацию и включите Очередь на публикацию.", + "user": "Пользователь", "category": "Категория", "title": "Название", "content": "Содержимое", diff --git a/public/language/ru/admin/manage/privileges.json b/public/language/ru/admin/manage/privileges.json index 8f778e18f8..2d14695ae6 100644 --- a/public/language/ru/admin/manage/privileges.json +++ b/public/language/ru/admin/manage/privileges.json @@ -1,35 +1,35 @@ { "global": "Глобальные", - "global.no-users": "Глобальные права не привязанные в участнику", - "group-privileges": "Group Privileges", - "user-privileges": "User Privileges", + "global.no-users": "Нет специально заданных глобальных прав пользователя.", + "group-privileges": "Права групп", + "user-privileges": "Права пользователей", "chat": "Чат", "upload-images": "Загрузка изображений", "upload-files": "Загрузка файлов", "signature": "Подпись", - "ban": "Блокировка", + "ban": "Блокировка пользователей", "search-content": "Поиск по содержимому", - "search-users": "Поиск участников", - "search-tags": "Поиск тегов", - "view-users": "View Users", - "view-tags": "View Tags", - "view-groups": "View Groups", - "allow-local-login": "Локальная авторизация", - "allow-group-creation": "Group Create", - "view-users-info": "View Users Info", - "find-category": "Поиск категории", - "access-category": "Доступ к категории", - "access-topics": "Доступ к темам", - "create-topics": "Создание тем", - "reply-to-topics": "Ответы в темах", - "tag-topics": "Пометка тем", - "edit-posts": "Редактирование записей", - "view-edit-history": "Просмотр истории редактирования", - "delete-posts": "Удаление записей", - "view_deleted": "Просмотр удаленных записей", - "upvote-posts": "Голосование за запись", - "downvote-posts": "Голосование против записи", - "delete-topics": "Удаление тем", - "purge": "Очистка всего", - "moderate": "Модерирование" + "search-users": "Поиск пользователей", + "search-tags": "Поиск меток", + "view-users": "Просмотр пользователей", + "view-tags": "Просмотр меток", + "view-groups": "Просмотр групп", + "allow-local-login": "Локальный вход", + "allow-group-creation": "Создание групп", + "view-users-info": "Просмотр польз. данных", + "find-category": "Найти категорию", + "access-category": "Читать категорию", + "access-topics": "Читать темы", + "create-topics": "Создавать темы", + "reply-to-topics": "Отвечать в темах", + "tag-topics": "Присваивать метки", + "edit-posts": "Редактировать сообщения", + "view-edit-history": "Просм. историю версий", + "delete-posts": "Удалять сообщения", + "view_deleted": "Просм. удалённые сообщения", + "upvote-posts": "Повышать рейтинг", + "downvote-posts": "Понижать рейтинг", + "delete-topics": "Удалять темы", + "purge": "Стирать удалённое", + "moderate": "Модерировать" } \ No newline at end of file diff --git a/public/language/ru/admin/manage/tags.json b/public/language/ru/admin/manage/tags.json index 9daae024bf..db20d901f7 100644 --- a/public/language/ru/admin/manage/tags.json +++ b/public/language/ru/admin/manage/tags.json @@ -1,15 +1,15 @@ { - "none": "Ваш форум пока не имеет тем с метками.", + "none": "На вашем форуме пока нет тем с метками.", "bg-color": "Цвет фона", "text-color": "Цвет текста", - "create-modify": "Создать и Изменить Метки", - "description": "Выберите метки кликая по ним или перетаскивая их, используйте shift для выбора нескольких.", + "create-modify": "Создать и изменить метки", + "description": "Нажмите на метку, чтобы выбрать её, или просто перетащите. Используйте клавишу Shift, чтобы выбрать несколько меток.", "create": "Создать метку", "modify": "Изменить метку", "rename": "Переименовать метку", "delete": "Удалить выбранные метки", "search": "Поиск меток...", - "settings": "Кликните сюда чтобы перейти на страницу настроек меток.", + "settings": "Нажмите сюда чтобы перейти на страницу настройки меток.", "name": "Название метки", "alerts.editing-multiple": "Редактирование нескольких меток", diff --git a/public/language/ru/admin/manage/uploads.json b/public/language/ru/admin/manage/uploads.json index 9d3b76a0c8..0b0dd240ac 100644 --- a/public/language/ru/admin/manage/uploads.json +++ b/public/language/ru/admin/manage/uploads.json @@ -1,7 +1,7 @@ { "upload-file": "Загрузить Файл", - "filename": "Имя файла", - "usage": "Post Usage", + "filename": "Название", + "usage": "Использ. в сообщениях", "orphaned": "Отделенный", "size/filecount": "Размер / Файлов", "confirm-delete": "Вы действительно хотите удалить этот файл?", diff --git a/public/language/ru/admin/manage/users.json b/public/language/ru/admin/manage/users.json index b21f3d222b..4ee8d14b2f 100644 --- a/public/language/ru/admin/manage/users.json +++ b/public/language/ru/admin/manage/users.json @@ -1,99 +1,101 @@ { - "users": "Пользователей", + "users": "Пользователи", "edit": "Редактировать", "make-admin": "Сделать администратором", "remove-admin": "Удалить администратора", "validate-email": "Подтвердить адрес электронной почты", - "send-validation-email": "Подтвердить адрес электронной почты", - "password-reset-email": "Выслать письмо для сброса пароля", - "force-password-reset": "Force Password Reset & Log User Out", - "ban": "Забанить пользователя (-ей)", - "temp-ban": "Временно забанить пользователя (-ей)", - "unban": "Снять бан с пользователя (-ей)", - "reset-lockout": "Снять блокировку", - "reset-flags": "Сбросить флаги", - "delete": "Удалить пользователя (-ей)", - "purge": "Удалить пользователя (-ей) и данные", + "send-validation-email": "Отправить письмо с кодом подтверждения", + "password-reset-email": "Отправить письмо для сброса пароля", + "force-password-reset": "Сбросить пароль и завершить сессию пользователя", + "ban": "Заблокировать пользователя(-ей)", + "temp-ban": "Временно заблокировать пользователя(-ей)", + "unban": "Разблокировать пользователя(-ей)", + "reset-lockout": "Снять локаут", + "reset-flags": "Сбросить счётчик жалоб", + "delete": "Удалить пользователя(-ей)", + "purge": "Удалить пользователя(-ей) и его данные", "download-csv": "Скачать CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Пригласить", "new": "Новый пользователь", - "pills.latest": "Последние пользователи", - "pills.unvalidated": "Не проверено", - "pills.no-posts": "Нет постов", + "pills.latest": "Последние", + "pills.unvalidated": "Не подтверждены", + "pills.no-posts": "Без сообщений", "pills.top-posters": "Самые активные", - "pills.top-rep": "С самой большой репутацией", - "pills.inactive": "Неактивно", - "pills.flagged": "Самый отмеченный", - "pills.banned": "Заблокированные участники", + "pills.top-rep": "Лучшая репутация", + "pills.inactive": "Неактивные", + "pills.flagged": "Больше всего жалоб", + "pills.banned": "Заблокированные", "pills.search": "Поиск пользователей", - "50-per-page": "50 per page", - "100-per-page": "100 per page", - "250-per-page": "250 per page", - "500-per-page": "500 per page", + "50-per-page": "50 на страницу", + "100-per-page": "100 на страницу", + "250-per-page": "250 на страницу", + "500-per-page": "500 на страницу", "search.uid": "По ID пользователя", "search.uid-placeholder": "Введите ID пользователя для поиска", "search.username": "По имени пользователя", "search.username-placeholder": "Введите имя пользователя для поиска", - "search.email": "по Email", - "search.email-placeholder": "Введите Email для поиска", - "search.ip": "По IP адресу", - "search.ip-placeholder": "Введите IP адрес для поиска", + "search.email": "По адресу электронной почты", + "search.email-placeholder": "Введите адрес электронной почты для поиска", + "search.ip": "По IP-адресу", + "search.ip-placeholder": "Введите IP-адрес для поиска", "search.not-found": "Пользователь не найден!", "inactive.3-months": "3 месяца", "inactive.6-months": "6 месяцев", "inactive.12-months": "12 месяцев", - "users.uid": "ID пользователя", - "users.username": "Имя пользователя", - "users.email": "email", - "users.postcount": "Счетчик постов", + "users.uid": "ID", + "users.username": "Логин", + "users.email": "E-mail", + "users.postcount": "Сообщения", "users.reputation": "Репутация", - "users.flags": "Отметки", - "users.joined": "Присоединился", - "users.last-online": "Последний раз был в сети", - "users.banned": "забанен", + "users.flags": "Жалобы", + "users.joined": "Регистрация", + "users.last-online": "В сети", + "users.banned": "Блокировка", "create.username": "Имя пользователя", - "create.email": "Email", - "create.email-placeholder": "Email этого пользователя", + "create.email": "E-mail", + "create.email-placeholder": "Адрес электронной почты пользователя", "create.password": "Пароль", "create.password-confirm": "Подтвердите пароль", - "temp-ban.length": "Период бана", + "temp-ban.length": "Период блокировки", "temp-ban.reason": "Причина (Необязательно)", "temp-ban.hours": "Часов", "temp-ban.days": "Дней", - "temp-ban.explanation": "Введите продолжительность бана. Имейте ввиду, что время \"0\" будет означать вечный бан.", + "temp-ban.explanation": "Укажите продолжительность блокировки. Имейте в виду, что «0» означает заблокировать навсегда.", - "alerts.confirm-ban": "Вы действительно хотите забанить этого участника навсегда?", - "alerts.confirm-ban-multi": "Вы действительно хотите забанить этих участников навсегда?", - "alerts.ban-success": "Пользователь(и) забанен(ы)!", - "alerts.button-ban-x": "Забанить %1 пользователя(-ей)", - "alerts.unban-success": "Пользователь(и) разбанен(ы)!", - "alerts.lockout-reset-success": "Блокировка(и) сброшена(ы)!", - "alerts.flag-reset-success": "Отметка(и) сброшена(ы)!", - "alerts.no-remove-yourself-admin": "Вы не можете удалить себя как Администратора!", + "alerts.confirm-ban": "Вы действительно хотите заблокировать пользователя навсегда?", + "alerts.confirm-ban-multi": "Вы действительно хотите заблокировать этих пользователей навсегда?", + "alerts.ban-success": "Пользователь(и) заблокирован(ы)!", + "alerts.button-ban-x": "Заблокировать %1 пользователя(-ей)", + "alerts.unban-success": "Пользователь(и) разблокирован(ы)!", + "alerts.lockout-reset-success": "Локаут снят!", + "alerts.flag-reset-success": "Счётчик жалоб сброшен!", + "alerts.no-remove-yourself-admin": "Вы не можете удалить себя из администраторов!", "alerts.make-admin-success": "Пользователь теперь Администратор.", "alerts.confirm-remove-admin": "Вы действительно хотите удалить этого администратора?", "alerts.remove-admin-success": "Пользователь больше не администратор.", "alerts.make-global-mod-success": "Пользователь теперь Общий модератор .", "alerts.confirm-remove-global-mod": "Вы действительно хотите удалить этого общего модератора?", "alerts.remove-global-mod-success": "Пользователь больше не общий модератор.", - "alerts.make-moderator-success": "Пользователь теперь модератор .", + "alerts.make-moderator-success": "Пользователь теперь модератор.", "alerts.confirm-remove-moderator": "Вы действительно хотите удалить этого модератора?", "alerts.remove-moderator-success": "Пользователь больше не модератор.", - "alerts.confirm-validate-email": "Вы хотите утвердить email(s) этого пользователя(-ей)?", - "alerts.confirm-force-password-reset": "Are you sure you want to force the password reset and log out these user(s)?", - "alerts.validate-email-success": "Email утверждены.", - "alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.", - "alerts.password-reset-confirm": "Вы хотите послать письмо(а) со сбросом пароля этому пользователю(ям)?", - "alerts.confirm-delete": "Внимание!
Вы действительно хотите удалить этого пользователя(ей)?
Это действие необратимо! Удалится только аккаунт пользователя, его посты и топики останутся.", - "alerts.delete-success": "Пользователь(и) Удален(ы)!", - "alerts.confirm-purge": "Внимание!
Вы действительно хотите удалить этого пользователя(ей) и их данные?
Это действие необратимо! Удалится вообще всё!", + "alerts.confirm-validate-email": "Вы хотите подтвердить e-mail этого пользователя(-ей)?", + "alerts.confirm-force-password-reset": "Вы уверены, что хотите сбросить пароль и завершить сессию этого пользователя(-ей)?", + "alerts.validate-email-success": "Адреса электронной почты подтверждены", + "alerts.validate-force-password-reset-success": "Пароли были сброшены, а сессии — завершены.", + "alerts.password-reset-confirm": "Вы хотите отправить этому пользователю ссылку для сброса пароля?", + "alerts.confirm-delete": "Внимание!
Вы действительно хотите удалить этого пользователя(ей)?
Это действие необратимо! Будет удалена только учётная запись, темы и сообщения пользователя останутся.", + "alerts.delete-success": "Пользователь(и) удален(ы)!", + "alerts.confirm-purge": "Внимание!
Вы действительно хотите удалить этого пользователя(ей) и его данные?
Это действие необратимо! Будут удалены как учётная запись, так и весь контент пользователя!", "alerts.create": "Создать пользователя", "alerts.button-create": "Создать", "alerts.button-cancel": "Отмена", @@ -102,6 +104,6 @@ "alerts.create-success": "Пользователь создан!", "alerts.prompt-email": "Адреса электронной почты:", - "alerts.email-sent-to": "Приглашение для участника %1 было отправлено по электронной почте", - "alerts.x-users-found": "Нашел %1 пользователя(ей)! Поиск занял %2 мс." + "alerts.email-sent-to": "Письмо с приглашением для %1 отправлено", + "alerts.x-users-found": "Найдено пользователей: %1! Поиск занял %2 мс." } \ No newline at end of file diff --git a/public/language/ru/admin/menu.json b/public/language/ru/admin/menu.json index b8db2bbdcc..e801fbb8fd 100644 --- a/public/language/ru/admin/menu.json +++ b/public/language/ru/admin/menu.json @@ -1,7 +1,7 @@ { "section-general": "Общие", "general/dashboard": "Панель управления", - "general/homepage": "Домашняя страница", + "general/homepage": "Главная страница", "general/navigation": "Навигация", "general/languages": "Языки", "general/sounds": "Звуки", @@ -9,19 +9,19 @@ "section-manage": "Управление", "manage/categories": "Категории", - "manage/privileges": "Привилегии", - "manage/tags": "Теги", + "manage/privileges": "Права доступа", + "manage/tags": "Метки", "manage/users": "Пользователи", - "manage/admins-mods": "Админы и Модераторы", + "manage/admins-mods": "Администраторы и модераторы", "manage/registration": "Очередь на регистрацию", - "manage/post-queue": "Очередь публикации", + "manage/post-queue": "Очередь на публикацию", "manage/groups": "Группы", - "manage/ip-blacklist": "Блокировка IP", + "manage/ip-blacklist": "Чёрный список IP", "manage/uploads": "Загрузки", - "manage/digest": "Digests", + "manage/digest": "Рассылки", "section-settings": "Настройки", - "settings/general": "Главные", + "settings/general": "Основные", "settings/reputation": "Репутация", "settings/email": "Электронная почта", "settings/user": "Пользователь", @@ -31,18 +31,18 @@ "settings/post": "Сообщения", "settings/chat": "Чат", "settings/pagination": "Пагинация", - "settings/tags": "Теги", - "settings/notifications": "Оповещения", + "settings/tags": "Метки", + "settings/notifications": "Уведомления", "settings/cookies": "Куки", "settings/web-crawler": "Индексация", "settings/sockets": "Сокеты", - "settings/advanced": "Продвинутые", + "settings/advanced": "Расширенные", - "settings.page-title": "%1 Настройки", + "settings.page-title": "Настройки %1", - "section-appearance": "Вид", + "section-appearance": "Оформление", "appearance/themes": "Темы", - "appearance/skins": "Скины", + "appearance/skins": "Стили", "appearance/customise": "Настройка контента (HTML/JS/CSS)", "section-extend": "Расширения", @@ -57,27 +57,27 @@ "section-advanced": "Расширенные", "advanced/database": "База данных", - "advanced/events": "События", + "advanced/events": "Журнал событий", "advanced/hooks": "Hooks", - "advanced/logs": "Логи", - "advanced/errors": "Ошибки", + "advanced/logs": "Системный журнал", + "advanced/errors": "Журнал ошибок", "advanced/cache": "Кэш", - "development/logger": "Журнал событий", - "development/info": "Инфо", + "development/logger": "Отладочный журнал", + "development/info": "Сведения о системе", "rebuild-and-restart-forum": "Пересобрать и перезапустить форум", - "restart-forum": "Перезапустить Форум", + "restart-forum": "Перезапустить форум", "logout": "Выйти", - "view-forum": "Просмотреть Форум", + "view-forum": "Перейти на форум", - "search.placeholder": "Поиск настроек", + "search.placeholder": "Поиск в настройках", "search.no-results": "Нет результата...", - "search.search-forum": "Поиск по форуму ", - "search.keep-typing": "Введите больше данных чтобы увидеть результаты...", - "search.start-typing": "Начните ввод данных чтобы увидеть результаты...", + "search.search-forum": "Искать на форуме", + "search.keep-typing": "Наберите ещё что-нибудь, чтобы увидеть результат...", + "search.start-typing": "Наберите что-нибудь, чтобы увидеть результат...", "connection-lost": "Соединение с %1 потеряно, пытаюсь переподключиться...", - "alerts.version": "Запущена версия v%1 NodeBB", - "alerts.upgrade": "Обновление до v%1" + "alerts.version": "Вы используете NodeBB версии %1", + "alerts.upgrade": "Обновить до v%1" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/advanced.json b/public/language/ru/admin/settings/advanced.json index bbb21f82e4..6f9e590477 100644 --- a/public/language/ru/admin/settings/advanced.json +++ b/public/language/ru/admin/settings/advanced.json @@ -1,26 +1,26 @@ { - "maintenance-mode": "Режим обслуживания", - "maintenance-mode.help": "Когда форум находится в режиме обслуживания, все запросы будут перенаправляться на статичную страницу. Администраторы освобождены от этого ограничения, и имеют обычный доступ к сайту.", - "maintenance-mode.status": "Maintenance Mode Status Code", - "maintenance-mode.message": "Сообщение форума в режиме обслуживания", + "maintenance-mode": "Режим техобслуживания", + "maintenance-mode.help": "Когда включен режим техобслуживания, все запросы перенаправляются на специальную страницу-заглушку. Только администраторы сохраняют обычный доступ к форуму.", + "maintenance-mode.status": "Код состояния HTTP для страницы-заглушки", + "maintenance-mode.message": "Сообщение для пользователей", "headers": "Заголовки", - "headers.allow-from": "Установить ALLOW-FROM для размещения NodeBB в iFrame", - "headers.powered-by": "Изменить заголовок \"Powered By\"", + "headers.allow-from": "Опция ALLOW-FROM для использования NodeBB через iFrame", + "headers.powered-by": "Настройка заголовка «Powered By», отправляемого NodeBB", "headers.acao": "Access-Control-Allow-Origin", - "headers.acao-regex": "Access-Control-Allow-Origin Регулярное выражение", - "headers.acao-help": "Чтобы запретить доступ всем сайтам, значение оставьте пустым", - "headers.acao-regex-help": "Введите регулярное выражение, которым будет проверяться доступ сайта. Чтобы запретить доступ всем сайтам, значение оставьте пустым", + "headers.acao-regex": "Регулярное выражение для Access-Control-Allow-Origin", + "headers.acao-help": "Оставьте пустым, чтобы запретить доступ всем сайтам", + "headers.acao-regex-help": "Введите регулярное выражение для проверки прав доступа. Оставьте поле пустым, чтобы запретить доступ всем сайтам", "headers.acac": "Access-Control-Allow-Credentials", "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", "hsts": "Строгая политика безопасности транспортного уровня", - "hsts.enabled": "Включить HSTS (рекоммендуется)", - "hsts.subdomains": "Включить поддомены в HSTS заголовке", + "hsts.enabled": "Включить HSTS (рекомендуется)", + "hsts.subdomains": "Включать в заголовок HSTS поддомены", "hsts.preload": "Разрешить предзагрузку заголовка HSTS", - "hsts.help": "Если включено, то заголовок HSTS будет отправляться в запросах к этому сайту. Вы можете выбрать поддомены и флаги предзагрузки в заголовке. Если сомневаетесь, то можете оставить как есть. Дополнительная информация ", - "traffic-management": "Управление траффиком", - "traffic.help": "NodeBB имеет модуль, который автоматически блокирует соединения в случаях высокой нагрузки. Вы можете настроить его здесь, но настройки по умолчанию и так довольно хороши для начала.", - "traffic.enable": "Включить управление траффиком", + "hsts.help": "Включите, чтобы установить заголовок HSTS для этого сайта, а также настроить его предзагрузку или использование поддоменов. Если вы не уверены, какими должны быть эти параметры, оставьте всё как есть. Дополнительная информация ", + "traffic-management": "Управление трафиком", + "traffic.help": "NodeBB может автоматически блокировать соединения при высокой нагрузке. Настройте параметры блокировки как считаете нужным, хотя настройки по умолчанию и так вполне хороши.", + "traffic.enable": "Включить управление трафиком", "traffic.event-lag": "Порог лага Event Loop (в миллисекундах)", "traffic.event-lag-help": "Уменьшение этого значение ускорит загрузку страниц, но также может привести к показу сообщения \"высокая нагрузка\" большому количеству участников. (Необходим перезапуск)", "traffic.lag-check-interval": "Интервал проверки (в миллисекундах)", diff --git a/public/language/ru/admin/settings/chat.json b/public/language/ru/admin/settings/chat.json index f102735ab6..6cf024d098 100644 --- a/public/language/ru/admin/settings/chat.json +++ b/public/language/ru/admin/settings/chat.json @@ -1,11 +1,11 @@ { - "chat-settings": "Настройки Чата", + "chat-settings": "Настройки чата", "disable": "Отключить чат", - "disable-editing": "Отключить редактирование/удаление сообщения чата", + "disable-editing": "Отключить редактирование и удаление сообщений чата", "disable-editing-help": "Администраторы и общие модераторы освобождены от этого ограничения.", - "max-length": "Максимальная длина сообщения чата", - "max-room-size": "Максимальное число пользователей в чат комнатах", - "delay": "Время между сообщениями чата в милисекундах", - "restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)", - "restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)" + "max-length": "Максимальная длина сообщений в чате", + "max-room-size": "Максимальное кол-во пользователей в чат-комнатах", + "delay": "Пауза между сообщениями (в миллисекундах)", + "restrictions.seconds-edit-after": "Через сколько секунд после отправки сообщение будет нельзя отредактировать (0 — время не ограничено)", + "restrictions.seconds-delete-after": "Через сколько секунд после отправки сообщение будет нельзя удалить (0 — время не ограничено)" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/cookies.json b/public/language/ru/admin/settings/cookies.json index 7f28057c49..8e41dd65b6 100644 --- a/public/language/ru/admin/settings/cookies.json +++ b/public/language/ru/admin/settings/cookies.json @@ -1,11 +1,11 @@ { - "eu-consent": "Соглашение", + "eu-consent": "Согласие на использование cookie", "consent.enabled": "Включено", - "consent.message": "Уведомление", - "consent.acceptance": "Сообщение о принятии", - "consent.link-text": "Ссылка на правила", - "consent.link-url": "Policy Link URL", - "consent.blank-localised-default": "Оставьте пустым чтобы использовать настройки NodeBB по умолчанию", + "consent.message": "Текст уведомления", + "consent.acceptance": "Текст сообщения о согласии", + "consent.link-text": "Текст ссылки на правила", + "consent.link-url": "URL ссылки на правила", + "consent.blank-localised-default": "Оставьте пустым, чтобы использовать стандартные настройки NodeBB", "settings": "Настройки", "cookie-domain": "Домен для cookie сессии", "blank-default": "Оставьте пустым для настроек по умолчанию" diff --git a/public/language/ru/admin/settings/email.json b/public/language/ru/admin/settings/email.json index cfdcc04a5b..2bc928d5c8 100644 --- a/public/language/ru/admin/settings/email.json +++ b/public/language/ru/admin/settings/email.json @@ -1,40 +1,40 @@ { - "email-settings": "Email Settings", - "address": "Email Address", - "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", - "from": "From Name", - "from-help": "The from name to display in the email.", - "sendmail-rate-limit": "Send X emails...", - "sendmail-rate-delta": "... every X milliseconds", - "sendmail-rate-help": "Instructs the NodeBB mailer to limit the number of messages sent at once in order to not overwhelm email receiving services. These options do not apply if SMTP Transport is enabled (below).", + "email-settings": "Настройки электронной почты", + "address": "Адрес электронной почты", + "address-help": "Этот адрес получатели писем увидят в полях «От кого» и «Ответить».", + "from": "От кого", + "from-help": "Имя отправителя письма (или название форума).", + "sendmail-rate-limit": "Отправлять Х писем...", + "sendmail-rate-delta": "…каждые X миллисекунд", + "sendmail-rate-help": "Ограничивает кол-во писем, отправляемых за единицу времени, чтобы не перегружать службы доставки. Эта настройка не применяется, если вы используете сторонний почтовый сервис (см. ниже).", - "smtp-transport": "SMTP Transport", - "smtp-transport.enabled": "Use an external email server to send emails", - "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", - "smtp-transport.service": "Select a service", - "smtp-transport.service-custom": "Custom Service", - "smtp-transport.service-help": "Select a service name above in order to use the known information about it. Alternatively, select 'Custom Service' and enter the details below.", - "smtp-transport.gmail-warning1": "There have been reports of the Gmail service not working on accounts with heightened security. In those scenarios, you will have to configure your GMail account to allow less secure apps.", + "smtp-transport": "Сервис SMTP", + "smtp-transport.enabled": "Использовать сторонний сервис для рассылки писем", + "smtp-transport-help": "Выберите один из популярных сервисов или укажите свой почтовый сервер.", + "smtp-transport.service": "Выберите сервис", + "smtp-transport.service-custom": "Другой сервис", + "smtp-transport.service-help": "Выберите какой-нибудь сервис из списка, чтобы увидеть его параметры — или укажите настройки вручную, выбрав пункт «Другой сервис»", + "smtp-transport.gmail-warning1": "Отправка писем через Gmail может не сработать, если ваша учётная запись использует усиленные настройки безопасности. В этом случае вам понадобится позволить использовать менее безопасные приложения с вашей учётной записью Gmail.", "smtp-transport.gmail-warning2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.", - "smtp-transport.host": "SMTP Host", - "smtp-transport.port": "SMTP Port", - "smtp-transport.security": "Connection security", - "smtp-transport.security-encrypted": "Encrypted", + "smtp-transport.host": "Сервер SMTP", + "smtp-transport.port": "Порт SMTP", + "smtp-transport.security": "Безопасность соединения", + "smtp-transport.security-encrypted": "Зашифрованное", "smtp-transport.security-starttls": "StartTLS", - "smtp-transport.security-none": "None", - "smtp-transport.username": "Username", - "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": "Password", + "smtp-transport.security-none": "Отсутствует", + "smtp-transport.username": "Имя пользователя", + "smtp-transport.username-help": "Для Gmail нужно указать полный адрес электронной почты, особенно если вы используете Google Apps.", + "smtp-transport.password": "Пароль", - "template": "Edit Email Template", - "template.select": "Select Email Template", - "template.revert": "Revert to Original", - "testing": "Email Testing", - "testing.select": "Select Email Template", - "testing.send": "Send Test Email", - "testing.send-help": "The test email will be sent to the currently logged in user's email address.", - "subscriptions": "Email Digests", - "subscriptions.disable": "Disable email digests", - "subscriptions.hour": "Digest Hour", - "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. 0 for midnight, 17 for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.
The approximate server time is:
The next daily digest is scheduled to be sent " + "template": "Шаблоны писем", + "template.select": "Выберите шаблон письма", + "template.revert": "Вернуть стандартный", + "testing": "Проверка отправки", + "testing.select": "Выберите шаблон письма", + "testing.send": "Отправить проверочное письмо", + "testing.send-help": "Проверочное письмо будет отправлено на электронную почту пользователя, который сейчас пользуется панелью администратора.", + "subscriptions": "Новостные рассылки", + "subscriptions.disable": "Отключить новостные рассылки", + "subscriptions.hour": "Час отправки", + "subscriptions.hour-help": "Введите число, соответствующее номеру часа (например, 0 для полуночи, 17 для 17:00). Имейте в виду, что время определяется по часовому поясу сервера.
Текущее время сервера:
Следующая рассылка запланирована на " } \ No newline at end of file diff --git a/public/language/ru/admin/settings/general.json b/public/language/ru/admin/settings/general.json index ffe62e8bac..1895e3ad88 100644 --- a/public/language/ru/admin/settings/general.json +++ b/public/language/ru/admin/settings/general.json @@ -3,33 +3,33 @@ "title": "Название сайта", "title.url": "URL", "title.url-placeholder": "URL для названия сайта", - "title.url-help": "Когда участник кликает по названию, то его перенаправляет по этому адресу.\nЕсли значение оставить пустым, то участник будет перенаправлен на главную страницу форума.", - "title.name": "Имя вашего сообщества", - "title.show-in-header": "Показывать название в заголовке", + "title.url-help": "Когда пользователь нажмёт на название сайта, он перейдёт по этой ссылке.\nОставьте поле пустым, чтобы отправлять пользователей на главную страницу форума.", + "title.name": "Название вашего сообщества", + "title.show-in-header": "Показывать название в шапке сайта", "browser-title": "Название для браузера", - "browser-title-help": "Если название для браузера не указано, то будет использовано основное название", - "title-layout": "Расположение названия", - "title-layout-help": "Определите как название для браузера будет расположено, напр.\n{основное название} | {название для браузера}", + "browser-title-help": "Если здесь ничего не указано, будет использовано название сайта", + "title-layout": "Макет заголовка", + "title-layout-help": "Укажите, как сформировать заголовок для браузера, напр.\n{название сайта} | {название для браузера}", "description.placeholder": "Краткое описание вашего сообщества", "description": "Описание сайта", - "keywords": "Ключевые слова сайта", - "keywords-placeholder": "Ключевые слова, описывающие ваше сообщество, через запятую.", - "logo": "Логотип", - "logo.image": "Изображение", - "logo.image-placeholder": "Путь к логотипу для заголовка форума", + "keywords": "Ключевые слова для сайта", + "keywords-placeholder": "Укажите через запятую ключевые слова, описывающие ваше сообщество", + "logo": "Логотип сайта", + "logo.image": "Логотип в шапке сайта", + "logo.image-placeholder": "Путь к файлу логотипа ", "logo.upload": "Загрузить", "logo.url": "URL", - "logo.url-placeholder": "URL для логотипа сайта", - "logo.url-help": "Когда участник кликает по логотипу, то его перенаправит на этот адрес.\nЕсли значение оставить пустым, то участника перенаправит на главную страницу форума.", - "logo.alt-text": "Alt Текст", - "log.alt-text-placeholder": "Текст, который увидит участник с отключенными картинками", + "logo.url-placeholder": "URL для логотипа", + "logo.url-help": "Когда пользователь нажмёт на логотип, он перейдёт по этой ссылке.\nОставьте поле пустым, чтобы отправлять пользователей на главную страницу форума.", + "logo.alt-text": "Замещающий текст", + "log.alt-text-placeholder": "Текст, который появится, если логотип не загрузится или загрузка изображений будет отключена", "favicon": "Favicon", "favicon.upload": "Загрузить", "touch-icon": "Иконка Homescreen/Touch", "touch-icon.upload": "Загрузить", - "touch-icon.help": "Рекомендуемый размер и формат: 192x192 PNG. Если оставить пусты, то NodeBB попробует использовать favicon.", - "outgoing-links": "Исходящие ссылки", - "outgoing-links.warning-page": "Использовать страницу предупреждения для исходящих ссылок", - "search-default-sort-by": "Сортировка по умолчанию для поиска", + "touch-icon.help": "Рекомендуемый формат и размер: PNG, 192x192. Если оставить пустым, то NodeBB попробует использовать favicon.", + "outgoing-links": "Внешние ссылки", + "outgoing-links.warning-page": "Предупреждать, когда пользователь переходит по внешним ссылкам", + "search-default-sort-by": "Сортировать результаты поиска по", "outgoing-links.whitelist": "Список доменов, для которых страница предупреждения отключена" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/group.json b/public/language/ru/admin/settings/group.json index 4f9d84de9a..e09b9d025f 100644 --- a/public/language/ru/admin/settings/group.json +++ b/public/language/ru/admin/settings/group.json @@ -1,12 +1,12 @@ { "general": "Основные", - "private-groups": "Приватные группы", - "private-groups.help": "Если включено, то вступление в группы требует подтверждение хозяина группы (Включено по умолчанию)", - "private-groups.warning": "Внимание! если эта настройка выключена и у вас есть приватные группы, то они автоматически станут публичными.", - "allow-multiple-badges-help": "Этот флаг может быть использован чтобы позволить участникам выбрать несколько бейджей групп, функция требует поддержки темы.", + "private-groups": "Закрытые группы", + "private-groups.help": "Когда эта настройка включена, присоединиться к группе можно только с разрешения её владельца (Включено по умолчанию)", + "private-groups.warning": "Внимание! Если вы отключите эту опцию, все закрытые группы автоматически станут открытыми.", + "allow-multiple-badges-help": "Разрешить пользователям выбирать несколько значков групп (для полноценной работы этой функции требуется её поддержка в теме оформления форума).", "max-name-length": "Максимальная длина названия группы", - "max-title-length": "Maximum Group Title Length", - "cover-image": "Картинка группы", - "default-cover": "Картинки по умолчанию", - "default-cover-help": "Добавьте через запятую картинки для групп, которые не имеют своих" + "max-title-length": "Максимальная длина звания участника группы", + "cover-image": "Обложка группы", + "default-cover": "Стандартные обложки", + "default-cover-help": "Добавьте через запятую пути к изображениям, которые будут использованы, если у группы нет собственной обложки" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/guest.json b/public/language/ru/admin/settings/guest.json index 158c5b971f..06c29f55e2 100644 --- a/public/language/ru/admin/settings/guest.json +++ b/public/language/ru/admin/settings/guest.json @@ -1,5 +1,5 @@ { "handles": "Имена гостей", - "handles.enabled": "Разрешить имена гостей", - "handles.enabled-help": "Эта настройка включает новое поле, которое позволяет гостям указать имя, которое будет видно в каждом сообщении, которое они оставят. Если выключено, то имя будет просто \"Гость\"" + "handles.enabled": "Разрешить гостям выбирать имена", + "handles.enabled-help": "Эта настройка добавляет поле, в котором гость сможет указать имя, под которым он хочет оставить сообщение. Когда она выключена, вместо имени будет написано просто «Гость»." } \ No newline at end of file diff --git a/public/language/ru/admin/settings/notifications.json b/public/language/ru/admin/settings/notifications.json index e5ec7d53cd..c5ef26aa24 100644 --- a/public/language/ru/admin/settings/notifications.json +++ b/public/language/ru/admin/settings/notifications.json @@ -1,7 +1,7 @@ { "notifications": "Уведомления", "welcome-notification": "Приветственное уведомление", - "welcome-notification-link": "Ссылка на приветственное уведомление", - "welcome-notification-uid": "Приветственное уведомление пользователю (UID)", - "notification-alert-timeout": "Таймаут уведомления" + "welcome-notification-link": "Ссылка в уведомлении", + "welcome-notification-uid": "UID отправителя", + "notification-alert-timeout": "Таймаут оповещения" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/pagination.json b/public/language/ru/admin/settings/pagination.json index de099bdd1a..5baec059e0 100644 --- a/public/language/ru/admin/settings/pagination.json +++ b/public/language/ru/admin/settings/pagination.json @@ -1,10 +1,10 @@ { - "pagination": "Настройки разбивки на страницы", - "enable": "Разбивать темы и записи на страницы вместо бесконечной прокрутки.", + "pagination": "Настройка разбивки на страницы", + "enable": "Разбивать темы и сообщения на страницы вместо бесконечной прокрутки.", "topics": "Разбивка темы на страницы", - "posts-per-page": "Записей на страницу", - "max-posts-per-page": "Максимальное количество записей на странице", + "posts-per-page": "Сообщений на страницу", + "max-posts-per-page": "Максимальное кол-во сообщений на странице", "categories": "Разбивка категорий на страницы", "topics-per-page": "Тем на странице", - "max-topics-per-page": "Максимально количество тем на странице" + "max-topics-per-page": "Максимальное количество тем на странице" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/post.json b/public/language/ru/admin/settings/post.json index 4ad1ac1e4d..e32c183357 100644 --- a/public/language/ru/admin/settings/post.json +++ b/public/language/ru/admin/settings/post.json @@ -1,57 +1,59 @@ { - "sorting": "Сортировка постов", - "sorting.post-default": "Сортировка постов по умолчанию", - "sorting.oldest-to-newest": "Начиная со старых записей", - "sorting.newest-to-oldest": "Начиная с новых записей", - "sorting.most-votes": "По голосам", - "sorting.most-posts": "По количеству ответов", - "sorting.topic-default": "Сортировка записей по умолчанию", - "length": "Длина записи", - "post-queue": "Post Queue", - "restrictions": "Ограничения на запись", - "restrictions-new": "Ограничения для новых участников", - "restrictions.post-queue": "Включить очередь записей", - "restrictions.post-queue-rep-threshold": "Reputation required to bypass post queue", - "restrictions.groups-exempt-from-post-queue": "Select groups that should be exempt from the post queue", - "restrictions-new.post-queue": "Включить ограничения для новых участников", - "restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval", + "sorting": "Сортировка сообщений", + "sorting.post-default": "Стандартная сортировка сообщений", + "sorting.oldest-to-newest": "Сначала старые", + "sorting.newest-to-oldest": "Сначала новые", + "sorting.most-votes": "По количеству голосов", + "sorting.most-posts": "По количеству сообщений", + "sorting.topic-default": "Стандартная сортировка тем", + "length": "Длина сообщения", + "post-queue": "Очередь на публикацию", + "restrictions": "Ограничения на публикацию", + "restrictions-new": "Ограничения для новых пользователей", + "restrictions.post-queue": "Включить очередь на публикацию", + "restrictions.post-queue-rep-threshold": "Минимум репутации для публикации без проверки", + "restrictions.groups-exempt-from-post-queue": "Выберите группы, участники которых смогут публиковать сообщения без предварительной проверки", + "restrictions-new.post-queue": "Включить ограничения для новых пользователей", + "restrictions.post-queue-help": "Сообщения от новых пользователей будут опубликованы только после проверки модератором", "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users", - "restrictions.seconds-between": "Number of seconds between posts", - "restrictions.seconds-between-new": "Секунд между записями от новых участников", - "restrictions.rep-threshold": "Порог репутации перед тем как эти ограничения будут включены", - "restrictions.seconds-before-new": "Seconds before a new user can make their first post", - "restrictions.seconds-edit-after": "Number of seconds a post remains editable (set to 0 to disable)", - "restrictions.seconds-delete-after": "Number of seconds a post remains deletable (set to 0 to disable)", - "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics (set to 0 to disable)", + "restrictions.seconds-between": "Пауза между сообщениями (в секундах)", + "restrictions.seconds-between-new": "Пауза между сообщениями новых пользователей (в секундах)", + "restrictions.rep-threshold": "Минимум репутации, чтобы снять это ограничение", + "restrictions.seconds-before-new": "Пауза перед тем, как новый пользователь сможет написать первое сообщение (в секундах)", + "restrictions.seconds-edit-after": "Через сколько секунд после отправки сообщение нельзя будет отредактировать (0 — время не ограничено)", + "restrictions.seconds-delete-after": "Через сколько секунд после отправки сообщение нельзя будет удалить (0 — время не ограничено)", + "restrictions.replies-no-delete": "Кол-во ответов, после которого пользователям будет запрещено удалять тему (0 — ограничения нет)", "restrictions.min-title-length": "Минимальная длина названия", "restrictions.max-title-length": "Максимальная длина названия", - "restrictions.min-post-length": "Минимальная длина записи", - "restrictions.max-post-length": "Максимальная длина записи", - "restrictions.days-until-stale": "Количество дней после которого тема будет считаться устаревшей", - "restrictions.stale-help": "Когда тема считается \"устаревшей\", то участнику будет показано соответсвующее уведомление при попытке написать в такой теме.", - "timestamp": "Время", - "timestamp.cut-off": "Время отсечения (в днях)", - "timestamp.cut-off-help": "Дата и время будут показываться в формате \"3 часа назад\" / \"5 дней назад\" с локализацией в соответсвии с настройками языка форума. Спустя какое-то время, формат поменяется на простую дату (например: 5 Ноября 2016 15:30).
(По умолчанию: 30, или один месяц). Укажите 0 чтобы всегда отображать простую дату, оставьте пустым что всегда отображать относительное время", - "teaser": "Резюме записи", - "teaser.last-post": "Последний – Показывать последнюю запись, включая оригинальную, если нет ответов.", - "teaser.last-reply": "Последний – Показывать последнюю запись, либо \"Нет ответов\", если нет ответов. ", - "teaser.first": "Первый", - "unread": "Настройки непрочтенного", - "unread.cutoff": "Число дней в которые непрочтенное считается непрочтенным", - "unread.min-track-last": "Минимально количество сообщений в теме перед отслеживанием последнего прочтенного", - "recent": "Настройки последних сообщений", - "recent.categoryFilter.disable": "Отключить фильтрацию тем в заигнорированных категориях на странице /recent (последние сообщения)", - "signature": "Настройки подписи", + "restrictions.min-post-length": "Минимальная длина сообщения", + "restrictions.max-post-length": "Максимальная длина сообщения", + "restrictions.days-until-stale": "Через сколько дней тема будет считаться устаревшей", + "restrictions.stale-help": "Если тема считается устаревшей, пользователь увидит соответствующее предупреждение при попытке ответить в ней.", + "timestamp": "Дата и время", + "timestamp.cut-off": "Порог отсечки (в днях)", + "timestamp.cut-off-help": "Сначала дата и время сообщения будут отображаться в относительном виде: «3 часа назад» / «5 дней назад», локализованным в соответствии с языковыми настройками форума. Затем формат изменится на обычный: 5 Ноября 2016 15:30.
(Стандартная отсечка: 30, или один месяц). Введите 0, чтобы всегда отображать обычные дату и время, или оставьте поле пустым, чтобы всегда использовать относительный вид", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", + "teaser": "Сообщение-анонс", + "teaser.last-post": "Последнее – показать последнее сообщение в теме (первое, если ответов нет).", + "teaser.last-reply": "Последнее – показать последнее сообщение или пометку «Ответов нет»", + "teaser.first": "Первое сообщение", + "unread": "Настройка списка непрочитанных тем", + "unread.cutoff": "Порог отсечки (в днях)", + "unread.min-track-last": "Минимальное кол-во сообщений в теме, чтобы начать отслеживать непрочитанные ответы", + "recent": "Настройка списка последних тем", + "recent.categoryFilter.disable": "Отключить фильтрацию тем из игнорируемых категорий для списка последних тем", + "signature": "Настройка подписей", "signature.disable": "Отключить подписи", "signature.no-links": "Отключить ссылки в подписях", "signature.no-images": "Отключить картинки в подписях", "signature.max-length": "Максимальная длина подписи", "composer": "Настройки редактора", - "composer-help": "Эти настройки определяют функциональность и/или внешний вид редактора для участников, когда они создают новые темы или пишут сообщения.", - "composer.show-help": "Включить раздел подсказок", - "composer.enable-plugin-help": "Разрешить плагинам добавлять контент в раздел подсказок", - "composer.custom-help": "Настройка текста подсказки", - "ip-tracking": "Трекинг IP", - "ip-tracking.each-post": "Трекать IP для каждого сообщения", - "enable-post-history": "Включить историю сообщений" + "composer-help": "Эти настройки определяют функциональность и/или внешний вид редактора сообщений", + "composer.show-help": "Показывать вкладку с подсказками", + "composer.enable-plugin-help": "Разрешить плагинам добавлять подсказки на вкладку", + "composer.custom-help": "Пользовательский текст для вкладки с подсказками", + "ip-tracking": "Отслеживание IP", + "ip-tracking.each-post": "Отслеживать IP для каждого сообщения", + "enable-post-history": "Включить историю правок" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/reputation.json b/public/language/ru/admin/settings/reputation.json index c4bdd274ab..ff73fc58cf 100644 --- a/public/language/ru/admin/settings/reputation.json +++ b/public/language/ru/admin/settings/reputation.json @@ -1,14 +1,14 @@ { - "reputation": "Настройки репутации", - "disable": "Отключить Репутационную Систему", - "disable-down-voting": "Отключить Понижение Репутации", - "votes-are-public": "Все Голоса Общедоступны", + "reputation": "Настройка системы репутации", + "disable": "Выключить отслеживание репутации", + "disable-down-voting": "Отключить понижение рейтинга", + "votes-are-public": "Все голоса общедоступны", "thresholds": "Пороговые значения", "min-rep-downvote": "Минимальная репутация для понижения рейтинга сообщения", - "min-rep-flag": "Минимальная репутация для простановки отметки сообщению", - "min-rep-website": "Минимальная репутация для добавления «Веб-сайта» в профиль пользователя", + "min-rep-flag": "Минимальная репутация для отправки жалобы на сообщение", + "min-rep-website": "Минимальная репутация, чтобы заполнить поле «Веб-сайт» в профиле пользователя", "min-rep-aboutme": "Минимальная репутация, чтобы добавить «Обо мне» в профиль пользователя", - "min-rep-signature": "Минимальная репутация для добавления «Подписи» в профиль пользователя", - "min-rep-profile-picture": "Минимальная репутация для добавления \"Картинка профиля\" к профилю участника", - "min-rep-cover-picture": "Минимальная репутация для добавления \"Обложка профиля\" к профилю участника" + "min-rep-signature": "Минимальная репутация, чтобы заполнить поле «Подпись» в профиле пользователя", + "min-rep-profile-picture": "Минимальная репутация для загрузки аватара пользователя", + "min-rep-cover-picture": "Минимальная репутация для загрузки обложки профиля пользователя" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/sockets.json b/public/language/ru/admin/settings/sockets.json index 7e2563045f..43e0bd1bbb 100644 --- a/public/language/ru/admin/settings/sockets.json +++ b/public/language/ru/admin/settings/sockets.json @@ -1,6 +1,6 @@ { "reconnection": "Настройки переподключения", - "max-attempts": "Максимально попыток переподключения", + "max-attempts": "Макс. попыток", "default-placeholder": "По умолчанию: %1", - "delay": "Задержка переподключения" + "delay": "Задержка" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/uploads.json b/public/language/ru/admin/settings/uploads.json index 8d46ff133d..0bf4a8126c 100644 --- a/public/language/ru/admin/settings/uploads.json +++ b/public/language/ru/admin/settings/uploads.json @@ -1,39 +1,39 @@ { - "posts": "Записи", - "allow-files": "Разрешить участникам загружать обычные файлы", - "private": "Делать загруженные файлы приватными", - "strip-exif-data": "Strip EXIF Data", - "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-quality": "Качество, которое следует использовать при изменении размера изображений", - "resize-image-quality-help": "Чем ниже качество, тем меньший размер файлов будут иметь изображения", - "max-file-size": "Максимальный размер файла (в кбайтах)", - "max-file-size-help": "(в килобайтах, по умолчанию: 2048 кбайт)", - "reject-image-width": "Максимальная ширина изображения (в пикселях)", - "reject-image-width-help": "Изображения шире указанного значения нельзя будет загрузить", - "reject-image-height": "Максимальная высота изображения (в пикселях)", - "reject-image-height-help": "Изображения с высотой больше указанного значения нельзя будет загрузить", - "allow-topic-thumbnails": "Разрешить участника загружать иконки тем", - "topic-thumb-size": "Размеры иконки темы", + "posts": "Сообщения", + "allow-files": "Разрешить пользователям загружать файлы", + "private": "Не показывать загрузки гостям", + "strip-exif-data": "Удалять метаданные EXIF", + "private-extensions": "Типы файлов, которые следует скрывать от гостей", + "private-uploads-extensions-help": "Укажите через запятую список расширений файлов, например pdf,xls,doc. Оставьте поле пустым, чтобы все загрузки были недоступны гостям.", + "resize-image-width-threshold": "Уменьшать изображения, когда ширина превышает", + "resize-image-width-threshold-help": "(в пикс., стандартная настройка: 1520, укажите 0, чтобы отключить)", + "resize-image-width": "Уменьшать изображения до", + "resize-image-width-help": "(в пикс., стандартная настройка: 760, укажите 0, чтобы отключить)", + "resize-image-quality": "Качество уменьшаемых изображений", + "resize-image-quality-help": "Чем ниже качество, тем меньше размер файла.", + "max-file-size": "Макс. размер файла (в КиБ)", + "max-file-size-help": "(в кибибайтах, по умолчанию: 2048 КиБ)", + "reject-image-width": "Макс. ширина изображения (в пикселях)", + "reject-image-width-help": "Загрузка изображений шире указанного значения будет отклонена.", + "reject-image-height": "Макс. высота изображения (в пикселях)", + "reject-image-height-help": "Загрузка изображений выше указанного значения будет отклонена.", + "allow-topic-thumbnails": "Разрешить пользователям загружать миниатюры для тем", + "topic-thumb-size": "Размер миниатюр", "allowed-file-extensions": "Допустимые расширения файлов", - "allowed-file-extensions-help": "Введите через запятую список расширений файлов, например pdf,xls,doc. Чтобы разрешить любые файлы — оставьте пустое значение.", - "profile-avatars": "Аватарки", - "allow-profile-image-uploads": "Разрешить участникам загружать аватарки", + "allowed-file-extensions-help": "Укажите через запятую список расширений файлов, например pdf,xls,doc. Оставьте поле пустым, чтобы разрешить любые загрузки.", + "profile-avatars": "Аватарки пользователей", + "allow-profile-image-uploads": "Разрешить пользователям загружать аватарки", "convert-profile-image-png": "Конвертировать загруженные изображения в PNG", - "default-avatar": "Аватарка по умолчанию", + "default-avatar": "Стандартная аватарка", "upload": "Загрузить", - "profile-image-dimension": "Разрешение аватарки", + "profile-image-dimension": "Размер аватарки", "profile-image-dimension-help": "(в пикселях, по умолчанию 128 пикселей)", - "max-profile-image-size": "Максимальный размер файла аватарки", - "max-profile-image-size-help": "(в килобайтах, по умолчанию 256 кбайт)", - "max-cover-image-size": "Максимальный размер файла обложки", - "max-cover-image-size-help": "(в килобайтах, по умолчанию 2048 кбайт)", - "keep-all-user-images": "Сохранять старые версии аватарок и обложек на сервере", + "max-profile-image-size": "Макс. размер файла аватарки", + "max-profile-image-size-help": "(в кибибайтах, по умолчанию 256 КиБ)", + "max-cover-image-size": "Макс. размер файла обложки", + "max-cover-image-size-help": "(в кибибайтах, по умолчанию: 2048 КиБ)", + "keep-all-user-images": "Сохранять на сервере прошлые версии аватарок и обложек", "profile-covers": "Обложки профиля", - "default-covers": "Обложки профиля по умолчанию", - "default-covers-help": "Добавить через запятую список обложек для учетных записей, которые сами не загрузили обложку" + "default-covers": "Стандартные обложки", + "default-covers-help": "Добавьте через запятую пути к изображениям, которые будут использованы, если пользователь не загрузил собственную обложку" } diff --git a/public/language/ru/admin/settings/user.json b/public/language/ru/admin/settings/user.json index d9a6f9cb28..6c4ca13439 100644 --- a/public/language/ru/admin/settings/user.json +++ b/public/language/ru/admin/settings/user.json @@ -1,79 +1,79 @@ { - "authentication": "Аутентификация", - "require-email-confirmation": "Запрашивать подтверждение по Email", - "email-confirm-interval": "Пользователь не может повторно отправить письмо с подтверждением до", - "email-confirm-email2": "минут прошло", - "allow-login-with": "Разрешить вход с", - "allow-login-with.username-email": "Имя пользователя или адрес электронной почты", - "allow-login-with.username": "Только имя пользователя", - "allow-login-with.email": "Только 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.", - "disable-username-changes": "Отключить изменение имени пользователя", - "disable-email-changes": "Отключить изменение email пользователя", - "disable-password-changes": "Отключить изменение пароля", - "allow-account-deletion": "Разрешить удаление аккаунта", - "hide-fullname": "Спрятать полные имена от пользователей", - "hide-email": "Спрятать email от пользователей", - "themes": "Темы", - "disable-user-skins": "Не давать пользователям выбирать сторонние цветовые схемы", - "account-protection": "Защита аккаунта", - "admin-relogin-duration": "Таймер повторного логина администратора (минут)", - "admin-relogin-duration-help": "После установки промежутка времени доступ в консоль администратора потребует повторный логин, установка 0 отменяет это.", - "login-attempts": "Попыток логина за час", - "login-attempts-help": "Если попытки логина 's превысят это значение, то аккаунт будет заблокирован на заранее установленный промежуток времени", - "lockout-duration": "Длительность блокировки аккаунта (минут)", - "login-days": "Дней помнить сессию залогиненного пользователя", - "password-expiry-days": "Заставить сбросить пароль через дней", - "session-time": "Session Time", - "session-time-days": "Days", - "session-time-seconds": "Seconds", + "authentication": "Авторизация", + "require-email-confirmation": "Необходим подтверждённый адрес электронной почты", + "email-confirm-interval": "Пользователь не сможет снова запросить код подтверждения, пока не пройдёт", + "email-confirm-email2": "минут", + "allow-login-with": "Разрешить вход с помощью", + "allow-login-with.username-email": "Имени пользователя или адреса электронной почты", + "allow-login-with.username": "Только имени пользователя", + "allow-login-with.email": "Только адреса электронной почты", + "account-settings": "Настройки учётной записи", + "gdpr_enabled": "Запрашивать согласие на сбор и обработку персональных данных", + "gdpr_enabled_help": "Включите, чтобы при регистрации новых пользователей запрашивать согласие на сбор и обработку данных в соответствии с законом о General Data Protection Regulation (GDPR). Примечание: эта настойка не повлияет на уже зарегистрированных пользователей. Чтобы запросить их согласие, установите плагин GDPR.", + "disable-username-changes": "Запретить смену имени пользователя", + "disable-email-changes": "Запретить смену адреса электронной почты", + "disable-password-changes": "Запретить смену пароля", + "allow-account-deletion": "Разрешить удалять учётную запись", + "hide-fullname": "Скрывать полное имя от других пользователей", + "hide-email": "Скрывать e-mail от других пользователей", + "themes": "Оформление", + "disable-user-skins": "Запретить пользователям выбирать стиль темы", + "account-protection": "Защита учётных записей", + "admin-relogin-duration": "Период неактивности (в минутах) до повторного входа в панель администратора", + "admin-relogin-duration-help": "Укажите продолжительность периода неактивности, после которого потребуется снова ввести логин и пароль администратора. Введите 0, чтобы отключить эту опцию", + "login-attempts": "Попыток входа в час", + "login-attempts-help": "Если это значение будет превышено, учётная запись пользователя будет заблокирована на указанный промежуток времени", + "lockout-duration": "Длительность блокировки (в минутах)", + "login-days": "На сколько дней сохранять сессию авторизованного пользователя", + "password-expiry-days": "Принудительно сбрасывать пароли через указанное кол-во дней", + "session-time": "Продолжительность сессии", + "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": "Через сколько минут пользователь будет считаться неактивным", "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", - "registration": "Регистрация пользователя", - "registration-type": "Тип Регистрации", - "registration-approval-type": "Registration Approval Type", + "registration": "Регистрация пользователей", + "registration-type": "Тип регистрации", + "registration-approval-type": "Тип подтверждения регистрации", "registration-type.normal": "Обычный", - "registration-type.admin-approval": "Подтверждение администратора", - "registration-type.admin-approval-ip": "Подтверждение администратора для IP-адресов", - "registration-type.invite-only": "Только приглашение", - "registration-type.admin-invite-only": "Только приглашение от администратора", - "registration-type.disabled": "Нет регистрации", - "registration-type.help": "Normal - Users can register from the /register page.
\nInvite Only - Users can invite others from the users page.
\nAdmin Invite Only - Only administrators can invite others from users and admin/manage/users pages.
\nNo registration - No user registration.
", - "registration-approval-type.help": "Normal - Users are registered immediately.
\nAdmin Approval - User registrations are placed in an approval queue for administrators.
\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.
", - "registration.max-invites": "Максимум приглашений для пользователя", - "max-invites": "Максимум приглашений для пользователя", - "max-invites-help": "0 - без ограничений. Администраторы могут приглашать бесконечно
Применимо только для \"Только по приглашениям\"", + "registration-type.admin-approval": "Подтверждается администратором", + "registration-type.admin-approval-ip": "Подтверждается администратором для известных IP-адресов", + "registration-type.invite-only": "Только по приглашениям", + "registration-type.admin-invite-only": "Только по приглашению администратора", + "registration-type.disabled": "Регистрация отключена", + "registration-type.help": "Обычный – пользователи могут регистрироваться без ограничений.
\nТолько по приглашениям – существующие пользователи могут приглашать других участников
\nТолько по приглашению администратора – только администратор может приглашать пользователей на странице Пользователи или в панели администратора.
\nРегистрация отключена – пользователи не могут регистрироваться.
", + "registration-approval-type.help": "Обычный – регистрация подтверждается автоматически.
\nПодтверждается администратором – заявки на регистрацию помещаются в очередь на одобрение.
\nПодтверждается администратором для известных IP-адресов – новые пользователи регистрируются как обычно, но если заявка поступает с такого же IP, как у существующего пользователя, требуется подтверждение администратора.
", + "registration.max-invites": "Макс. приглашений у пользователя", + "max-invites": "Макс. приглашений у пользователя", + "max-invites-help": "0 – без ограничений. Администраторы в любом случае могут приглашать бесконечно
Эта настройка действует только в режиме регистрации только по приглашениям.", "invite-expiration": "Срок действия приглашения", - "invite-expiration-help": "# дней срока действия приглашения.", + "invite-expiration-help": "Указывается в днях.", "min-username-length": "Минимальная длина имени пользователя", "max-username-length": "Максимальная длина имени пользователя", "min-password-length": "Минимальная длина пароля", "min-password-strength": "Минимальная сложность пароля", - "max-about-me-length": "Максимальная длина \"Обо мне\"", - "terms-of-use": "Условия Пользования форума (оставить пустым для отмены)", + "max-about-me-length": "Максимальная длина поля «Обо мне»", + "terms-of-use": "Правила использования форума (оставьте пустым, чтобы отключить)", "user-search": "Поиск пользователей", "user-search-results-per-page": "Количество отображаемых результатов", - "default-user-settings": "Настройки пользователя по умолчанию", - "show-email": "Показать email", - "show-fullname": "Показать полное имя", - "restrict-chat": "Чат только с теми на кого подписался", - "outgoing-new-tab": "Открывать внешние ссылки в новом окне", - "topic-search": "Включить поиск в топике", + "default-user-settings": "Стандартные настройки профиля пользователя", + "show-email": "Показывать адрес электронной почты", + "show-fullname": "Показывать полное имя", + "restrict-chat": "Разрешить чат только с теми, на кого подписаны", + "outgoing-new-tab": "Открывать внешние ссылки в новой вкладке", + "topic-search": "Включить поиск по сообщениям внутри тем", "digest-freq": "Подписка на дайджест", - "digest-freq.off": "Выкл", - "digest-freq.daily": "Ежедневно", - "digest-freq.weekly": "Еженедельно", - "digest-freq.monthly": "Ежемесячно", - "email-chat-notifs": "Отправлять уведомления по электронной почте при поступлении нового сообщения чата", - "email-post-notif": "Отправлять уведомления по электронной почте при появлении новых ответов в подписанных темах", - "follow-created-topics": "Следить за темами которые вы создаёте", - "follow-replied-topics": "Следить за темами в которых вы отвечаете", - "default-notification-settings": "Настройки уведомлений по умолчанию", - "categoryWatchState": "Default category watch state", - "categoryWatchState.watching": "Watching", - "categoryWatchState.notwatching": "Not Watching", - "categoryWatchState.ignoring": "Ignoring" + "digest-freq.off": "Отключена", + "digest-freq.daily": "Ежедневная", + "digest-freq.weekly": "Еженедельная", + "digest-freq.monthly": "Ежемесячная", + "email-chat-notifs": "Уведомить по электронной почте, если пришло новое сообщение в чат, а я не в сети", + "email-post-notif": "Уведомить по электронной почте, если в отслеживаемой теме появилось новое сообщение", + "follow-created-topics": "Включать отслеживание всех тем, которые вы создаёте", + "follow-replied-topics": "Включать отслеживание во всех темах, в которых вы отвечаете", + "default-notification-settings": "Стандартные настройки уведомлений", + "categoryWatchState": "Стандартные настройки отслеживания категорий", + "categoryWatchState.watching": "Отслеживается", + "categoryWatchState.notwatching": "Не отслеживается", + "categoryWatchState.ignoring": "Игнорируется" } \ No newline at end of file diff --git a/public/language/ru/admin/settings/web-crawler.json b/public/language/ru/admin/settings/web-crawler.json index a9b8769ff1..2edbd1da0f 100644 --- a/public/language/ru/admin/settings/web-crawler.json +++ b/public/language/ru/admin/settings/web-crawler.json @@ -1,10 +1,10 @@ { - "crawlability-settings": "Настройки сканирования", - "robots-txt": "Свой Robots.txt Оставьте пустым для значений по умолчанию", - "sitemap-feed-settings": "Карта сайта & настройки ленты активности", - "disable-rss-feeds": "Отключить RSS ленты активности", + "crawlability-settings": "Настройка индексирования", + "robots-txt": "Пользовательский robots.txt Оставьте поле пустым, чтобы использовать стандартный", + "sitemap-feed-settings": "Карта сайта и RSS", + "disable-rss-feeds": "Отключить RSS", "disable-sitemap-xml": "Отключить Sitemap.xml", - "sitemap-topics": "Количество тем для отображения в файле Sitemap", - "clear-sitemap-cache": "Очистить кеш sitemap", + "sitemap-topics": "Сколько тем указывать в карте сайта", + "clear-sitemap-cache": "Очистить кеш карты сайта", "view-sitemap": "Посмотреть карту сайта" } \ No newline at end of file diff --git a/public/language/ru/category.json b/public/language/ru/category.json index c4fb0c561d..fbd551fd69 100644 --- a/public/language/ru/category.json +++ b/public/language/ru/category.json @@ -2,21 +2,21 @@ "category": "Категория", "subcategories": "Подкатегории", "new_topic_button": "Создать тему", - "guest-login-post": "Войдите под своей учётной записью, чтобы написать ответ", + "guest-login-post": "Авторизуйтесь, чтобы написать сообщение", "no_topics": "В этой категории еще нет тем.
Почему бы вам не создать первую?", "browsing": "просматривают", "no_replies": "Нет ответов", - "no_new_posts": "Нет новых записей", - "watch": "Следить", + "no_new_posts": "Нет новых сообщений", + "watch": "Отслеживать", "ignore": "Игнорировать", - "watching": "Отслеживать", - "not-watching": "Перестать отслеживать", - "ignoring": "Игнорировать", - "watching.description": "Показать непрочитанные и недавние темы", - "not-watching.description": "Не показывать непрочитанные темы, показывать последние", - "ignoring.description": " Не показывать непрочитанные и последние темы", - "watching.message": "Вы сейчас просматриваете обновления из этой категории и всех подкатегорий", + "watching": "Отслеживается", + "not-watching": "Не отслеживается", + "ignoring": "Игнорируется", + "watching.description": "Показывать темы из этой категории в списках непрочитанных и недавних", + "not-watching.description": "Не показывать темы из этой категории в непрочитанных, но оставить в списке недавних", + "ignoring.description": "Не показывать темы из этой категории ни в списке непрочитанных, ни в недавних", + "watching.message": "Вы отслеживаете обновления этой категории, включая все подкатегории", "notwatching.message": "You are not watching updates from this category and all subcategories", "ignoring.message": "You are now ignoring updates from this category and all subcategories", - "watched-categories": "Ваши сообщества" + "watched-categories": "Отслеживаемые категории" } \ No newline at end of file diff --git a/public/language/ru/email.json b/public/language/ru/email.json index e9c01f424c..9f333c4064 100644 --- a/public/language/ru/email.json +++ b/public/language/ru/email.json @@ -1,52 +1,52 @@ { - "test-email.subject": "Test Email", - "password-reset-requested": "Password Reset Requested!", - "welcome-to": "Добро пожаловать на сайт %1", + "test-email.subject": "Проверочное письмо", + "password-reset-requested": "Получен запрос на сброс пароля!", + "welcome-to": "Добро пожаловать на форум %1", "invite": "Приглашение от %1", "greeting_no_name": "Здравствуйте!", "greeting_with_name": "Здравствуйте, %1!", - "email.verify-your-email.subject": "Пожалуйста проверьте свой email", - "email.verify.text1": "Ваш email адрес был изменен!", - "welcome.text1": "Благодарим за регистрацию на сайте %1!", - "welcome.text2": "Для активации вашей учётной записи необходимо подтвердить адрес электронной почты.", - "welcome.text3": "Администратор подтвердил вашу регистрацию. Теперь вы можете авторизоваться на сайте.", - "welcome.cta": "Перейдите по ссылке для подтверждения вашей электронной почты", - "invitation.text1": "%1 пригласил вас на сайт %2", - "invitation.text2": "Ваше приглашение завершится в течении %1 дней.", - "invitation.cta": "Click here to create your account.", - "reset.text1": "Кто-то отправил запрос на сброс пароля на нашем сайте. Если вы не подавали запрос, пожалуйста, проигнорируйте это сообщение.", - "reset.text2": "Для продолжения процедуры изменения пароля перейдите по ссылке:", - "reset.cta": "Нажмите здесь для изменения пароля", + "email.verify-your-email.subject": "Пожалуйста, подтвердите свой адрес электронной почты", + "email.verify.text1": "Ваш адрес электронной почты был изменён!", + "welcome.text1": "Благодарим за регистрацию на форуме %1!", + "welcome.text2": "Чтобы активировать учётную запись, необходимо подтвердить ваш адрес электронной почты.", + "welcome.text3": "Администратор подтвердил вашу регистрацию. Теперь вы можете использовать вашу учётную запись.", + "welcome.cta": "Нажмите здесь, чтобы подтвердить e-mail", + "invitation.text1": "%1 приглашает вас на форум %2", + "invitation.text2": "Срок действия вашего приглашения истечёт через %1 дней.", + "invitation.cta": "Нажмите здесь, чтобы создать учётную запись.", + "reset.text1": "Мы получили запрос на сброс вашего пароля. Если вы его на самом деле не отправляли, то просто не обращайте внимания на это письмо.", + "reset.text2": "Чтобы сбросить пароль, перейдите по этой ссылке:", + "reset.cta": "Нажмите здесь, чтобы сбросить пароль", "reset.notify.subject": "Пароль был успешно изменён", "reset.notify.text1": "Мы уведомляем вас о том, что %1 ваш пароль был успешно изменён.", "reset.notify.text2": "Если вы не совершали этого действия, пожалуйста, незамедлительно свяжитесь с администратором сайта.", - "digest.latest_topics": "Последние темы %1", - "digest.cta": "Нажмите здесь для просмотра %1", - "digest.unsub.info": "Вам были отправлены новости сайта в соответствии с вашими настройками.", + "digest.latest_topics": "Последние темы на форуме %1", + "digest.cta": "Нажмите здесь, чтобы перейти на форум %1", + "digest.unsub.info": "Вы получили эту рассылку согласно вашим настройкам подписки.", "digest.day": "день", "digest.week": "неделя", "digest.month": "месяц", - "digest.subject": "Новости для %1", - "digest.title.day": "Your Daily Digest", - "digest.title.week": "Your Weekly Digest", - "digest.title.month": "Your Monthly Digest", + "digest.subject": "Новостная рассылка за %1", + "digest.title.day": "Ваша ежедневная рассылка", + "digest.title.week": "Ваша еженедельная рассылка", + "digest.title.month": "Ваша ежемесячная рассылка", "notif.chat.subject": "Новое сообщение от %1", "notif.chat.cta": "Нажмите, чтобы ответить", - "notif.chat.unsub.info": "Вы получили это уведомление в соответствии с настройками своей подписки на новости сайта.", + "notif.chat.unsub.info": "Вы получили это уведомление согласно вашим настройкам подписки.", "notif.post.unsub.info": "Вы получили это уведомление согласно вашим настройкам подписки.", - "notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking", - "notif.cta": "To the forum", - "notif.cta-new-reply": "View Post", - "notif.cta-new-chat": "View Chat", - "notif.test.short": "Testing Notifications", - "notif.test.long": "This is a test of the notifications email. Send help!", - "test.text1": "Это тестовое сообщение для проверки почтового сервиса.", - "unsub.cta": "Изменить настройки", - "unsubscribe": "unsubscribe", - "unsub.success": "You will no longer receive emails from the %1 mailing list", - "banned.subject": "Вы были заблокированы в %1.", - "banned.text1": "Участник %1 заблокирован в %2.", - "banned.text2": "Эта блокировка продлится до %1.", - "banned.text3": "Это причина, почему вы были заблокированны.", + "notif.post.unsub.one-click": "Вы можете отписаться от подобных уведомлений по этой ссылке:", + "notif.cta": "Перейти на форум", + "notif.cta-new-reply": "Открыть сообщение", + "notif.cta-new-chat": "Открыть чат", + "notif.test.short": "Проверка рассылки уведомлений", + "notif.test.long": "Это проверка уведомлений по электронной почте. Высылайте подмогу!", + "test.text1": "Это проверочное сообщение: отправка электронной почты в NodeBB настроена правильно.", + "unsub.cta": "Нажмите, чтобы изменить настройки", + "unsubscribe": "отписаться", + "unsub.success": "Вы больше не будете получать рассылку от %1", + "banned.subject": "Вы были заблокированы на форуме %1.", + "banned.text1": "Пользователь %1 был заблокирован на форуме %2.", + "banned.text2": "Блокировка продлится до %1.", + "banned.text3": "Причина вашей блокировки:", "closing": "Спасибо!" } \ No newline at end of file diff --git a/public/language/ru/error.json b/public/language/ru/error.json index 13ada3fcc0..8e9fb5e554 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -5,30 +5,30 @@ "account-locked": "Учётная запись временно заблокирована", "search-requires-login": "Поиск доступен только для зарегистрированных участников. Пожалуйста, войдите или зарегистрируйтесь.", "goback": "Нажмите \"назад\", чтобы вернуться на предыдущую страницу", - "invalid-cid": "Неверный идентификатор сообщества", - "invalid-tid": "Неверный идентификатор темы", - "invalid-pid": "Неверный идентификатор сообщения", - "invalid-uid": "Неверный идентификатор пользователя", - "invalid-username": "Неверное имя пользователя", - "invalid-email": "Неверный адрес электронной почты", - "invalid-fullname": "Invalid Fullname", + "invalid-cid": "Неправильный ID категории", + "invalid-tid": "Неправильный ID темы", + "invalid-pid": "Неправильный ID сообщения", + "invalid-uid": "Неправильный ID пользователя", + "invalid-username": "Неправильное имя пользователя", + "invalid-email": "Неправильный адрес электронной почты", + "invalid-fullname": "Некорректное полное имя", "invalid-location": "Invalid Location", - "invalid-birthday": "Invalid Birthday", + "invalid-birthday": "Некорректная дата рождения", "invalid-title": "Некорректный заголовок", - "invalid-user-data": "Неверные пользовательские данные", - "invalid-password": "Неверный пароль", - "invalid-login-credentials": "Неверные логин или пароль", + "invalid-user-data": "Некорректные пользовательские данные", + "invalid-password": "Неправильный пароль", + "invalid-login-credentials": "Неправильный логин или пароль", "invalid-username-or-password": "Пожалуйста, укажите имя пользователя и пароль", - "invalid-search-term": "Неверный поисковой запрос", + "invalid-search-term": "Некорректный поисковый запрос", "invalid-url": "Некорректный URL", "local-login-disabled": "Локальная система входа отключена для не-привилегированных учетных записей.", "csrf-invalid": "Нам не удалось вас найти из-за просроченной сессии. Попробуйте ещё раз.", - "invalid-pagination-value": "Неверно указан номер страницы. Значение должно быть в диапазоне от %1 до %2", - "username-taken": "Участник с таким именем пользователя уже зарегистрирован. Пожалуйста, выберите другое имя пользователя.", - "email-taken": "Участник с этой электронной почтой уже зарегистрирован. Если вы забыли свой пароль, отправьте запрос на восстановление пароля.", - "email-not-confirmed": "Ваша электронная почта не подтверждена, нажмите для подтверждения.", + "invalid-pagination-value": "Неправильно указан номер страницы. Значение должно быть в диапазоне от %1 до %2", + "username-taken": "Это имя пользователя уже занято", + "email-taken": "Пользователь с таким адресом электронной почты уже зарегистрирован", + "email-not-confirmed": "Вы не сможете отправлять сообщения, пока ваш адрес электронной почты не подтверждён. Пожалуйста, нажмите здесь, чтобы подтвердить его.", "email-not-confirmed-chat": "Вы не можете оставлять сообщения, пока ваша электронная почта не подтверждена. Отправить письмо с кодом подтверждения повторно.", - "email-not-confirmed-email-sent": "Ваш адрес электронной почты ещё не подтвержден. Вам было отправлено письмо с кодом подтверждения, пожалуйста, проверьте ваш почтовый ящик и подтвердите регистрацию.", + "email-not-confirmed-email-sent": "Ваш адрес электронной почты ещё не подтверждён. Пожалуйста, проверьте ваш почтовый ящик и пройдите по ссылке в письме с кодом подтверждения. Пока ваш e-mail не подтверждён, вы не можете пользоваться чатом или публиковать сообщения.", "no-email-to-confirm": "Этот сайт требует подтверждения по электронной почте. Нажмите здесь для ввода адреса электронной почты.", "email-confirm-failed": "По техническим причинам мы не можем подтвердить ваш адрес электронной почты. Приносим вам наши извинения, пожалуйста, попробуйте позже.", "confirm-email-already-sent": "Сообщение для подтверждения регистрации уже выслано на ваш адрес электронной почты. Повторная отправка возможна через %1 мин.", @@ -38,42 +38,42 @@ "username-too-long": "Имя пользователя слишком длинное", "password-too-long": "Пароль слишком длинный", "reset-rate-limited": "Too many password reset requests (rate limited)", - "user-banned": "Участник заблокирован", + "user-banned": "Пользователь заблокирован", "user-banned-reason": "Учетная запись заблокирована (Причина: %1)", - "user-banned-reason-until": "Извините, этот аккаунт забанен до %1 (Причина: %2)", - "user-too-new": "Вы можете написать своё первое сообщение через %1 сек.", - "blacklisted-ip": "Извините, ваш IP адрес был забанен этим сообществом. Если вы считаете, что это ошибка, пожалуйста, свяжитесь с администратором.", + "user-banned-reason-until": "Извините, эта учётная запись заблокирована до %1 (Причина: %2)", + "user-too-new": "Вы сможете написать своё первое сообщение через %1 сек.", + "blacklisted-ip": "Извините, ваш IP адрес был заблокирован этим сообществом. Если вы считаете, что это ошибка, пожалуйста, свяжитесь с администратором.", "ban-expiry-missing": "Пожалуйста, укажите дату окончания этой блокировки", - "no-category": "Такого сообщества не существует", + "no-category": "Такой категории не существует", "no-topic": "Такой темы не существует", - "no-post": "Такой записи не существует", + "no-post": "Такого сообщения не существует", "no-group": "Такой группы не существует", - "no-user": "Такого участника не существует", + "no-user": "Такого пользователя не существует", "no-teaser": "Такого тизера не существует", "no-privileges": "У вас недостаточно прав для этого действия.", - "category-disabled": "Сообщество отключено", + "category-disabled": "Категория отключена", "topic-locked": "Тема закрыта", - "post-edit-duration-expired": "Записи можно редактировать только в течение %1 сек. после публикации", - "post-edit-duration-expired-minutes": "Вы можете редактировать запись только в течение %1 мин. после публикации.", - "post-edit-duration-expired-minutes-seconds": "Вы можете редактировать запись в течение %1 мин. %2 сек. после публикации.", - "post-edit-duration-expired-hours": "Вы можете редактировать запись в течение %1 ч. после публикации.", - "post-edit-duration-expired-hours-minutes": "Вы можете редактировать запись в течение %1 ч. %2 мин. после публикации.", - "post-edit-duration-expired-days": "Вы можете редактировать запись в течение %1 дн. после публикации.", - "post-edit-duration-expired-days-hours": "Вы можете редактировать запись в течение %1 дн. и %2 ч. после публикации.", - "post-delete-duration-expired": "Записи можно удалять только через %1 сек. после публикации", - "post-delete-duration-expired-minutes": "Запись можно удалить только через %1 мин. после публикации", - "post-delete-duration-expired-minutes-seconds": "Запись можно удалить только через %1 мин. 2% сек. после публикации", - "post-delete-duration-expired-hours": "Запись можно удалить только через %1 ч. после публикации", - "post-delete-duration-expired-hours-minutes": "Запись можно удалить только через %1 ч. 2% мин. после публикации", - "post-delete-duration-expired-days": "Запись можно удалить только через %1 дн. после публикации", - "post-delete-duration-expired-days-hours": "Запись можно удалить только через %1 дн. 2% ч. после публикации", + "post-edit-duration-expired": "Сообщения можно редактировать только в течение %1 с после публикации", + "post-edit-duration-expired-minutes": "Сообщения можно редактировать только в течение %1 мин после публикации.", + "post-edit-duration-expired-minutes-seconds": "Сообщения можно редактировать только в течение %1 мин %2 с после публикации.", + "post-edit-duration-expired-hours": "Сообщения можно редактировать в течение %1 ч после публикации.", + "post-edit-duration-expired-hours-minutes": "Сообщения можно редактировать в течение %1 ч %2 мин после публикации.", + "post-edit-duration-expired-days": "Сообщения можно редактировать в течение %1 дн. после публикации.", + "post-edit-duration-expired-days-hours": "Сообщения можно редактировать в течение %1 дн. и %2 ч после публикации.", + "post-delete-duration-expired": "Сообщение можно удалить только в течение %1 с после публикации.", + "post-delete-duration-expired-minutes": "Сообщение можно удалить только в течение %1 мин после публикации.", + "post-delete-duration-expired-minutes-seconds": "Сообщение можно удалить только в течение %1 мин %2 с после публикации.", + "post-delete-duration-expired-hours": "Сообщение можно удалить в течение %1 ч после публикации.", + "post-delete-duration-expired-hours-minutes": "Сообщение можно удалить в течение %1 ч %2 мин после публикации.", + "post-delete-duration-expired-days": "Сообщение можно удалить в течение %1 дн. после публикации.", + "post-delete-duration-expired-days-hours": "Сообщение можно удалить в течение %1 дн. %2 ч после публикации.", "cant-delete-topic-has-reply": "Нельзя удалить тему после того, как в ней появились ответы", "cant-delete-topic-has-replies": "Нельзя удалить свою тему после того, как в ней появились ответы (%1 шт.)", "content-too-short": "Слишком короткое сообщение. Пожалуйста, напишите подробнее (минимум %1 символов).", "content-too-long": "Слишком длинное сообщение. Пожалуйста, сократите ваше сообщение до %1 символов.", "title-too-short": "Слишком короткий заголовок. Пожалуйста, напишите подробнее (минимум %1 символов).", "title-too-long": "Слишком длинный заголовок. Пожалуйста, сократите заголовок до %1 символов.", - "category-not-selected": "Сообщество не выбрано", + "category-not-selected": "Категория не выбрана", "too-many-posts": "Для того, чтобы разместить новое сообщение, нужно подождать %1 сек.", "too-many-posts-newbie": "Для того, чтобы разместить новое сообщение, нужно подождать %1 сек. Это время уменьшится, как только ваша репутация вырастет до %2.", "tag-too-short": "Слишком короткая метка. Минимум %1 символов.", @@ -83,12 +83,12 @@ "still-uploading": "Пожалуйста, подождите завершения загрузки.", "file-too-big": "Слишком большой файл. Максимальный размер: %1 Кбайт.", "guest-upload-disabled": "Загрузка файлов для гостей отключена. Чтобы загрузить файл, пожалуйста, войдите или зарегистрируйтесь на сайте.", - "cors-error": "Невозможно загрузить изображение из-за неверного CORS", - "already-bookmarked": "Эта запись уже есть в закладках", - "already-unbookmarked": "Эта запись уже удалена из закладок", - "cant-ban-other-admins": "Вы не можете забанить других администраторов", - "cant-remove-last-admin": "Вы единственный администратор в этом сообществе. Чтобы отказаться от своих полномочий, пожалуйста, назначьте администратором другого участника.", - "cant-delete-admin": "Чтобы удалить эту учётную запись, сначала надо снять с неё полнмочия администратора.", + "cors-error": "Невозможно загрузить изображение из-за некорректного CORS", + "already-bookmarked": "Вы уже добавили это сообщение в закладки", + "already-unbookmarked": "Вы уже удалили это сообщение из закладок", + "cant-ban-other-admins": "Вы не можете заблокировать других администраторов!", + "cant-remove-last-admin": "Вы единственный администратор. Чтобы отказаться от своих полномочий, пожалуйста, назначьте администратором другого участника.", + "cant-delete-admin": "Чтобы удалить эту учётную запись, сначала надо снять с неё полномочия администратора.", "invalid-image": "Некорректное изображение", "invalid-image-type": "Этот формат изображения не поддерживается. Загрузите изображение в одном из следующих форматов: %1", "invalid-image-extension": "Недопустимое расширение файла", @@ -103,43 +103,43 @@ "group-needs-owner": "У группы должен быть как минимум один владелец", "group-already-invited": "Этот участник уже был приглашён в группу", "group-already-requested": "Запрос на вступление в группу уже отправлен", - "group-join-disabled": "You are not able to join this group at this time", - "group-leave-disabled": "You are not able to leave this group at this time", + "group-join-disabled": "Сейчас вы не можете присоединиться к этой группе", + "group-leave-disabled": "Сейчас вы не можете покинуть эту группу", "post-already-deleted": "Это сообщение уже удалено", "post-already-restored": "Это сообщение уже восстановлено", "topic-already-deleted": "Тема уже удалена", "topic-already-restored": "Тема уже восстановлена", - "cant-purge-main-post": "Для удаления этой записи необходимо удалить тему", - "topic-thumbnails-are-disabled": "Иконки для темы отключены", - "invalid-file": "Неверный файл", + "cant-purge-main-post": "Вы не можете стереть первое сообщение в теме. Пожалуйста, удалите саму тему.", + "topic-thumbnails-are-disabled": "Иконки тем отключены.", + "invalid-file": "Некорректный файл", "uploads-are-disabled": "Загрузка отключена", - "signature-too-long": "Ваша подпись может быть в пределах %1 символов.", + "signature-too-long": "Ваша подпись не может быть длиннее %1 символов.", "about-me-too-long": "Пожалуйста, постарайтесь уложиться в поле \"О себе\" в %1 символов.", - "cant-chat-with-yourself": "Вы не можете отправить сообщение себе", + "cant-chat-with-yourself": "Вы не можете создать чат с самим собой!", "chat-restricted": "Пользователь ограничил приём сообщений. Чтобы написать ему личное сообщение, необходимо, чтобы он был подписан на вас.", "chat-disabled": "Чат выключен", - "too-many-messages": "Для отправки нового сообщения необходимо подождать, т.к. вы отправили слишком много сообщений подряд.", - "invalid-chat-message": "Ошибка в сообщении", - "chat-message-too-long": "Сообщения чата не могут быть больше чем %1 символов", - "cant-edit-chat-message": "К сожалению, у вас нет доступа для редактирования этого сообщения", + "too-many-messages": "Вы отправили слишком много сообщений, подождите немного.", + "invalid-chat-message": "Некорректное сообщение чата", + "chat-message-too-long": "Сообщения чата не могут быть длиннее %1 символов", + "cant-edit-chat-message": "У вас нет прав доступа, чтобы отредактировать это сообщение", "cant-remove-last-user": "Удалить последнего участника невозможно.", - "cant-delete-chat-message": "К сожалению, у вас нет доступа для удаления этого сообщения", + "cant-delete-chat-message": "У вас нет прав доступа, чтобы удалить это сообщение", "chat-edit-duration-expired": "Вам разрешено редактировать сообщения чата за %1 секунд после публикации", "chat-delete-duration-expired": "Вам разрешено удалять сообщения чата за% 1 секунду после публикации", "chat-deleted-already": "Это сообщение чата уже удалено.", - "chat-restored-already": "This chat message has already been restored.", - "already-voting-for-this-post": "Спасибо, вы уже проголосовали за это сообщение.", + "chat-restored-already": "Это сообщение чата уже было восстановлено.", + "already-voting-for-this-post": "Вы уже проголосовали за это сообщение.", "reputation-system-disabled": "Система репутации отключена.", - "downvoting-disabled": "Понижение оценки отключено", - "not-enough-reputation-to-downvote": "У вас недостаточно репутации для понижения оценки сообщения", - "not-enough-reputation-to-flag": "У Вас недостаточно репутации, чтобы пометить это сообщение.", + "downvoting-disabled": "Понижение рейтинга отключено", + "not-enough-reputation-to-downvote": "У вас недостаточно репутации для понижения рейтинга сообщения", + "not-enough-reputation-to-flag": "У вас недостаточно репутации, чтобы пожаловаться на это сообщение.", "not-enough-reputation-min-rep-website": "У вас недостаточно репутации, чтобы добавить сайт", "not-enough-reputation-min-rep-aboutme": "У вас недостаточно репутации, чтобы добавить \"обо мне\"", "not-enough-reputation-min-rep-signature": "У вас недостаточно репутации, чтобы добавить подпись", "not-enough-reputation-min-rep-profile-picture": "У вас недостаточно репутации, чтобы добавить аватарку профиля", "not-enough-reputation-min-rep-cover-picture": "У вас недостаточно репутации, чтобы добавить обложку профиля", - "already-flagged": "Вы уже отметили это сообщение", - "self-vote": "Вы не можете голосовать за свои посты", + "already-flagged": "Вы уже пожаловались на это сообщение", + "self-vote": "Вы не можете голосовать за свои собственные сообщения", "reload-failed": "NodeBB обнаружил проблему при перезагрузке: \"%1\". NodeBB продолжит работать с существующими ресурсами клиента, но вы должны отменить то, что сделали перед перезагрузкой.", "registration-error": "Ошибка при регистрации", "parse-error": "Похоже, что-то пошло не так в процессе обработки ответа сервера.", @@ -159,8 +159,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": "Кажется, что проблема с вашим подключением к Интернету" + "cannot-block-guest": "Гости не могут блокировать пользователей", + "already-blocked": "Этот пользователь уже заблокирован", + "already-unblocked": "Этот пользователь уже разблокирован", + "no-connection": "Похоже, есть проблема с вашим подключением к Интернету" } \ No newline at end of file diff --git a/public/language/ru/flags.json b/public/language/ru/flags.json index 5daf1aa285..ea17520ade 100644 --- a/public/language/ru/flags.json +++ b/public/language/ru/flags.json @@ -1,27 +1,27 @@ { "state": "Состояние", - "reporter": "Осведомитель", - "reported-at": "Оповещено", + "reporter": "Кто сообщил", + "reported-at": "Когда сообщили", "description": "Описание", - "no-flags": "Упс! Меток не найдено", - "assignee": "Представитель", + "no-flags": "Ура! Жалоб нет.", + "assignee": "Исполнитель", "update": "Обновить", "updated": "Обновлено", - "target-purged": "Содержимое указанной метки было очищено и больше не доступно.", + "target-purged": "Сообщение, на которое поступила жалоба, было удалено и больше не доступно.", - "graph-label": "Daily Flags", + "graph-label": "Жалоб в день", "quick-filters": "Быстрые фильтры", - "filter-active": "В этом списке меток есть один или несколько фильтров", + "filter-active": "К списку жалоб применяется один или несколько фильтров", "filter-reset": "Убрать фильтры", "filters": "Опции фильтра", - "filter-reporterId": "UID осведомителя", - "filter-targetUid": "Отмечено UID", - "filter-type": "Тип метки", + "filter-reporterId": "UID сообщившего", + "filter-targetUid": "UID нарушителя", + "filter-type": "Тип жалобы", "filter-type-all": "Весь контент", "filter-type-post": "Сообщение", "filter-type-user": "Пользователь", "filter-state": "Состояние", - "filter-assignee": "UID представителя", + "filter-assignee": "UID исполнителя", "filter-cid": "Категория", "filter-quick-mine": "Назначено мне", "filter-cid-all": "Все категории", @@ -31,36 +31,36 @@ "flagged-user": "Отмеченный пользователь", "view-profile": "Просмотреть профиль", "start-new-chat": "Начать новый чат", - "go-to-target": "Посмотреть метку цели", + "go-to-target": "Показать предмет жалобы", - "user-view": "Просмотреть профиль", + "user-view": "Открыть профиль", "user-edit": "Изменить профиль", - "notes": "Тип заметки", + "notes": "Примечания к жалобе", "add-note": "Добавить примечание", - "no-notes": "Нет общих заметок.", + "no-notes": "Нет примечаний.", - "history": "История меток", - "back": "Вернуться к списку меток", - "no-history": "Нет истории меток.", + "history": "История жалобы", + "back": "Вернуться к списку жалоб", + "no-history": "Нет истории жалобы.", "state-all": "Все состояния", - "state-open": "Новый/Открытый", - "state-wip": "Работа в процессе", - "state-resolved": "Решен", - "state-rejected": "Отклонен", - "no-assignee": "Не назначенный ", - "note-added": "Заметка добавлена", + "state-open": "Новая/Открытая", + "state-wip": "В процессе", + "state-resolved": "Решена", + "state-rejected": "Отклонена", + "no-assignee": "Не назначена", + "note-added": "Примечание добавлено", "modal-title": "Сообщить о недопустимом контенте", - "modal-body": "Просьба указать причину для пометки %1 %2 для проверки. Кроме того, используйте одну из кнопок быстрого отчета, если это применимо.", + "modal-body": "Укажите причину для жалобы на %1 %2. Вы можете использовать одну из подходящих стандартных причин.", "modal-reason-spam": "Спам", - "modal-reason-offensive": "Оскорбительный", + "modal-reason-offensive": "Оскорбительное содержимое", "modal-reason-other": "Другое (укажите ниже)", "modal-reason-custom": "Причина жалобы на содержимое...", - "modal-submit": "Представить отчет", - "modal-submit-success": "Содержимое было отмечено для модерации.", + "modal-submit": "Отправить отчёт", + "modal-submit-success": "Содержимое было помечено для модераторов.", "modal-submit-confirm": "Подтвердить отправку", - "modal-submit-confirm-text": "Вы уже выбрали причину. Вы уверены, что хотите отправить через быстрый отчет?", - "modal-submit-confirm-text-help": "Отправка быстрого отчета приведет к перезаписи любых предустановленных примеров причин." + "modal-submit-confirm-text": "Вы уже выбрали причину. Вы уверены, что хотите отправить жалобу через быстрый отчёт?", + "modal-submit-confirm-text-help": "Отправка быстрого отчёта перезапишет указанную ранее причину." } \ No newline at end of file diff --git a/public/language/ru/global.json b/public/language/ru/global.json index e665c32ef6..947f0a3dd5 100644 --- a/public/language/ru/global.json +++ b/public/language/ru/global.json @@ -3,14 +3,14 @@ "search": "Поиск", "buttons.close": "Закрыть", "403.title": "Доступ запрещен", - "403.message": "Вы пытаетесь перейти на страницу, к которой у вас нет прав доступа.", + "403.message": "Вы пытаетесь перейти на страницу, к которой у вас нет доступа.", "403.login": "Возможно вам следует войти под своей учётной записью?", "404.title": "Страница не найдена", "404.message": "Вы пытаетесь перейти на страницу, которой не существует. Начните с главной страницы.", "500.title": "Внутренняя ошибка.", "500.message": "Упс! Похоже, что-то пошло не так!", "400.title": "Неверный запрос.", - "400.message": "Похоже, эта ссылка имеет неправильный формат, пожалуйста, проверьте и повторите попытку. Либо вернитесь на <а href='%1/'>главную страницу.", + "400.message": "Похоже, эта ссылка имеет неправильный формат. Пожалуйста, проверьте её и повторите попытку или вернитесь на главную страницу.", "register": "Зарегистрироваться", "login": "Войти", "please_log_in": "Пожалуйста, войдите под своей учётной записью", @@ -23,14 +23,14 @@ "close": "Закрыть", "pagination": "Разбивка на страницы", "pagination.out_of": "%1 из %2", - "pagination.enter_index": "Перейти на главную", + "pagination.enter_index": "Перейти на...", "header.admin": "Админка", - "header.categories": "Сообщества", + "header.categories": "Категории", "header.recent": "Последние", - "header.unread": "Непрочитанное", + "header.unread": "Непрочитанные", "header.tags": "Метки", "header.popular": "Популярные", - "header.users": "Участники", + "header.users": "Пользователи", "header.groups": "Группы", "header.chats": "Чаты", "header.notifications": "Уведомления", @@ -45,13 +45,13 @@ "alert.success": "Успешно", "alert.error": "Ошибка", "alert.banned": "Заблокирован", - "alert.banned.message": "Вас только что забанили, ваша сессия завершена.", - "alert.unfollow": "Вы отказались от подписки на %1!", - "alert.follow": "Вы теперь подписаны на %1!", - "users": "Участники", + "alert.banned.message": "Вас только что заблокировали, ваша сессия будет завершена.", + "alert.unfollow": "Вы больше не подписаны на %1!", + "alert.follow": "Вы подписались на %1!", + "users": "Пользователи", "topics": "Темы", - "posts": "Записи", - "best": "Лучшие", + "posts": "Сообщения", + "best": "Лучшие сообщения", "votes": "Голоса", "upvoters": "Кому понравилось", "upvoted": "Понравилось", @@ -59,8 +59,8 @@ "downvoted": "Не понравилось", "views": "Просмотры", "reputation": "Репутация", - "lastpost": "Last post", - "firstpost": "First post", + "lastpost": "Последнее сообщение", + "firstpost": "Первое сообщение", "read_more": "Читать далее", "more": "Подробнее", "posted_ago_by_guest": "создано %1 гостем", @@ -75,13 +75,13 @@ "last_edited_by": "отредактировано %1", "norecentposts": "Нет новых сообщений", "norecenttopics": "Нет новых тем", - "recentposts": "Свежие записи", + "recentposts": "Последние сообщения", "recentips": "Последние IP-адреса, с которых был осуществлен вход", "moderator_tools": "Инструменты модератора", "online": "В сети", - "away": "Отсутствую", + "away": "Не активен", "dnd": "Не беспокоить", - "invisible": "Невидимый режим", + "invisible": "Невидимка", "offline": "Не в сети", "email": "Электронная почта", "language": "Язык", @@ -101,12 +101,12 @@ "upload_file": "Загрузить файл", "upload": "Загрузить", "uploads": "Загрузки", - "allowed-file-types": "Разрешённые форматы файлов %1", + "allowed-file-types": "Разрешённые форматы файлов: %1", "unsaved-changes": "У вас есть несохранённые изменения. Вы уверены, что хотите уйти?", "reconnecting-message": "Похоже, подключение к %1 было разорвано, подождите, пока мы пытаемся восстановить соединение.", "play": "Воспроизвести", "cookies.message": "Этот сайт использует cookies для более удобного взаимодействия.", - "cookies.accept": "Понял", + "cookies.accept": "Понятно!", "cookies.learn_more": "Подробнее", "edited": "Отредактированный", "disabled": "Отключено", diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index 58c13025a5..e136d830c1 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -13,47 +13,47 @@ "invited.uninvite": "Аннулировать приглашение", "invited.search": "Найти пользователя для приглашения в эту группу", "invited.notification_title": "Вы были приглашены в группу %1", - "request.notification_title": "Запрос на участие в группе от участника %1", - "request.notification_text": "Участник %1 пожелал войти в группу %2", + "request.notification_title": "Запрос на участие в группе от пользователя %1", + "request.notification_text": "Пользователь %1 хочет присоединиться к группе %2", "cover-save": "Сохранить", "cover-saving": "Сохраняем", "details.title": "Информация о группе", "details.members": "Список участников", "details.pending": "Заявки в группу", "details.invited": "Приглашенные участники", - "details.has_no_posts": "Участники этой группы ещё не публиковали записи", - "details.latest_posts": "Последние записи", + "details.has_no_posts": "Участники этой группы ещё ничего не написали.", + "details.latest_posts": "Последние сообщения", "details.private": "Закрытая", "details.disableJoinRequests": "Отключить запросы на приглашение", - "details.disableLeave": "Disallow users from leaving the group", + "details.disableLeave": "Запретить участникам покидать группу", "details.grant": "Выдать/забрать привилегии администратора", "details.kick": "Исключить", "details.kick_confirm": "Вы уверены, что хотите удалить этого участника из группы?", - "details.add-member": "Добавить пользователя", - "details.owner_options": "Настройки группы", - "details.group_name": "Имя группы", + "details.add-member": "Добавить участника", + "details.owner_options": "Управление группой", + "details.group_name": "Название группы", "details.member_count": "Количество участников", "details.creation_date": "Дата создания", "details.description": "Описание", - "details.badge_preview": "Предпросмотр бейджа", + "details.badge_preview": "Предпросмотр значка", "details.change_icon": "Сменить иконку", - "details.change_label_colour": "Change Label Colour", - "details.change_text_colour": "Change Text Colour", - "details.badge_text": "Текст на бейдже", - "details.userTitleEnabled": "Показать бейдж", - "details.private_help": "Если включено, вступление в группы будет подтверждаться владельцем группы", - "details.hidden": "Скрыто", + "details.change_label_colour": "Изменить цвет ярлыка", + "details.change_text_colour": "Изменить цвет текста", + "details.badge_text": "Текст на значке", + "details.userTitleEnabled": "Показывать значок", + "details.private_help": "Если включено, заявку на вступление в группу должен будет подтвердить её владелец", + "details.hidden": "Скрытая", "details.hidden_help": "Если включено, группа будет скрыта в списках, а участников необходимо будет приглашать вручную", "details.delete_group": "Удалить группу", - "details.private_system_help": "Частные группы отключены на уровне системы, эта опция ничего не даст", + "details.private_system_help": "Закрытые группы отключены на уровне системы, эта опция ничего не даст", "event.updated": "Настройки группы обновлены", "event.deleted": "Группа \"%1\" удалена", "membership.accept-invitation": "Принять приглашение", - "membership.accept.notification_title": "You are now a member of %1", + "membership.accept.notification_title": "Вы присоединились к группе %1", "membership.invitation-pending": "Заявка на рассмотрении", "membership.join-group": "Вступить", "membership.leave-group": "Покинуть", - "membership.leave.notification_title": "%1 has left group %2", + "membership.leave.notification_title": "Участник %1 покинул группу %2", "membership.reject": "Отклонить", "new-group.group_name": "Название группы:", "upload-group-cover": "Загрузить обложку группы", diff --git a/public/language/ru/login.json b/public/language/ru/login.json index a0ab9e619b..e971ef18da 100644 --- a/public/language/ru/login.json +++ b/public/language/ru/login.json @@ -7,6 +7,6 @@ "alternative_logins": "Войти через", "failed_login_attempt": "Неправильно указано имя пользователя или электронная почта", "login_successful": "Вы успешно вошли!", - "dont_have_account": "Нет аккаунта?", + "dont_have_account": "Нет учётной записи?", "logged-out-due-to-inactivity": "Вы вышли из панели управления администратора из-за бездействия" } \ No newline at end of file diff --git a/public/language/ru/modules.json b/public/language/ru/modules.json index b8a17b757f..c3b09ce9fc 100644 --- a/public/language/ru/modules.json +++ b/public/language/ru/modules.json @@ -4,7 +4,7 @@ "chat.send": "Отправить", "chat.no_active": "У вас нет активных чатов.", "chat.user_typing": "%1 пишет...", - "chat.user_has_messaged_you": "Участник %1 отправил вам сообщение.", + "chat.user_has_messaged_you": "Пользователь %1 отправил вам сообщение.", "chat.see_all": "Посмотреть все чаты", "chat.mark_all_read": "Отметить все чаты как прочитанные", "chat.no-messages": "Пожалуйста, выберите собеседника для просмотра истории сообщений", @@ -27,7 +27,7 @@ "chat.rename-room": "Переименовать комнату", "chat.rename-placeholder": "Введите название комнаты здесь", "chat.rename-help": "Название комнаты, установленное здесь, будет доступно для просмотра всеми участниками комнаты.", - "chat.leave": "Покинуть Чат", + "chat.leave": "Покинуть чат", "chat.leave-prompt": "Вы действительно хотите покинуть чат?", "chat.leave-help": "Оставив этот чат, вы удалите себя из будущей переписки в этом чате. Если вы будете повторно добавлены в будущем, вы не увидите истории чата до вашего повторного присоединения.", "chat.in-room": "В этой комнате", @@ -40,9 +40,9 @@ "composer.compose": "Редактор сообщений", "composer.show_preview": "Показать предпросмотр сообщения", "composer.hide_preview": "Скрыть предпросмотр", - "composer.user_said_in": "Участник %1 написал в %2:", - "composer.user_said": "Участник %1 написал:", - "composer.discard": "Вы уверены, что хотите отменить все изменения?", + "composer.user_said_in": "Пользователь %1 написал в %2:", + "composer.user_said": "Пользователь %1 написал:", + "composer.discard": "Вы уверены, что передумали писать это сообщение?", "composer.submit_and_lock": "Отправить и закрыть", "composer.toggle_dropdown": "Показать выпадающий список", "composer.uploading": "Загрузка %1", @@ -56,11 +56,11 @@ "composer.upload-picture": "Загрузить изображение", "composer.upload-file": "Загрузить файл", "composer.zen_mode": "Полноэкранный режим", - "composer.select_category": "Выберите сообщество", + "composer.select_category": "Выберите категорию", "bootbox.ok": "ОК", "bootbox.cancel": "Отмена", "bootbox.confirm": "Подтвердить", "cover.dragging_title": "Позиционирование обложки", "cover.dragging_message": "Перетащите обложку на желаемое место и нажмите \"Сохранить\"", - "cover.saved": "Обложка и расположение сохранены" + "cover.saved": "Обложка и её расположение сохранены" } \ No newline at end of file diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json index b9ae7b8e87..66aebf4d63 100644 --- a/public/language/ru/notifications.json +++ b/public/language/ru/notifications.json @@ -14,51 +14,51 @@ "topics": "Темы", "replies": "Ответы", "chat": "Чаты", - "follows": "Следят", - "upvote": "Понравилось", - "new-flags": "Новые закладки", - "my-flags": "Закладки для меня", + "follows": "Подписки", + "upvote": "Голоса", + "new-flags": "Новые жалобы", + "my-flags": "Назначенные мне жалобы", "bans": "Блокировки", - "new_message_from": "Новое сообщение от участника %1", - "upvoted_your_post_in": "Участник %1 проголосовал за ваше сообщение в %2.", - "upvoted_your_post_in_dual": "Участники %1 и %2 проголосовали за ваше сообщение в %3.", - "upvoted_your_post_in_multiple": "Участник %1 и %2 других проголосовали за ваше сообщение в %3", + "new_message_from": "Новое сообщение от %1", + "upvoted_your_post_in": "Пользователь %1 проголосовал за ваше сообщение в %2.", + "upvoted_your_post_in_dual": "Пользователи %1 и %2 проголосовали за ваше сообщение в %3.", + "upvoted_your_post_in_multiple": "%1 и %2 других пользователя проголосовали за ваше сообщение в %3", "moved_your_post": "Модератор %1 переместил ваше сообщение в %2", - "moved_your_topic": "Модератор %1 переместил вашу тему %2", - "user_flagged_post_in": "Участник %1 пометил сообщение в %2", - "user_flagged_post_in_dual": "Участники %1 и %2 пометили ваше сообщение в %3", - "user_flagged_post_in_multiple": "Участник %1 и %2 других пометили ваше сообщение %3", - "user_flagged_user": "Участник %1 отметили профиль пользователя (%3)", - "user_flagged_user_dual": "Участник %1 и %2отметили профиль пользователя (%3)", - "user_flagged_user_multiple": "%1 и %2 других отметили профиль пользователя (%3)", - "user_posted_to": "Участник %1 ответил на запись: %2", - "user_posted_to_dual": "Участники %1 и %2 ответили на вашу запись: %3", - "user_posted_to_multiple": "Участник %1 и %2 других ответили на вашу запись: %3", - "user_posted_topic": "Участник %1 открыл новую тему: %2", - "user_started_following_you": "Участник %1 подписался на вас.", - "user_started_following_you_dual": "Участники %1 и %2 подписались на вас.", - "user_started_following_you_multiple": "Участник %1 и %2 других подписались на вас.", + "moved_your_topic": "Модератор %1 переместил тему %2", + "user_flagged_post_in": "Пользователь %1 пожаловался на сообщение в %2", + "user_flagged_post_in_dual": "Пользователи %1 и %2 пожаловались на сообщение в %3", + "user_flagged_post_in_multiple": "%1 и %2 других пользователя пожаловались на сообщение в %3", + "user_flagged_user": "Пользователь %1 пожаловался на профиль пользователя (%3)", + "user_flagged_user_dual": "Пользователи %1 и %2 пожаловались на профиль пользователя (%3)", + "user_flagged_user_multiple": "%1 и %2 других пользователя пожаловались на профиль пользователя (%3)", + "user_posted_to": "Пользователь %1 ответил на сообщение в %2", + "user_posted_to_dual": "Пользователи %1 и %2 ответили на сообщение в %3", + "user_posted_to_multiple": "%1 и %2 других пользователя ответили на сообщение в %3", + "user_posted_topic": "Пользователь %1 создал новую тему: %2", + "user_started_following_you": "Пользователь %1 подписался на вас.", + "user_started_following_you_dual": "Пользователи %1 и %2 подписались на вас.", + "user_started_following_you_multiple": "%1 и %2 других пользователя подписались на вас.", "new_register": "Посетитель %1 отправил запрос на регистрацию.", "new_register_multiple": "В очереди %1 заявок на регистрацию.", - "flag_assigned_to_you": "Метка%1 была вам назначена", - "post_awaiting_review": "Сообщение ожидающее рассмотрения", + "flag_assigned_to_you": "Жалоба %1 была назначена вам", + "post_awaiting_review": "Сообщение ожидает проверки", "email-confirmed": "Электронная почта подтверждена", - "email-confirmed-message": "Спасибо за подтверждение адреса электронной почты. Ваша учётная запись активирована. Добро пожаловать на наш сайт!", - "email-confirm-error-message": "Ошибка проверки адреса электронной почты. Возможно, введён неправильно код подтверждения, либо у него истёк срок действия.", + "email-confirmed-message": "Спасибо за подтверждение адреса электронной почты. Ваша учётная запись активирована.", + "email-confirm-error-message": "Ошибка проверки адреса электронной почты. Возможно, код подтверждения введён неправильно или у него истёк срок действия.", "email-confirm-sent": "Письмо с проверочным кодом отправлено на ваш электронный адрес", - "none": "Пусто", + "none": "Ничего", "notification_only": "Только уведомление", - "email_only": "Только электронная почта", - "notification_and_email": "Уведомление & Электронная почта", + "email_only": "Только письмо", + "notification_and_email": "Уведомление и письмо", "notificationType_upvote": "Когда кто-то проголосовал за ваше сообщение", - "notificationType_new-topic": "Отслеживать сообщения в вашей теме", - "notificationType_new-reply": "Когда новый ответ отправляется в теме, которую вы смотрите", - "notificationType_follow": "Когда кто-то подписался на ваши обновления", - "notificationType_new-chat": "Когда вы получили сообщение", - "notificationType_group-invite": "Когда вы получили приглашение в группу", - "notificationType_group-request-membership": "When someone requests to join a group you own", - "notificationType_new-register": "Когда кто-то добавляется в очередь регистрации", - "notificationType_post-queue": "Когда новое сообщение помещается в очередь", - "notificationType_new-post-flag": "Когда сообщение помечено", - "notificationType_new-user-flag": "Когда пользователь отмечен" + "notificationType_new-topic": "Когда кто-то, на кого вы подписаны, создаёт новую тему", + "notificationType_new-reply": "Когда в теме, за которой вы следите, появляется новое сообщение", + "notificationType_follow": "Когда кто-то подписался на вас", + "notificationType_new-chat": "Когда вы получаете сообщение в чат", + "notificationType_group-invite": "Когда вы получаете приглашение в группу", + "notificationType_group-request-membership": "Когда кто-то хочет присоединиться к группе, которой вы управляете", + "notificationType_new-register": "Когда в очереди на регистрацию появляется новый пользователь", + "notificationType_post-queue": "Когда в очереди на проверку появляется новое сообщение", + "notificationType_new-post-flag": "Когда поступает жалоба на сообщение", + "notificationType_new-user-flag": "Когда поступает жалоба на пользователя" } \ No newline at end of file diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index a0baf16dd1..08f06dfdfd 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -6,59 +6,59 @@ "popular-month": "Популярные темы этого месяца", "popular-alltime": "Популярные темы за всё время", "recent": "Последние темы", - "top-day": "Самые популярные темы за сегодня", - "top-week": "Самые популярные темы за неделю", - "top-month": "Самые популярные темы за месяц", - "top-alltime": "Самые популярные темы", + "top-day": "Лучшие темы за сегодня", + "top-week": "Лучшие темы за неделю", + "top-month": "Лучшие темы за месяц", + "top-alltime": "Лучшие темы", "moderator-tools": "Инструменты модератора", - "flagged-content": "Выбранное содержимое", + "flagged-content": "Список жалоб", "ip-blacklist": "Чёрный список IP", - "post-queue": "Очередь публикации", + "post-queue": "Очередь на публикацию", "users/online": "В сети", - "users/latest": "Новые участники", - "users/sort-posts": "Участники по количеству сообщений", - "users/sort-reputation": "Участники по уровню репутации", - "users/banned": "Заблокированные участники", - "users/most-flags": "Участники, на которых больше всего жалуются", - "users/search": "Поиск участников", + "users/latest": "Новые пользователи", + "users/sort-posts": "Пользователи по кол-ву сообщений", + "users/sort-reputation": "Пользователи по уровню репутации", + "users/banned": "Заблокированные пользователи", + "users/most-flags": "Пользователи, на которых больше всего жалуются", + "users/search": "Поиск пользователей", "notifications": "Уведомления", "tags": "Метки", - "tag": "Темы помеченные как "%1"", + "tag": "Темы с меткой "%1"", "register": "Зарегистрироваться", "registration-complete": "Регистрация завершена", "login": "Войти", - "reset": "Забыл пароль?", - "categories": "Сообщества", + "reset": "Сбросить пароль", + "categories": "Категории", "groups": "Группы", "group": "Группа %1", "chats": "Чаты", - "chat": "Чат с участником %1", - "flags": "Отметки", - "flag-details": "Отметка %1 детали", + "chat": "Чат с %1", + "flags": "Жалобы", + "flag-details": "Подробности жалобы %1", "account/edit": "Редактирование \"%1\"", "account/edit/password": "Сменить пароль \"%1\"", "account/edit/username": "Изменить имя пользователя \"%1\"", "account/edit/email": "Изменить электронную почту \"%1\"", "account/info": "Информация об учётной записи", - "account/following": "Подписан %1", + "account/following": "Подписки %1", "account/followers": "Подписчики %1", - "account/posts": "Сообщение от участника %1", - "account/latest-posts": "Latest posts made by %1", - "account/topics": "Тема создана участником %1", - "account/groups": "%1 групп", - "account/watched_categories": "%1 просмотренных категорий", - "account/bookmarks": "%1 сообщений в закладках", + "account/posts": "Сообщения %1", + "account/latest-posts": "Недавние сообщения %1", + "account/topics": "Темы, созданные %1", + "account/groups": "Группы %1", + "account/watched_categories": "Категории, которые %1 отслеживает", + "account/bookmarks": "Закладки %1", "account/settings": "Настройки учётной записи", - "account/watched": "Тему просмотрели %1", - "account/ignored": "Игнорируемые темы %1", - "account/upvoted": "Рейтинг записей поднят %1", - "account/downvoted": "Рейтинг записей снижен %1", - "account/best": "Лучшие записи участника %1", + "account/watched": "Темы, которые %1 отслеживает", + "account/ignored": "Темы, которые %1 игнорирует", + "account/upvoted": "Рейтинг сообщений поднят %1", + "account/downvoted": "Рейтинг сообщений снижен %1", + "account/best": "Лучшие сообщения %1", "account/blocks": "Пользователи, заблокированные %1", - "account/uploads": "Загрузки от %1", + "account/uploads": "Загрузки %1", "account/sessions": "Сессии", "confirm": "Электронная почта подтверждена", - "maintenance.text": "Приносим наши извинения, %1 в настоящее время на обслуживании. Пожалуйста, приходите позже.", - "maintenance.messageIntro": "Администратор оставил сообщение:", - "throttled.text": "Приносим наши извинения, %1 в настоящее время недоступен из-за высокой нагрузки. Пожалуйста, приходите позже." + "maintenance.text": "%1 в настоящее время на обслуживании. Пожалуйста, возвращайтесь позже.", + "maintenance.messageIntro": "Кроме того, администратор оставил это сообщение:", + "throttled.text": "%1 в настоящее время недоступен из-за высокой нагрузки. Пожалуйста, приходите в другой раз." } \ No newline at end of file diff --git a/public/language/ru/recent.json b/public/language/ru/recent.json index 187cb4dd98..b852766c31 100644 --- a/public/language/ru/recent.json +++ b/public/language/ru/recent.json @@ -1,19 +1,19 @@ { "title": "Последние", - "day": "День", - "week": "Неделя", - "month": "Месяц", - "year": "Год", + "day": "За день", + "week": "За неделю", + "month": "За месяц", + "year": "За год", "alltime": "За всё время", "no_recent_topics": "Нет свежих тем.", "no_popular_topics": "Популярные темы отсутствуют.", "there-is-a-new-topic": "Опубликована новая тема.", - "there-is-a-new-topic-and-a-new-post": "Опубликована новая тема и новая запись.", - "there-is-a-new-topic-and-new-posts": "Опубликована новая тема и %1 новых записей.", + "there-is-a-new-topic-and-a-new-post": "Опубликована новая тема и новое сообщение.", + "there-is-a-new-topic-and-new-posts": "Опубликована новая тема и %1 новых сообщений.", "there-are-new-topics": "Опубликовано %1 новых тем.", - "there-are-new-topics-and-a-new-post": "Опубликовано %1 новых тем и новая запись.", - "there-are-new-topics-and-new-posts": "Опубликовано %1 новых тем и %2 новых записей.", - "there-is-a-new-post": "Опубликована новая запись.", - "there-are-new-posts": "Опубликовано %1 новых записей.", - "click-here-to-reload": "Нажмите здесь, чтобы перезагрузить список." + "there-are-new-topics-and-a-new-post": "Опубликовано %1 новых тем и новое сообщение.", + "there-are-new-topics-and-new-posts": "Опубликовано %1 новых тем и %2 новых сообщений.", + "there-is-a-new-post": "Опубликовано новое сообщение.", + "there-are-new-posts": "Опубликовано %1 новых сообщений.", + "click-here-to-reload": "Нажмите здесь, чтобы обновить список." } \ No newline at end of file diff --git a/public/language/ru/register.json b/public/language/ru/register.json index 1d92f454f8..8e8d3c0ea7 100644 --- a/public/language/ru/register.json +++ b/public/language/ru/register.json @@ -1,9 +1,9 @@ { "register": "Регистрация", "cancel_registration": "Отменить регистрацию", - "help.email": "Ваша электронная почта не будет видна другим участникам", - "help.username_restrictions": "Другие участники смогут упоминать вас в своих сообщениях таким образом: @никнейм. Длина имени пользователя: %1-%2 символов.", - "help.minimum_password_length": "Длина пароля: минимум %1 символов.", + "help.email": "Ваш адрес электронной почты будет скрыт от других пользователей.", + "help.username_restrictions": "Другие пользователи смогут упоминать вас в своих сообщениях таким образом: @никнейм. Длина имени пользователя: %1-%2 символов.", + "help.minimum_password_length": "Ваш пароль должен содержать как минимум %1 символов.", "email_address": "Электронная почта", "email_address_placeholder": "Введите свой адрес электронной почты", "username": "Имя пользователя", @@ -21,6 +21,6 @@ "interstitial.intro": "Нам потребуется дополнительная информация, прежде чем мы сможем создать вашу учётную запись.", "interstitial.errors-found": "Мы не смогли завершить регистрацию:", "gdpr_agree_data": "Я соглашаюсь на сбор и обработку моей личной информации на этом веб-сайте.", - "gdpr_agree_email": "Я соглашаюсь получать дайджесты и уведомления на свой email с этого сайта.", - "gdpr_consent_denied": "Вы должны дать согласие на сбор, обработку вашей информации и отправку вам электронных сообщений на email." + "gdpr_agree_email": "Я соглашаюсь получать дайджесты и уведомления с этого сайта на свой адрес электронной почты.", + "gdpr_consent_denied": "Вы должны дать согласие на сбор, обработку вашей информации и отправку вам сообщений по электронной почте." } \ No newline at end of file diff --git a/public/language/ru/reset_password.json b/public/language/ru/reset_password.json index e67cea0673..4900c703fa 100644 --- a/public/language/ru/reset_password.json +++ b/public/language/ru/reset_password.json @@ -2,7 +2,7 @@ "reset_password": "Восстановить пароль", "update_password": "Изменить пароль", "password_changed.title": "Пароль изменён", - "password_changed.message": "

Пароль успешно восстановлен, пожалуйста войдите еще раз.", + "password_changed.message": "

Пароль успешно сброшен. Пожалуйста, войдите снова.", "wrong_reset_code.title": "Неверный код восстановления", "wrong_reset_code.message": "Неправильный код восстановления пароля. Попробуйте ещё раз, или запросите новый код восстановления.", "new_password": "Новый пароль", diff --git a/public/language/ru/search.json b/public/language/ru/search.json index 2dfc26029f..f62de44395 100644 --- a/public/language/ru/search.json +++ b/public/language/ru/search.json @@ -1,25 +1,25 @@ { - "results_matching": "Найдено %1 результатов по запросу: \"%2\". Время поиска: %3 сек.", + "results_matching": "Найдено %1 результатов по запросу: \"%2\". Время поиска: %3 с.", "no-matches": "Совпадений не найдено", "advanced-search": "Расширенный поиск", - "in": "В", - "titles": "Названия", - "titles-posts": "Названия и записи", + "in": "Где искать", + "titles": "Заголовки", + "titles-posts": "Заголовки и сообщения", "match-words": "Совпадающие слова", "all": "Все", "any": "Любые", - "posted-by": "В именах авторов записей", - "in-categories": "В сообществах", - "search-child-categories": "Искать в рубриках", - "has-tags": "Имеет теги", - "reply-count": "Количество ответов", - "at-least": "Минимум", + "posted-by": "Автор", + "in-categories": "В категориях", + "search-child-categories": "Искать во вложенных категориях", + "has-tags": "Метки", + "reply-count": "Кол-во ответов", + "at-least": "Как минимум", "at-most": "Максимум", - "relevance": "Релевантность", - "post-time": "Время публикации", - "votes": "Голосов", - "newer-than": "Ранее чем", - "older-than": "Позже чем", + "relevance": "Релевантности", + "post-time": "Дата публикации", + "votes": "Кол-ву голосов", + "newer-than": "Не позже чем", + "older-than": "Не раньше чем", "any-date": "Любая дата", "yesterday": "Вчера", "one-week": "Одна неделя", @@ -29,14 +29,14 @@ "six-months": "Шесть месяцев", "one-year": "Год", "sort-by": "Сортировать по", - "last-reply-time": "Время последнего ответа", - "topic-title": "Название темы", - "topic-votes": "Голосов темы", - "number-of-replies": "Количество ответов", - "number-of-views": "Количество просмотров", - "topic-start-date": "Время создания темы", - "username": "Автор записи", - "category": "Сообщество", + "last-reply-time": "Времени последнего ответа", + "topic-title": "Названию темы", + "topic-votes": "Кол-ву голосов за тему", + "number-of-replies": "Количеству ответов", + "number-of-views": "Количеству просмотров", + "topic-start-date": "Времени создания темы", + "username": "Имени пользователя", + "category": "Категориям", "descending": "По возрастанию", "ascending": "По убыванию", "save-preferences": "Сохранить настройки", diff --git a/public/language/ru/success.json b/public/language/ru/success.json index cda8e662fd..b25041f8c5 100644 --- a/public/language/ru/success.json +++ b/public/language/ru/success.json @@ -1,7 +1,7 @@ { - "success": "Успешно выполнено", - "topic-post": "Запись была успешно создана", - "post-queued": "Ваше сообщение помещено в очередь для одобрения.", + "success": "Готово", + "topic-post": "Вы успешно отправили сообщение.", + "post-queued": "Ваше сообщение помещено в очередь на одобрение.", "authentication-successful": "Авторизация выполнена успешно", - "settings-saved": "Настройки сохранены" + "settings-saved": "Настройки сохранены!" } \ No newline at end of file diff --git a/public/language/ru/tags.json b/public/language/ru/tags.json index 5dcfa8d3f0..f40e1cc745 100644 --- a/public/language/ru/tags.json +++ b/public/language/ru/tags.json @@ -1,7 +1,7 @@ { - "no_tag_topics": "Темы с такой меткой отсутствуют.", + "no_tag_topics": "Тем с такой меткой сейчас нет.", "tags": "Метки", - "enter_tags_here": "Для каждой новой темы необходимо указать несколько меток, чтобы ваше сообщение было проще найти другим участникам сообщества. Длина каждой метки %1-%2 символов, включая пробелы. После написания каждой метки нажимайте клавишу Enter.", - "enter_tags_here_short": "Введите метки.", - "no_tags": "У темы пока нет меток." + "enter_tags_here": "Добавьте метки здесь, от %1 до %2 символов каждая.", + "enter_tags_here_short": "Введите метки...", + "no_tags": "Меток пока нет." } \ No newline at end of file diff --git a/public/language/ru/topic.json b/public/language/ru/topic.json index 5709a3a0b3..d26318613d 100644 --- a/public/language/ru/topic.json +++ b/public/language/ru/topic.json @@ -1,112 +1,112 @@ { "topic": "Тема", - "topic_id": "Идентификатор темы", - "topic_id_placeholder": "Введите идентификатор темы", - "no_topics_found": "Тем не найдено!", - "no_posts_found": "Записи не найдены!", - "post_is_deleted": "Эта запись удалена!", + "topic_id": "ID темы", + "topic_id_placeholder": "Введите ID темы", + "no_topics_found": "Темы не найдены!", + "no_posts_found": "Сообщения не найдены!", + "post_is_deleted": "Это сообщение удалено!", "topic_is_deleted": "Эта тема удалена!", "profile": "Профиль", "posted_by": "Опубликовано %1", "posted_by_guest": "Опубликовано гостем", "chat": "Чат", - "notify_me": "Подписаться на новые ответы", + "notify_me": "Получать уведомления о новых сообщениях в этой теме", "quote": "Цитировать", "reply": "Ответить", - "replies_to_this_post": "%1 Ответов", - "one_reply_to_this_post": "1 Ответ", + "replies_to_this_post": "%1 ответов", + "one_reply_to_this_post": "1 ответ", "last_reply_time": "Последний ответ", "reply-as-topic": "Ответить, создав новую тему", - "guest-login-reply": "Необходимо авторизоваться на сайте, чтобы оставить сообщение. Пожалуйста, зарегистрируйтесь или войдите на сайт.", - "login-to-view": "🔒 Log in to view", - "edit": "Редактировать", + "guest-login-reply": "Авторизуйтесь, чтобы ответить", + "login-to-view": "Авторизуйтесь, чтобы просмотреть", + "edit": "Изменить", "delete": "Удалить", "purge": "Стереть", "restore": "Восстановить", "move": "Перенести", - "change-owner": "Change Owner", - "fork": "Ответвление", + "change-owner": "Сменить автора", + "fork": "Разделить", "link": "Ссылка", "share": "Поделиться", - "tools": "Настройки записи", - "locked": "Закрыт", + "tools": "Действия", + "locked": "Закрыта", "pinned": "Прикреплена", - "moved": "Перемещена", + "moved": "Перенесена", "copy-ip": "Копировать IP", "ban-ip": "Забанить IP", - "view-history": "Редактировать историю", + "view-history": "История правок", "bookmark_instructions": "Нажмите здесь, чтобы вернуться к последнему прочитанному сообщению в этой теме.", - "flag_title": "Отметить сообщение для модерирования", + "flag_title": "Отметить это сообщение для модераторов", "merged_message": "Эта тема была объединена с %2", - "deleted_message": "Эта тема была удалена. Только пользователи с правами управления темами могут ее видеть.", - "following_topic.message": "Теперь вы будете получать уведомления при обновлении этой темы.", - "not_following_topic.message": "Вы увидите эту тему в списке непрочитанных тем, но Вы не будете получать уведомления, когда кто-то напишет сообщение в эту тему.", - "ignoring_topic.message": "Вы больше не будете видеть эту тему в списке непрочитанных тем. Вас уведомят, когда Вас упомянут или проголосуют за Ваш пост.", - "login_to_subscribe": "Пожалуйста зарегистрируйтесь, или войдите под своим аккаунтом, чтобы подписаться на эту тему.", + "deleted_message": "Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.", + "following_topic.message": "Теперь вы будете получать уведомления каждый раз, когда кто-нибудь напишет сообщение в эту тему.", + "not_following_topic.message": "Вы увидите эту тему в списке непрочитанных, но не будете получать уведомлений о новых сообщениях в ней.", + "ignoring_topic.message": "Вы больше не будете видеть эту тему в списке непрочитанных, но если кто-то упомянет вас в ней или проголосует за ваше сообщение, вы получите уведомление.", + "login_to_subscribe": "Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы подписаться на эту тему.", "markAsUnreadForAll.success": "Тема помечена как непрочитанная для всех.", - "mark_unread": "Отметить как непрочитанное", + "mark_unread": "Отметить как непрочитанную", "mark_unread.success": "Тема помечена как непрочитанная.", - "watch": "Следить", - "unwatch": "Не следить", - "watch.title": "Сообщать мне об ответах в этой теме", - "unwatch.title": "Не сообщать мне об ответах в этой теме", - "share_this_post": "Поделиться этим Сообщением", - "watching": "Подписка", - "not-watching": "Не наблюдать", - "ignoring": "Игнорирование", - "watching.description": "Сообщить мне о новых ответах.
Показать тему в непрочитанных.", - "not-watching.description": "Не уведомлять меня о новых ответах.
Показать тему в непрочитанных, если категория мной не игнорируется.", - "ignoring.description": "Не уведомлять меня о новых ответах.
Не отображать тему в непрочитанных.", - "thread_tools.title": "Настройки темы", - "thread_tools.markAsUnreadForAll": "Выделить непрочитанные для всех", + "watch": "Отслеживать", + "unwatch": "Не отслеживать", + "watch.title": "Получать уведомления о новых сообщениях в этой теме", + "unwatch.title": "Перестать отслеживать эту тему", + "share_this_post": "Поделиться сообщением", + "watching": "Отслеживается", + "not-watching": "Не отслеживается", + "ignoring": "Игнорируется", + "watching.description": "Уведомлять о новых сообщениях.
Показывать тему в непрочитанных.", + "not-watching.description": "Не уведомлять о новых сообщениях.
Показывать тему в непрочитанных, если эта категория не игнорируется.", + "ignoring.description": "Не уведомлять о новых сообщениях.
Не показывать эту тему в непрочитанных.", + "thread_tools.title": "Управление темой", + "thread_tools.markAsUnreadForAll": "Пометить непрочитанной для всех", "thread_tools.pin": "Прикрепить тему", "thread_tools.unpin": "Открепить тему", "thread_tools.lock": "Закрыть тему", "thread_tools.unlock": "Открыть тему", - "thread_tools.move": "Переместить тему", - "thread_tools.move-posts": "Переместить пост", - "thread_tools.move_all": "Переместить всё", - "thread_tools.change_owner": "Change Owner", + "thread_tools.move": "Перенести тему", + "thread_tools.move-posts": "Перенести сообщения", + "thread_tools.move_all": "Перенести всё", + "thread_tools.change_owner": "Сменить автора", "thread_tools.select_category": "Выберите категорию", - "thread_tools.fork": "Создать дополнительную ветвь дискуссии", + "thread_tools.fork": "Разделить тему", "thread_tools.delete": "Удалить тему", - "thread_tools.delete-posts": "Удалить записи", - "thread_tools.delete_confirm": "Вы уверены, что хотите удалить тему?", + "thread_tools.delete-posts": "Удалить сообщения", + "thread_tools.delete_confirm": "Вы уверены, что хотите удалить эту тему?", "thread_tools.restore": "Восстановить тему", - "thread_tools.restore_confirm": "Вы уверены, что хотите восстановить тему?", + "thread_tools.restore_confirm": "Вы уверены, что хотите восстановить эту тему?", "thread_tools.purge": "Стереть тему", "thread_tools.purge_confirm": "Вы уверены, что хотите стереть эту тему?", "thread_tools.merge_topics": "Объединить темы", "thread_tools.merge": "Объединить", "topic_move_success": "Эта тема успешно перемещена в %1", - "post_delete_confirm": "Вы уверены, что хотите удалить эту запись?", - "post_restore_confirm": "Вы уверены, что хотите восстановить эту запись?", - "post_purge_confirm": "Вы уверены, что хотите стереть эту запись?", - "load_categories": "Загружаем сообщества", + "post_delete_confirm": "Вы уверены, что хотите удалить это сообщение?", + "post_restore_confirm": "Вы уверены, что хотите восстановить это сообщение?", + "post_purge_confirm": "Вы уверены, что хотите стереть это сообщение?", + "load_categories": "Загружаем категории", "confirm_move": "Перенести", - "confirm_fork": "Создать дополнительную ветвь", + "confirm_fork": "Разделить", "bookmark": "Добавить в закладки", "bookmarks": "Закладки", - "bookmarks.has_no_bookmarks": "Сохраните к себе в закладки важные вам записи, и этот список будет всегда находиться на этой странице.", - "loading_more_posts": "Загружается больше записей", + "bookmarks.has_no_bookmarks": "Вы ещё не добавили в закладки ни одного сообщения.", + "loading_more_posts": "Загружаем больше сообщений", "move_topic": "Перенести тему", "move_topics": "Перенести темы", - "move_post": "Перенести запись", - "post_moved": "Запись перенесена", + "move_post": "Перенести сообщение", + "post_moved": "Сообщение перенесено!", "fork_topic": "Создать дополнительную ветвь дискуссии", - "fork_topic_instruction": "Отметьте одну или несколько записей для создания дополнительной ветви дискуссии", - "fork_no_pids": "Записи не отмечены", - "fork_pid_count": "Отмечено %1 сообщений", - "fork_success": "Готово! Просмотр отделённой темы.", - "delete_posts_instruction": "Отметьте записи, которые вы хотите удалить", - "merge_topics_instruction": "Выберите темы которые вы хотите объединить", - "move_posts_instruction": "Нажмите на сообщения, которые вы хотите переместить", - "change_owner_instruction": "Click the posts you want to assign to another user", + "fork_topic_instruction": "Отметьте сообщения, которые вы хотите перенести в отдельную тему", + "fork_no_pids": "Не выбрано ни одного сообщения!", + "fork_pid_count": "Выбрано сообщений: %1", + "fork_success": "Готово! Нажмите здесь, чтобы перейти к новой теме.", + "delete_posts_instruction": "Отметьте сообщения, которые вы хотите удалить или стереть", + "merge_topics_instruction": "Выберите темы, которые вы хотите объединить", + "move_posts_instruction": "Нажмите на сообщения, которые вы хотите перенести", + "change_owner_instruction": "Нажмите на сообщения, которые вы хотите присвоить другому пользователю", "composer.title_placeholder": "Введите название темы...", "composer.handle_placeholder": "Название", "composer.discard": "Отменить", "composer.submit": "Отправить", - "composer.replying_to": "Ответ участнику %1", + "composer.replying_to": "Ответ %1", "composer.new_topic": "Создать тему", "composer.uploading": "загрузка...", "composer.thumb_url_label": "Вставьте ссылку на картинку с иконкой темы.", @@ -115,25 +115,25 @@ "composer.thumb_file_label": "Загрузить новое изображение", "composer.thumb_remove": "Очистить поля", "composer.drag_and_drop_images": "Перетащите изображения сюда", - "more_users_and_guests": "ещё %1 участников и %2 гостей", - "more_users": "ещё %1 участников", + "more_users_and_guests": "ещё %1 пользователей и %2 гостей", + "more_users": "ещё %1 пользователей", "more_guests": "ещё %1 гостей", - "users_and_others": "%1 участников и %2 других", + "users_and_others": "%1 пользователей и %2 других", "sort_by": "Сортировка", - "oldest_to_newest": "Начиная со старых записей", - "newest_to_oldest": "Начиная с новых записей", - "most_votes": "Количество голосов", - "most_posts": "Количество сообщений", + "oldest_to_newest": "Сначала старые", + "newest_to_oldest": "Сначала новые", + "most_votes": "По количеству голосов", + "most_posts": "По количеству сообщений", "stale.title": "Создать новую тему вместо этой?", - "stale.warning": "Тема, в которую вы пишите, очень старая. Вы хотите создать новую тему?", + "stale.warning": "Тема, в которую вы собираетесь написать, очень старая. Может, стоит создать новую, а про эту просто напомнить к случаю?", "stale.create": "Создать новую тему", - "stale.reply_anyway": "Всё равно ответить в этой теме", + "stale.reply_anyway": "Всё равно ответить здесь", "link_back": "Ответ: [%1](%2)", - "diffs.title": "История Редактирования Сообщения", - "diffs.description": "У этого поста есть %1 изменений. Нажмите один из приведенных ниже изменений, чтобы просмотреть содержимое сообщения в тот момент.", - "diffs.no-revisions-description": "У этого поста %1изменений", - "diffs.current-revision": "текущая ревизия", - "diffs.original-revision": "оригинальная ревизия", - "timeago_later": "%1 later", - "timeago_earlier": "%1 earlier" + "diffs.title": "История правок сообщения", + "diffs.description": "У этого сообщения есть %1 версий. Нажмите на любую из них, чтобы увидеть, каким оно было раньше.", + "diffs.no-revisions-description": "У этого сообщения есть %1версий", + "diffs.current-revision": "текущая версия", + "diffs.original-revision": "исходная версия", + "timeago_later": "через %1", + "timeago_earlier": "на %1 раньше" } \ No newline at end of file diff --git a/public/language/ru/unread.json b/public/language/ru/unread.json index bdead98f5d..1450d47aff 100644 --- a/public/language/ru/unread.json +++ b/public/language/ru/unread.json @@ -2,14 +2,14 @@ "title": "Непрочитанные темы", "no_unread_topics": "Нет непрочитанных тем.", "load_more": "Загрузить еще", - "mark_as_read": "Пометить прочитанным", + "mark_as_read": "Пометить как прочитанное", "selected": "Выбрано", "all": "Все", - "all_categories": "Все сообщества", - "topics_marked_as_read.success": "Все темы помечены как прочитанные", + "all_categories": "Все категории", + "topics_marked_as_read.success": "Все темы помечены как прочитанные!", "all-topics": "Все темы", "new-topics": "Новые темы", - "watched-topics": "Подписанные темы", + "watched-topics": "Отслеживаемые темы", "unreplied-topics": "Неотвеченные темы", - "multiple-categories-selected": "Выбрано несколько" + "multiple-categories-selected": "Выбрано несколько категорий" } \ No newline at end of file diff --git a/public/language/ru/uploads.json b/public/language/ru/uploads.json index fbc28a6775..1943ccb3c5 100644 --- a/public/language/ru/uploads.json +++ b/public/language/ru/uploads.json @@ -2,8 +2,8 @@ "uploading-file": "Загрузка файла...", "select-file-to-upload": "Укажите файл для загрузки!", "upload-success": "Файл успешно загружен!", - "maximum-file-size": "Максимум %1 kb", + "maximum-file-size": "Максимум %1 Кб", "no-uploads-found": "Загрузки не найдены", "public-uploads-info": "Загрузки общедоступны, все посетители могут их видеть.", - "private-uploads-info": "Загрузки являются частными, только зарегистрированные пользователи могут их видеть." + "private-uploads-info": "Загрузки скрыты, только зарегистрированные пользователи могут их видеть." } \ No newline at end of file diff --git a/public/language/ru/user.json b/public/language/ru/user.json index e704d98556..98c4cfba66 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -2,36 +2,36 @@ "banned": "Заблокирован", "offline": "Не в сети", "deleted": "Удалён", - "username": "Имя участника", + "username": "Имя пользователя", "joindate": "Дата регистрации", "postcount": "Сообщений", "email": "Электронная почта", "confirm_email": "Подтвердить электронную почту", - "account_info": "Личная информация", + "account_info": "Информация об учётной записи", "ban_account": "Заблокировать учётную запись", - "ban_account_confirm": "Вы действительно хотите заблокировать этого участника?", + "ban_account_confirm": "Вы действительно хотите заблокировать этого пользователя?", "unban_account": "Разблокировать учётную запись", "delete_account": "Удалить учётную запись", "delete_account_confirm": "Вы уверены, что хотите удалить свою учётную запись?
Это действие необратимо, вы не сможете восстановить свои данные

Введите свой пароль для подтверждения уничтожения учётной записи.", - "delete_this_account_confirm": "Вы уверены, что хотите удалить этот аккаунт?
Это действие является необратимым, вы не сможете восстановить любые данные

", + "delete_this_account_confirm": "Вы уверены, что хотите удалить эту учётную запись?
Это действие необратимо, вы не сможете восстановить данные

", "account-deleted": "Учётная запись удалена", "fullname": "Полное имя", "website": "Сайт", "location": "Местонахождение", "age": "Возраст", - "joined": "Зарегистрирован", + "joined": "Регистрация", "lastonline": "Последнее посещение", "profile": "Профиль", - "profile_views": "Просмотров профиля", + "profile_views": "Просмотры профиля", "reputation": "Репутация", "bookmarks": "Закладки", - "watched_categories": "Просмотренные категории", - "change_all": "Change All", - "watched": "Подписка", - "ignored": "Игнорировать", - "default-category-watch-state": "Default category watch state", - "followers": "Подписчиков", - "following": "Подписок", + "watched_categories": "Отслеживаемые категории", + "change_all": "Изменить для всех", + "watched": "Отслеживаемые темы", + "ignored": "Игнорируемые темы", + "default-category-watch-state": "Стандартная настройка отслеживания категорий", + "followers": "Подписчики", + "following": "Подписки", "blocks": "Блокировки", "block_toggle": "Блок./Разблок", "block_user": "Блокировать", @@ -42,106 +42,106 @@ "chat": "Чат", "chat_with": "Продолжить чат с %1", "new_chat_with": "Начать новый чат с %1", - "flag-profile": "Идентификатор профиля", + "flag-profile": "Пожаловаться на профиль", "follow": "Подписаться", "unfollow": "Отписаться", "more": "Больше", "profile_update_success": "Профиль обновлён!", - "change_picture": "Изменить фото", - "change_username": "Изменить имя участника", + "change_picture": "Изменить аватар", + "change_username": "Изменить имя пользователя", "change_email": "Изменить электронную почту", - "email_same_as_password": "Please enter your current password to continue – you've entered your new email again", + "email_same_as_password": "Пожалуйста, введите пароль, чтобы продолжить – вы снова указали свой новый адрес электронной почты", "edit": "Редактировать", "edit-profile": "Редактировать профиль", - "default_picture": "Иконка по умолчанию", - "uploaded_picture": "Загруженное фото", - "upload_new_picture": "Загрузить новое фото", - "upload_new_picture_from_url": "Указать ссылку", + "default_picture": "Стандартная иконка", + "uploaded_picture": "Загруженный аватар", + "upload_new_picture": "Загрузить новый аватар", + "upload_new_picture_from_url": "Загрузить изображение по ссылке", "current_password": "Текущий пароль", "change_password": "Изменить пароль", - "change_password_error": "Неверный пароль!", + "change_password_error": "Неправильный пароль!", "change_password_error_wrong_current": "Текущий пароль указан неверно!", "change_password_error_match": "Пароли должны совпадать!", "change_password_error_privileges": "Вы не можете изменить пароль.", "change_password_success": "Ваш пароль изменён!", "confirm_password": "Подтвердите пароль", "password": "Пароль", - "username_taken_workaround": "Логин, который вы запросили, уже занят. Мы его немного изменили. Теперь ваш логин %1", - "password_same_as_username": "Ваш пароль совпадает с именем пользователя, это очень небезопасно. Пожалуйста укажите другой пароль.", - "password_same_as_email": "Ваш пароль совпадает с элетронной почтой, это очень небезопасно. Пожалуйста, укажите другой пароль.", + "username_taken_workaround": "Это имя пользователя уже занято, поэтому пришлось его немного изменить. Теперь вы %1", + "password_same_as_username": "Ваш пароль совпадает с вашим именем пользователя. Пожалуйста, укажите другой пароль.", + "password_same_as_email": "Ваш пароль совпадает с вашей электронной почтой. Пожалуйста, укажите другой пароль.", "weak_password": "Слабый пароль.", - "upload_picture": "Загрузить фото", - "upload_a_picture": "Загрузить фото", - "remove_uploaded_picture": "Удалить фото", + "upload_picture": "Загрузить изображение", + "upload_a_picture": "Загрузить изображение", + "remove_uploaded_picture": "Удалить аватар", "upload_cover_picture": "Загрузить обложку профиля", - "remove_cover_picture_confirm": "Вы уверены, что хотите удалить изображение обложки?", - "crop_picture": "Вырезать картинку", + "remove_cover_picture_confirm": "Вы уверены, что хотите удалить обложку профиля?", + "crop_picture": "Обрезать картинку", "upload_cropped_picture": "Вырезать и загрузить", "settings": "Настройки", - "show_email": "Показывать мою элетронную почту", - "show_fullname": "Показывать полное имя", - "restrict_chats": "Разрешить чат только с подписчиками", + "show_email": "Показывать мою электронную почту", + "show_fullname": "Показывать моё полное имя", + "restrict_chats": "Разрешить чат только с теми, на кого я подписан", "digest_label": "Подписка на дайджест", - "digest_description": "Подписаться на все новые записи", - "digest_off": "Отключить подписку", - "digest_daily": "За день", - "digest_weekly": "За неделю", - "digest_monthly": "За месяц", - "has_no_follower": "На этого участника никто не подписан", - "follows_no_one": "Этот участник ни на кого не подписан", - "has_no_posts": "Участник пока не создал ни одной записи", - "has_no_topics": "Участник пока не создал ни одной темы", - "has_no_watched_topics": "Участник пока не посмотрел ни одной темы", - "has_no_ignored_topics": "Этот пользователь еще не игнорировал ни одной темы.", - "has_no_upvoted_posts": "Участник пока не голосовал положительно ни за одну запись", - "has_no_downvoted_posts": "Участник пока не голосовал против ни одной записи", - "has_no_voted_posts": "Участник пока не голосовал ни за одну запись", - "has_no_blocks": "Вы никого не блокировали", + "digest_description": "Подписаться на рассылку уведомлений о событиях и новых темах на форуме с указанной периодичностью", + "digest_off": "Отключена", + "digest_daily": "Ежедневная", + "digest_weekly": "Еженедельная", + "digest_monthly": "Ежемесячная", + "has_no_follower": "На этого пользователя никто не подписан :(", + "follows_no_one": "Этот пользователь ни на кого не подписан :(", + "has_no_posts": "Этот пользователь ещё ничего не написал.", + "has_no_topics": "Этот пользователь ещё не создал ни одной темы.", + "has_no_watched_topics": "Этот пользователь не отслеживает ни одной темы.", + "has_no_ignored_topics": "Этот пользователь не игнорирует ни одну тему.", + "has_no_upvoted_posts": "Этот пользователь ещё ни одному сообщению не поднимал рейтинг.", + "has_no_downvoted_posts": "Этот пользователь ещё ни одному сообщению не понижал рейтинг.", + "has_no_voted_posts": "За сообщения этого пользователя ещё не голосовали", + "has_no_blocks": "Вы никого не заблокировали.", "email_hidden": "Электронная почта скрыта", "hidden": "скрыто", - "paginate_description": "Разбить на страницы, а не выводить бесконечным списком", + "paginate_description": "Разбивать темы и сообщения на страницы, а не выводить бесконечным списком", "topics_per_page": "Тем на странице", - "posts_per_page": "Записей на странице", - "max_items_per_page": "Максимум %1", - "acp_language": "Язык админ. панели", - "notification_sounds": "Воспроизводить звук во время получения уведомления", + "posts_per_page": "Сообщений на странице", + "max_items_per_page": "максимум %1", + "acp_language": "Язык панели администратора", + "notification_sounds": "Воспроизводить звук при получении уведомления", "notifications_and_sounds": "Уведомления и звуки", "incoming-message-sound": "Звук входящего сообщения", "outgoing-message-sound": "Звук исходящего сообщения", "notification-sound": "Звук уведомления", "no-sound": "Без звука", - "upvote-notif-freq": "Частота уведомлений о понравившемся отзыве", - "upvote-notif-freq.all": "Все положительные отзывы", - "upvote-notif-freq.first": "Первый по записи", - "upvote-notif-freq.everyTen": "Каждые десять понравившихся отзывов", + "upvote-notif-freq": "Частота уведомлений об изменении рейтинга сообщения", + "upvote-notif-freq.all": "Все уведомления", + "upvote-notif-freq.first": "Только первое", + "upvote-notif-freq.everyTen": "Каждые десять голосов", "upvote-notif-freq.threshold": "На 1, 5, 10, 25, 50, 100, 150, 200...", "upvote-notif-freq.logarithmic": "На 10, 100, 1000...", "upvote-notif-freq.disabled": "Выключено", "browsing": "Настройки просмотра", "open_links_in_new_tab": "Открывать внешние ссылки в новом окне", - "enable_topic_searching": "Поиск во всех записях темы", - "topic_search_help": "Если опция включена, поиск будет осуществляться по всем записям темы, а не только в видимых.", - "scroll_to_my_post": "Просмотр своего комментария сразу после его отправки.", - "follow_topics_you_reply_to": "Подписаться на темы, на которые вы отвечали", - "follow_topics_you_create": "Подписаться на созданные вами темы", - "grouptitle": "Ваши группы (выберите группу, чтобы добавить её бейдж на своё фото)", - "group-order-help": "Select a group and use the arrows to order titles", - "no-group-title": "Не показывать бейдж с названием группы на своём фото", - "select-skin": "Выбрать стиль сайта", - "select-homepage": "Установка первой страницы сайта", - "homepage": "Выберите страницу, с которой вам удобно начинать просмотр сайта", - "homepage_description": "При входе на сайт вы будете сначала видеть выбранную вами страницу. Установите 'None', чтобы видеть главную страницу по умолчанию.", - "custom_route": "Ввести название первой страницы вручную", - "custom_route_help": "Введите название страницы, например: users или tags, чтобы видеть страницу с участниками или метками самой первой.", - "sso.title": "Для вашего удобства вы можете связать ваши учётные записи на других социальных сервисах с учётной записью на нашем сайте", + "enable_topic_searching": "Включить поиск по сообщениям внутри тем", + "topic_search_help": "Когда эта опция включена, вместо стандартного поиска по странице ваш браузер будет использовать соответствующую функцию форума, которая позволит искать и среди сообщений, которые ещё не загружены.", + "scroll_to_my_post": "Пролистывать страницы к вашим новым сообщениям сразу после их отправки", + "follow_topics_you_reply_to": "Включать отслеживание во всех темах, в которых вы отвечаете", + "follow_topics_you_create": "Включать отслеживание всех тем, которые вы создаёте", + "grouptitle": "Значки групп", + "group-order-help": "Выберите группу и укажите порядок значков с помощью стрелок", + "no-group-title": "Не показывать значок группы", + "select-skin": "Стиль", + "select-homepage": "Настройка главной страницы", + "homepage": "Главная страница", + "homepage_description": "Выберите, на какую страницу вы будете попадать после авторизации и использовать как главную, или оставьте стандартную настройку.", + "custom_route": "Ваш маршрут для главной страницы", + "custom_route_help": "Введите адрес страницы, например, recent или popular — без слешей.", + "sso.title": "Сервисы единого входа", "sso.associated": "Связан с", "sso.not-associated": "Нажмите здесь, что бы связать учётную запись с", "sso.dissociate": "Открепить", "sso.dissociate-confirm-title": "Подтверждение открепления", - "sso.dissociate-confirm": "Вы уверены, что хотите открепить свой аккаунт от %1?", - "info.latest-flags": "Новые отмеченные сообщения", - "info.no-flags": "Отмеченных сообщений не найдено", - "info.ban-history": "Недавно заблокированы", + "sso.dissociate-confirm": "Вы уверены, что хотите открепить свою учётную запись от %1?", + "info.latest-flags": "Последние жалобы", + "info.no-flags": "Жалоб не найдено", + "info.ban-history": "История блокировок", "info.no-ban-history": "Этот пользователь никогда не был заблокирован", "info.banned-until": "Заблокирован до %1", "info.banned-permanently": "Заблокирован навсегда", @@ -162,15 +162,15 @@ "consent.received": "Вы дали согласие на этот сайт для сбора и обработки вашей информации. Никаких дополнительных действий не требуется.", "consent.not_received": "Вы не дали согласия на сбор и обработку данных. В любое время администрация этого веб-сайта может удалить вашу учетную запись, чтобы она соответствовала Общему правилу защиты данных (GDPR).", "consent.give": "Дать согласие", - "consent.right_of_access": "У вас есть права доступа", - "consent.right_of_access_description": "Вы имеете право на доступ к любым данным, собранным на этом веб-сайте по запросу. Вы можете получить копию этих данных, нажав соответствующую кнопку ниже.", - "consent.right_to_rectification": "У вас есть право на исправление", - "consent.right_to_rectification_description": "Вы имеете право изменять или обновлять любые неточные данные, предоставленные нам. Ваш профиль можно обновить, отредактировав свой профиль, а опубликованный контент всегда можно редактировать. Если это не так, обратитесь в административную группу этого сайта.", - "consent.right_to_erasure": "У вас есть право на удаление", - "consent.right_to_erasure_description": "В любое время вы можете отозвать свое согласие на сбор и / или обработку данных, удалив свою учетную запись. Ваш индивидуальный профиль можно удалить, хотя ваше размещенное содержимое останется. Если вы хотите удалить как свою учетную запись, так и и свой контент, пожалуйста, свяжитесь с администрацией этого веб-сайта.", + "consent.right_of_access": "У вас есть право на доступ к данным", + "consent.right_of_access_description": "Вы имеете право запросить доступ к любым данным, собранным на этом веб-сайте. Чтобы получить копию этих данных, нажмите на кнопку ниже.", + "consent.right_to_rectification": "У вас есть право на исправление данных", + "consent.right_to_rectification_description": "Вы имеете право изменять или обновлять любые неточные данные, предоставленные нам. Вы всегда можете отредактировать ваш профиль или ваши сообщения. Если это не так, обратитесь к администраторам сайта.", + "consent.right_to_erasure": "У вас есть право на удаление данных", + "consent.right_to_erasure_description": "В любое время вы можете отозвать свое согласие на сбор и/или обработку данных, удалив свою учётную запись. Ваш индивидуальный профиль можно удалить, хотя ваши сообщения останутся. Если вы хотите удалить как свою учётную запись, так и контент, пожалуйста, свяжитесь с администрацией сайта.", "consent.right_to_data_portability": "У вас есть право на перенос данных", "consent.right_to_data_portability_description": "Вы можете запросить у нас машиночитаемый экспорт любых собранных данных о вас и вашей учетной записи. Вы можете сделать это, нажав соответствующую кнопку ниже.", "consent.export_profile": "Экспорт профиля (.csv)", "consent.export_uploads": "Экспорт загруженного контента (.zip)", - "consent.export_posts": "Экспорт постов (.csv)" + "consent.export_posts": "Экспорт сообщений (.csv)" } \ No newline at end of file diff --git a/public/language/ru/users.json b/public/language/ru/users.json index cd418ae032..09670a5481 100644 --- a/public/language/ru/users.json +++ b/public/language/ru/users.json @@ -2,21 +2,21 @@ "latest_users": "Новые пользователи", "top_posters": "Самые активные", "most_reputation": "Лучшая репутация", - "most_flags": "Больше всего отмеченных", + "most_flags": "Больше всего жалоб", "search": "Поиск", "enter_username": "Введите имя пользователя для поиска", "load_more": "Загрузить еще", - "users-found-search-took": "Найдено участников: %1. Поиск занял %2 сек.", + "users-found-search-took": "Найдено пользователей: %1! Поиск занял %2 с.", "filter-by": "Сортировать по", "online-only": "Только онлайн", "invite": "Пригласить", "prompt-email": "Адреса электронной почты:", - "invitation-email-sent": "Приглашение для участника %1 было отправлено по электронной почте", - "user_list": "Список участников", + "invitation-email-sent": "Письмо с приглашением для %1 отправлено", + "user_list": "Список пользователей", "recent_topics": "Последние темы", "popular_topics": "Популярные темы", "unread_topics": "Непрочитанные темы", - "categories": "Сообщества", + "categories": "Категории", "tags": "Метки", - "no-users-found": "Участники не найдены!" + "no-users-found": "Пользователи не найдены!" } \ No newline at end of file diff --git a/public/language/rw/admin/manage/users.json b/public/language/rw/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/rw/admin/manage/users.json +++ b/public/language/rw/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/rw/admin/settings/post.json b/public/language/rw/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/rw/admin/settings/post.json +++ b/public/language/rw/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index 5caaa9e004..54a2cff4f6 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Izina ryarafashwe mbere", "email-taken": "Email yarafashwe mbere", - "email-not-confirmed": "Email yawe ntabwo iremezwa. Kanda hano kugirango wemeze email yawe.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Ntabwo uremererwa kuganirira mu gikari kuko email yawe itari yemezwa. Kanda hano kugirango wemeze email yawe. ", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Uru rubuga rusaba ko wemeza ko utunze email. Kanda hano kugirango utange email yawe", "email-confirm-failed": "Ntabwo email yawe yabashije kwemezwa. Ongera ugerageze mu bundi buryo. ", "confirm-email-already-sent": "Email yo kwemeza yamaze koherezwa. Tegereza iminota (umunota) %1 mbere yo kohereza indi. ", diff --git a/public/language/sc/admin/manage/users.json b/public/language/sc/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/sc/admin/manage/users.json +++ b/public/language/sc/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/sc/admin/settings/post.json b/public/language/sc/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/sc/admin/settings/post.json +++ b/public/language/sc/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/sc/error.json b/public/language/sc/error.json index 8140d65b4d..b84fe2a1c5 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", "username-taken": "Username taken", "email-taken": "Email taken", - "email-not-confirmed": "Your email has not been confirmed yet, please click here to confirm your email.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", - "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", diff --git a/public/language/sk/admin/manage/users.json b/public/language/sk/admin/manage/users.json index d95e1830fa..b68c4e2708 100644 --- a/public/language/sk/admin/manage/users.json +++ b/public/language/sk/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Odstrániť používateľa", "purge": "Odstrániť používateľa a obsah", "download-csv": "Stiahnuť ako CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Pozvať", "new": "Nový používateľ", diff --git a/public/language/sk/admin/settings/post.json b/public/language/sk/admin/settings/post.json index 1fbf4e5498..4b1a1e982c 100644 --- a/public/language/sk/admin/settings/post.json +++ b/public/language/sk/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Časový odtlačok", "timestamp.cut-off": "Dátum ukončenia (v dňoch)", "timestamp.cut-off-help": "Dátum a čas bude zobrazený relatívne (t.j. „pred 3 hodinami“ / „pred 5 dňami“), a podľa tohto lokalizovaný do rôznych\n\t\t\t\t\tjazykov. Za určitých okolností, môže byť tento text prepnutý na lokalizovaný dátum\n\t\t\t\t\t(t.j. 5 Nov 2017 15:30).
(predvolené: 30, alebo mesiac). Nastavte na 0, pre zobrazenie dátumov, ak ponecháte prázdne, bude vždy zobrazený relatívny čas.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Ukážka príspevku", "teaser.last-post": "Posledný - zobrazenie posledného príspevku, vrátane hlavného príspevku, ak nie sú odpovede", "teaser.last-reply": "Posledný - zobrazenie poslednej odpovede, alebo ak nie sú žiadne odpovede textu „Bez odpovede”", diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 411214b8b7..03cc147462 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Neplatná stránkovania hodnota, musí byť najmenej %1 a najviac %2", "username-taken": "Užívateľské meno je už obsadené", "email-taken": "Tento e-mail je už obsadený", - "email-not-confirmed": "Váš e-mail nebol ešte overený. Prosím kliknite sem, pre overenie Vášho e-mailu.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Nemôžete vytvoriť konverzáciu pokiaľ Váš e-mail nebude overený. Prosím kliknite sem, pre overenie Vášho e-mailu.", - "email-not-confirmed-email-sent": "Váš e-mail zatiaľ nebol overený, prosíme skontrolujte si svoju doručenú poštu pre overenie e-mailu.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Pre toto fórum je potrebné overenie e-mailom. Prosím kliknite sem, pre zadanie e-mailu.", "email-confirm-failed": "Momentálne nemôžeme overiť Váš e-mail, prosím zopakujte to neskôr.", "confirm-email-already-sent": "Overovací e-mail už bol odoslaný. Prosím počkajte %1 minút(y) k odoslaniu ďalšieho.", diff --git a/public/language/sl/admin/manage/users.json b/public/language/sl/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/sl/admin/manage/users.json +++ b/public/language/sl/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/sl/admin/settings/post.json b/public/language/sl/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/sl/admin/settings/post.json +++ b/public/language/sl/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/sl/error.json b/public/language/sl/error.json index 9074f79cb9..e3f59963c1 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Napačna vrednost za številčenje strani. Vrednost mora biti najmanj %1 in največ %2.", "username-taken": "Uporabniško ime je že zasedeno.", "email-taken": "E-poštni naslov je že zaseden.", - "email-not-confirmed": "Vaš e-poštni naslov še ni bil potrjen. Prosimo, kliknite tu za potrditev e-poštnega naslova.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Ne morete klepetati, dokler ne potrdite svojega e-poštnega naslova. Prosimo, kliknite tu za potrditev e-poštnega naslova.", - "email-not-confirmed-email-sent": "Vaš e-poštni naslov še ni bil potrjen. Prosimo, preverite svojo mapo Prejeto.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Ta forum zahteva potrjen e-poštni naslov. Prosim, kliknite tu za vnos e-poštnega naslova.", "email-confirm-failed": "Potrditev vašega e-poštnega naslova ni uspela. Prosimo, poskusite ponovno pozneje.", "confirm-email-already-sent": "Potrditveno e-sporočilo je že bilo poslano. Prosimo, počakajte %1 min za ponovno pošiljanje.", diff --git a/public/language/sr/admin/manage/users.json b/public/language/sr/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/sr/admin/manage/users.json +++ b/public/language/sr/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/sr/admin/settings/post.json b/public/language/sr/admin/settings/post.json index d7f91e88e1..c7a624c968 100644 --- a/public/language/sr/admin/settings/post.json +++ b/public/language/sr/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Vremenski žig", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Datumi & vreme će biti pokazano na relativan način (npr. \"pre 3 sata\" / \"pre 5 dana\"), i lokalizovano na različite\n\t\t\t\t\tjezike. Posle određenog vremena, ovaj tekst može biti promenjen na lokalizovani datum\n\t\t\t\t\t(npr. 5 Nov 2016 15:30).
(Uobičajeno: 30, ili jedan mesec). Postavi na 0 da uvek prikaže datume, ostavi prazno da uvek prikaže relativno vreme.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Post zadirkivač", "teaser.last-post": "Poslednji &ndashč Pokazuje poslednji post, uključujući originalni post, ako nema odgovora", "teaser.last-reply": "Poslednji &ndashč Pokaži najnoviji odgovor, ili ako \"Nema odgovora\" placeholder ako nema odgovora", diff --git a/public/language/sr/error.json b/public/language/sr/error.json index 6dd410627c..5c4d364ad2 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Неважећа вредност приликом нумерисања страница, мора бити најмање %1 а највише %2 ", "username-taken": "Корисничко име је заузето", "email-taken": "Адреса е-поште је заузета", - "email-not-confirmed": "Ваша адреса е-поште још увек није оверена, кликните овде да би сте то учинили.", - "email-not-confirmed-chat": "Није вам дозвољено да ћаскате док не оверите вашу е-пошту, кликните овде да то учините.", - "email-not-confirmed-email-sent": "Ваша е-пошта још увек није потврђена, молимо проверите ваше пријемно сандуче.", + "email-not-confirmed": "Није вам дозвољено да шаљете поруке док не потврдите вашу е-пошту, кликните овде да то учините.", + "email-not-confirmed-chat": "Није вам дозвољено да ћаскате док не потврдите вашу е-пошту, кликните овде да то учините.", + "email-not-confirmed-email-sent": "Ваша е-пошта још увек није потврђена, проверите ваше пријемно сандуче. Неће вам бити дозвољено да шаљете поруке или ћаскате док не потврдите е-пошту.", "no-email-to-confirm": "Форум захтева потврду е-поште, кликните овде да бисте навели е-пошту", "email-confirm-failed": "Потврда е-поште није успела, молимо вас да покушате касније.", "confirm-email-already-sent": "Е-порука за потврду је већ послата, молимо вас да сачекате %1 минут(а) да бисте послали други.", diff --git a/public/language/sv/admin/manage/users.json b/public/language/sv/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/sv/admin/manage/users.json +++ b/public/language/sv/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/sv/admin/settings/post.json b/public/language/sv/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/sv/admin/settings/post.json +++ b/public/language/sv/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 249a5e507d..333ab54cda 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Ogiltigt värde för siduppdelning. Värdet måste vara mellan %1 och %2", "username-taken": "Användarnamn upptaget", "email-taken": "Epostadress upptagen", - "email-not-confirmed": "Din epostadress är ännu inte bekräftad. Klicka här för att bekräfta din epostadress.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Du kan ej använda chatten förrän din epostadress har blivit bekräftad, var god klicka här för att bekräfta din epostadress.", - "email-not-confirmed-email-sent": "Din epostadress är ännu inte bekräftad. Leta efter bekräftelsen i din epost.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Detta forum kräver bekräftning av epostadresser, var god klicka här för att fylla i en epostadress", "email-confirm-failed": "Vi kunde ej bekräfta din epostadress, var god försök igen senare.", "confirm-email-already-sent": "Bekräftningsbrev redan skickat, var god vänta %1 minut(er) innan du skickar ett nytt.", diff --git a/public/language/th/admin/manage/users.json b/public/language/th/admin/manage/users.json index d70bea6fc0..bb5c864ad9 100644 --- a/public/language/th/admin/manage/users.json +++ b/public/language/th/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "ลบผู้ใช้งาน", "purge": "ลบผู้ใช้งานและเนื้อหา", "download-csv": "ดาวน์โหลด CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "เชิญ", "new": "ผู้ใช้งานใหม่", diff --git a/public/language/th/admin/settings/post.json b/public/language/th/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/th/admin/settings/post.json +++ b/public/language/th/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/th/error.json b/public/language/th/error.json index 30ec98881a..52d5483f07 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "หมายเลขหน้าไม่ถูกต้อง จำเป็นต้องเป็นตัวเลขอย่างน้อย %1 และอย่างมาก %2", "username-taken": "ชื่อผู้ใช้นี้มีการใช้แล้ว", "email-taken": "อีเมลนี้มีการใช้แล้ว", - "email-not-confirmed": "ยังไม่มีการยืนยันอีเมลของคุณ, โปรดกดยืนยันอีเมลของคุณตรงนี้", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "คุณไม่สามารถแชทได้จนกว่าอีเมล์ของคุณจะได้รับการยืนยัน กรุณาคลิกที่นี่เพื่อยืนยันอีกมเมล์ของคุณ", - "email-not-confirmed-email-sent": "อีเมล์ของคุณยังไม่ได้รับการยืนยัน กรุณาเช็คกล่องข้อความในอีเมล์เพื่อกดยืนยัน", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Forum นี้ต้องการการยืนยันอีเมล กรุณากดที่นี่เพื่อระบุอีเมล", "email-confirm-failed": "เราไม่สามารถยืนยันอีเมลของคุณ ณ ขณะนี้ กรุณาลองใหม่อีกครั้งภายหลัง", "confirm-email-already-sent": "อีเมล์ยืนยันตัวตนถูกส่งไปยังคุณเรียบร้อยแล้ว กรุณารอ %1 นาที(s) ก่อนการตัดสินใจส่งอีกครั้ง", diff --git a/public/language/tr/admin/manage/users.json b/public/language/tr/admin/manage/users.json index f52e89aa96..990df5b80b 100644 --- a/public/language/tr/admin/manage/users.json +++ b/public/language/tr/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Kullanıcı(ları) Sil", "purge": "Kullanıcıyı(ları) ve İçeriği Sil", "download-csv": "CSV İndir", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Davet et", "new": "Yeni Kullanıcı", diff --git a/public/language/tr/admin/settings/post.json b/public/language/tr/admin/settings/post.json index 3b6b04396f..3813a19dcd 100644 --- a/public/language/tr/admin/settings/post.json +++ b/public/language/tr/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Zaman Damgası", "timestamp.cut-off": "Kapanış tarihi (günler)", "timestamp.cut-off-help": "Tarihler ve & zamanlar göreli bir şekilde (ör. \"3 saat önce\" / \"5 gün önce\") gösterilecek ve çeşitli dillerde yerleştirilecektir.\n\t\t\t\t\tBelirli bir noktadan sonra, bu metin yerelleştirilmiş tarihi göstermek için değiştirilebilir.\n\t\t\t\t\t(ör. 5 Kasım 2016 15:30).
(Varsayılan: 30, veya bir ay). Tarihleri her zaman görüntülemek için 0'a ayarlayın, her zaman göreli zamanları görüntülemek için boş bırakın.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser İleti", "teaser.last-post": "Son – cevap yoksa orijinal gönderi de dahil olmak üzere en son gönderiyi gösterir.", "teaser.last-reply": "Son – cevap yoksa en son yanıtı veya \"Yanıt yok\" yertutucusunu gösterir.", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index f0b971c310..c8caa73ec8 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Geçersiz sayfalama değeri, en az %1 ve en fazla %2 olabilir", "username-taken": "Kullanıcı İsmi Alınmış", "email-taken": "E-posta Alınmış", - "email-not-confirmed": "E-postanız onaylanmamış, onaylamak için lütfen buraya tıklayın.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "E-postanız onaylanana kadar sohbet edemezsiniz, onaylamak için lütfen buraya tıklayın.", - "email-not-confirmed-email-sent": "E-postanız onaylanmamış, onaylamak için lütfen gelen kutunuzu kontrol edin.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Bu forum e-posta doğrulaması gerektirir, lütfen buraya bir e-posta adresi girin", "email-confirm-failed": "E-posta adresinizi doğrulayamıyoruz. Lütfen daha sonra tekrar deneyin.", "confirm-email-already-sent": "E-posta onayı zaten gönderilmiş, yeni bir onay göndermek için lütfen %1 dakika bekleyin.", diff --git a/public/language/uk/admin/manage/users.json b/public/language/uk/admin/manage/users.json index 73fb84c3b1..7a7e7e064e 100644 --- a/public/language/uk/admin/manage/users.json +++ b/public/language/uk/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Видалити", "purge": "Видалити разом зі змістом", "download-csv": "Скачати CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Запросити", "new": "Новий користувач", diff --git a/public/language/uk/admin/settings/post.json b/public/language/uk/admin/settings/post.json index 02249c8834..fd65fccb0e 100644 --- a/public/language/uk/admin/settings/post.json +++ b/public/language/uk/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Часова мітка", "timestamp.cut-off": "Обрізка дат (в днях)", "timestamp.cut-off-help": "Дата і час показуються відносно (тобто \"3 години тому\" / \"5 днів тому\"). Після певного періоду часу, цей текст може бути змінено на звичайну дати (тобто 5 Лис 2016 15:30).
(Типово: 30, або один місяць). Вкажіть 0, щоб завжди показувати дати або залиште пустим, щоб завжди показувати відносний час.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Пост тизер", "teaser.last-post": "Останній — показувати останній пост або перший, якщо немає відповідей", "teaser.last-reply": "Останній — показувати останній пост або \"Немає відповідей\", якщо немає відповідей", diff --git a/public/language/uk/error.json b/public/language/uk/error.json index 3bb9e4b0e3..0d7ea48f09 100644 --- a/public/language/uk/error.json +++ b/public/language/uk/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Невірне значення сторінки, має бути щонайменше %1 та щонайбільше %2", "username-taken": "Це ім'я зайняте", "email-taken": "Ця електронна пошта зайнята", - "email-not-confirmed": "Ваша електронна пошта ще не підтверджена, натисніть тут, щоб це зробити.", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Ви не можете користуватися чатом поки ваша електронна пошта не буде підтверджена, натисніть тут, щоб це зробити.", - "email-not-confirmed-email-sent": "Ваша електронна пошта ще не підтверджена, перевірте свої вхідні повідомлення на наявність підтверджувального листа.", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Цей форум вимагає підтвердження електронної пошти, будь-ласка, натисніть тут, щоб його ввести.", "email-confirm-failed": "Ми не можемо підтвердити вашу електронну пошту, будь ласка, спробуйте пізніше.", "confirm-email-already-sent": "Підтвердження по електронній пошті вже було надіслано, зачекайте, будь ласка, %1 хвилин(и), щоб відправити ще одне. ", diff --git a/public/language/vi/admin/manage/users.json b/public/language/vi/admin/manage/users.json index 01088037f2..ae225d5b6f 100644 --- a/public/language/vi/admin/manage/users.json +++ b/public/language/vi/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "Invite", "new": "New User", diff --git a/public/language/vi/admin/settings/post.json b/public/language/vi/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/vi/admin/settings/post.json +++ b/public/language/vi/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/vi/error.json b/public/language/vi/error.json index bb2caad21e..5d77d2e328 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "Giá trị trang không hợp lệ, tối thiểu phải là %1 và tối đa là %2", "username-taken": "Tên đăng nhập đã tồn tại", "email-taken": "Email đã được đăng kí", - "email-not-confirmed": "Email của bạn chưa được xác nhận, xin hãy nhấn vào đây để xác nhận địa chỉ này là của bạn", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "Bạn không được quyền chat nếu email của bạn chưa được xác nhận, vui lòng click vào đây để xác nhận email của bạn.", - "email-not-confirmed-email-sent": "Email của bạn chưa được xác nhận, xin hãy nhấn vào đây để xác nhận địa chỉ này là của bạn", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "Diễn đàn này yêu cầu xác nhận email, vui lòng nhấn vào đây để nhập email.", "email-confirm-failed": "Chúng tôi không thể xác nhận email của bạn, vui lòng thử lại sau.", "confirm-email-already-sent": "Email xác nhận đã được gửi, vui lòng chờ %1 phút để yêu cầu gửi lại.", diff --git a/public/language/zh-CN/admin/manage/digest.json b/public/language/zh-CN/admin/manage/digest.json index 38eebdd716..1a9554af43 100644 --- a/public/language/zh-CN/admin/manage/digest.json +++ b/public/language/zh-CN/admin/manage/digest.json @@ -1,21 +1,21 @@ { - "lead": "A listing of digest delivery stats and times is displayed below.", - "disclaimer": "Please be advised that email delivery is not guaranteed, due to the nature of email technology. Many variables factor into whether an email sent to the recipient server is ultimately delivered into the user's inbox, including server reputation, blacklisted IP addresses, and whether DKIM/SPF/DMARC is configured.", - "disclaimer-continued": "A successful delivery means the message was sent successfully by NodeBB and acknowledged by the recipient server. It does not mean the email landed in the inbox. For best results, we recommend using a third-party email delivery service such as SendGrid.", + "lead": "以下是摘要发送状态及时间列表", + "disclaimer": "请注意,由于email技术本身的原因,邮件发送无法保证送达。有很多因素都会导致邮件无法送达用户的收件箱,比如服务拒绝,IP地址黑名单,DNS记录DKIM/SPF/DMARC类型配置。", + "disclaimer-continued": "成功发送意味道消息被 NodeBB 成功发送且被接收人服务器收到。但这并不等同于邮件发送到了收件箱中。为了确保消息可以准确送达,我们建议使用第三方的邮件服务,例如SendGrid。", "user": "用户", - "subscription": "Subscription Type", - "last-delivery": "Last successful delivery", + "subscription": "订阅类型", + "last-delivery": "上次成功通知", "default": "系统默认", - "default-help": "System default means the user has not explicitly overridden the global forum setting for digests, which is currently: "%1"", - "resend": "Resend Digest", - "resend-all-confirm": "Are you sure you wish to mnually execute this digest run?", - "resent-single": "Manual digest resend completed", - "resent-day": "Daily digest resent", - "resent-week": "Weekly digest resent", - "resent-month": "Monthly digest resent", - "null": "Never", - "manual-run": "Manual digest run:", + "default-help": "System default 表示用户尚未明确覆盖摘要的全局论坛设置,该设置当前为: “%1“", + "resend": "重发摘要", + "resend-all-confirm": "您确认要手动执行这个摘要吗?", + "resent-single": "摘要重发操作完成", + "resent-day": "已发送每日摘要", + "resent-week": "已发送每周摘要", + "resent-month": "已发送每月摘要", + "null": "从不", + "manual-run": "手动运行摘要:", - "no-delivery-data": "No delivery data found" + "no-delivery-data": "找不到递交的数据" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json index 06d7100fd7..ad1cf75ff0 100644 --- a/public/language/zh-CN/admin/manage/users.json +++ b/public/language/zh-CN/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "删除用户", "purge": "删除用户和内容", "download-csv": "下载CSV", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "邀请", "new": "新建用户", diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index 7306b9c753..87a02ebb11 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -18,7 +18,7 @@ "manage/groups": "群组", "manage/ip-blacklist": "IP 黑名单", "manage/uploads": "上传", - "manage/digest": "Digests", + "manage/digest": "摘要", "section-settings": "设置", "settings/general": "通用", diff --git a/public/language/zh-CN/admin/settings/post.json b/public/language/zh-CN/admin/settings/post.json index 480032bbd0..b79f69e561 100644 --- a/public/language/zh-CN/admin/settings/post.json +++ b/public/language/zh-CN/admin/settings/post.json @@ -12,7 +12,7 @@ "restrictions-new": "新用户限制", "restrictions.post-queue": "启用发帖队列", "restrictions.post-queue-rep-threshold": "忽略发帖队列的威望值", - "restrictions.groups-exempt-from-post-queue": "Select groups that should be exempt from the post queue", + "restrictions.groups-exempt-from-post-queue": "选择会被从提交队列豁免的分组", "restrictions-new.post-queue": "启用新用户限制", "restrictions.post-queue-help": "启用发帖队列会将新用户的发帖放入审核队列", "restrictions-new.post-queue-help": "启用新用户限制将对新用户创建的帖子设置限制", @@ -32,6 +32,8 @@ "timestamp": "时间戳", "timestamp.cut-off": "截止日期(天)", "timestamp.cut-off-help": "日期&时间将以相对方式 (例如,“3小时前” / “5天前”) 显示,并且会依照访客语言时区转换。在某一时刻之后,可以切换该文本以显示本地化日期本身 (例如2016年11月5日15:30) 。
(默认值: 30 或一个月) 。 设置为0可始终显示日期,留空以始终显示相对时间。", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "预览帖子", "teaser.last-post": "最后– 显示最新的帖子,包括原帖,如果没有回复", "teaser.last-reply": "最后– 显示最新回复,如果没有回复,则显示“无回复”占位符", diff --git a/public/language/zh-CN/email.json b/public/language/zh-CN/email.json index f1dcfc36e7..dede6a60e9 100644 --- a/public/language/zh-CN/email.json +++ b/public/language/zh-CN/email.json @@ -34,7 +34,7 @@ "notif.chat.cta": "点击这里继续会话", "notif.chat.unsub.info": "根据您的订阅设置,为您发送此聊天提醒。", "notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。", - "notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking", + "notif.post.unsub.one-click": "或者通过点击来取消订阅邮件", "notif.cta": "点击这里前往论坛", "notif.cta-new-reply": "查看帖子", "notif.cta-new-chat": "查看聊天", @@ -43,7 +43,7 @@ "test.text1": "这是一封测试邮件,用来验证 NodeBB 的邮件配置是否设置正确。", "unsub.cta": "点击这里修改这些设置", "unsubscribe": "退订", - "unsub.success": "You will no longer receive emails from the %1 mailing list", + "unsub.success": "你将不再从%1邮寄名单接受邮件", "banned.subject": "您已被封禁从 %1", "banned.text1": "用户 %1 已被封禁从 %2.", "banned.text2": "封禁将持续到 %1.", diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index 549991493e..97474939ff 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -26,14 +26,14 @@ "invalid-pagination-value": "无效的分页数值,必须介于 %1 和 %2 之间", "username-taken": "此用户名已被占用", "email-taken": "此电子邮箱已被占用", - "email-not-confirmed": "您的电子邮箱尚未确认,请点击这里确认您的电子邮箱。", + "email-not-confirmed": "在您的电子邮件账户被确认前,您不能发帖。", "email-not-confirmed-chat": "您的电子邮箱尚未确认,无法聊天,请点击这里确认您的电子邮箱。", - "email-not-confirmed-email-sent": "您的邮箱地址还没有被确认,请检查邮箱中的确认邮件。", + "email-not-confirmed-email-sent": "您的电子邮件账户尚未确认,请检查您的收件箱。在电子邮件帐户被确认前您不能发帖和聊天。", "no-email-to-confirm": "本论坛需要电子邮箱确认,请点击这里输入电子邮箱地址", "email-confirm-failed": "我们无法确认您的电子邮箱,请重试", "confirm-email-already-sent": "确认邮件已发出,如需重新发送请等待 %1 分钟后再试。", "sendmail-not-found": "无法找到 sendmail 可执行程序,请确保 sendmail 已经安装并可被运行 NodeBB 的用户执行", - "digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests", + "digest-not-enabled": "此用户未开启摘要通知,或系统配置默认不发送摘要", "username-too-short": "用户名太短", "username-too-long": "用户名太长", "password-too-long": "密码太长", diff --git a/public/language/zh-TW/admin/general/dashboard.json b/public/language/zh-TW/admin/general/dashboard.json index 37ae537786..ee1f8c0779 100644 --- a/public/language/zh-TW/admin/general/dashboard.json +++ b/public/language/zh-TW/admin/general/dashboard.json @@ -2,7 +2,7 @@ "forum-traffic": "Forum Traffic", "page-views": "Page Views", "unique-visitors": "Unique Visitors", - "new-users": "New Users", + "new-users": "新的使用者", "posts": "Posts", "topics": "Topics", "page-views-seven": "Last 7 Days", diff --git a/public/language/zh-TW/admin/manage/users.json b/public/language/zh-TW/admin/manage/users.json index 733971c75e..63b9d7463a 100644 --- a/public/language/zh-TW/admin/manage/users.json +++ b/public/language/zh-TW/admin/manage/users.json @@ -15,6 +15,8 @@ "delete": "Delete User(s)", "purge": "Delete User(s) and Content", "download-csv": "下載 CSV 檔案", + "manage-groups": "Manage Groups", + "add-group": "Add Group", "invite": "邀請", "new": "New User", diff --git a/public/language/zh-TW/admin/settings/post.json b/public/language/zh-TW/admin/settings/post.json index 096b69026f..da708f4c6c 100644 --- a/public/language/zh-TW/admin/settings/post.json +++ b/public/language/zh-TW/admin/settings/post.json @@ -32,6 +32,8 @@ "timestamp": "Timestamp", "timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).
(Default: 30, or one month). Set to 0 to always display dates, leave blank to always display relative times.", + "timestamp.necro-threshold": "Necro Threshold (in days)", + "timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: 7, or one week). Set to 0 to disable.", "teaser": "Teaser Post", "teaser.last-post": "Last – Show the latest post, including the original post, if no replies", "teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies", diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json index d3e7911ad2..fb6290b1aa 100644 --- a/public/language/zh-TW/error.json +++ b/public/language/zh-TW/error.json @@ -26,9 +26,9 @@ "invalid-pagination-value": "無效的分頁值, 必需是至少 %1 與最多 %2", "username-taken": "該使用者名稱已被使用", "email-taken": "該信箱已被使用", - "email-not-confirmed": "你的電子郵件尚未確認,請點擊此處確認你的電子郵件。", + "email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed-chat": "你需要先確認電子郵件後才能進行聊天,請點擊這裡來確認你的電子郵件。", - "email-not-confirmed-email-sent": "你的電子郵件地址還沒有確認,請確認一下你的信箱是否有確認信。", + "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "no-email-to-confirm": "此討論區要求確認電子郵件,請點擊這裡輸入一個電子郵件。", "email-confirm-failed": "我們無法確認你的Email,請之後再重試。", "confirm-email-already-sent": "確認信已寄出,請稍後 %1 分鐘才能再寄下一封。", diff --git a/public/less/admin/admin.less b/public/less/admin/admin.less index dc657a37ec..be905caf81 100644 --- a/public/less/admin/admin.less +++ b/public/less/admin/admin.less @@ -16,7 +16,7 @@ @import "./manage/registration"; @import "./manage/users"; @import "./manage/admins-mods"; -@import "./manage/post-queue"; +@import "../post-queue"; @import "./appearance/customise"; @import "./appearance/themes"; @import "./extend/plugins"; diff --git a/public/less/admin/manage/post-queue.less b/public/less/admin/manage/post-queue.less deleted file mode 100644 index b4139e02ef..0000000000 --- a/public/less/admin/manage/post-queue.less +++ /dev/null @@ -1,8 +0,0 @@ -.posts-list { - .post-content-editable { - textarea { - width: 100%; - height: 300px; - } - } -} diff --git a/public/less/admin/manage/users.less b/public/less/admin/manage/users.less index 0ab74c7544..097c13d4ac 100644 --- a/public/less/admin/manage/users.less +++ b/public/less/admin/manage/users.less @@ -1,57 +1,19 @@ .manage-users { min-height: 500px; - - #users-container { - border: 1px solid #eee; - padding: 0px 20px 20px; - - .users-box { - display: inline-block; - margin-top: 20px; - text-align: center; - vertical-align: top; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - height: auto; - max-width: 145px; - min-width: 145px; - padding: 1rem; - - img, .user-icon { - .user-icon-style(80px, 4rem); - } - - a { - margin-bottom:5px; - font-size: 12px; - } - - .user-image { - position: relative; - - .labels { - position: absolute; - bottom: 0px; - width: 100%; - - span { - width: 100%; - opacity: 0.9; - font-size: 10px; - display: block; - border-radius: 0; - } - } - } - } - - .ui-selected { - background: lighten(@brand-success, 25%); - } - - .ui-selecting { - background: lighten(@brand-success, 40%); + .search { + .form-control { + width: 100%; } } +} + +.page-admin-users { + .group-card { + margin: 2px; + padding: 2px; + } + + .remove-group-icon { + margin-left: 5px; + } } \ No newline at end of file diff --git a/public/less/post-queue.less b/public/less/post-queue.less new file mode 100644 index 0000000000..c59f6452a0 --- /dev/null +++ b/public/less/post-queue.less @@ -0,0 +1,19 @@ +/* + Post queue page CSS + - Originally in ACP + - Now available in front-end for global mods as well +*/ +.posts-list { + .topic-title { + word-break: break-word; + } + .post-content { + word-break: break-word; + } + .post-content-editable { + textarea { + width: 100%; + height: 300px; + } + } +} diff --git a/public/src/admin/manage/groups.js b/public/src/admin/manage/groups.js index 6c4276c268..bab28bfa16 100644 --- a/public/src/admin/manage/groups.js +++ b/public/src/admin/manage/groups.js @@ -101,7 +101,7 @@ define('admin/manage/groups', ['translator', 'benchpress'], function (translator }, function (html) { translator.translate(html, function (html) { groupsEl.find('[data-groupname]').remove(); - groupsEl.find('tr').after(html); + groupsEl.find('tbody').append(html); }); }); }); diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index d70808a8b7..dd3554d11b 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -1,13 +1,12 @@ 'use strict'; - -define('admin/manage/users', ['translator', 'benchpress'], function (translator, Benchpress) { +define('admin/manage/users', ['translator', 'benchpress', 'autocomplete'], function (translator, Benchpress, autocomplete) { var Users = {}; Users.init = function () { var navPills = $('.nav-pills li'); var pathname = window.location.pathname; - if (!navPills.find('a[href^="' + pathname + '"]').length) { + if (!navPills.find('a[href^="' + pathname + '"]').length || pathname === config.relative_path + '/admin/manage/users') { pathname = config.relative_path + '/admin/manage/users/latest'; } navPills.removeClass('active').find('a[href^="' + pathname + '"]').parent().addClass('active'); @@ -59,11 +58,56 @@ define('admin/manage/users', ['translator', 'benchpress'], function (translator, } $('[component="user/select/all"]').on('click', function () { - if ($(this).is(':checked')) { - $('.users-table [component="user/select/single"]').prop('checked', true); - } else { - $('.users-table [component="user/select/single"]').prop('checked', false); + $('.users-table [component="user/select/single"]').prop('checked', $(this).is(':checked')); + }); + + $('.manage-groups').on('click', function () { + var uids = getSelectedUids(); + if (!uids.length) { + app.alertError('[[error:no-users-selected]]'); + return false; } + socket.emit('admin.user.loadGroups', uids, function (err, data) { + if (err) { + return app.alertError(err); + } + Benchpress.parse('admin/partials/manage_user_groups', data, function (html) { + var modal = bootbox.dialog({ + message: utils.escapeHTML(html), + title: '[[admin/manage/users:manage-groups]]', + onEscape: true, + }); + modal.on('shown.bs.modal', function () { + autocomplete.group(modal.find('.group-search'), function (ev, ui) { + var uid = $(ev.target).attr('data-uid'); + socket.emit('admin.groups.join', { uid: uid, groupName: ui.item.value }, function (err) { + if (err) { + return app.alertError(err); + } + ui.item.group.nameEscaped = translator.escape(ui.item.group.displayName); + app.parseAndTranslate('admin/partials/manage_user_groups', { users: [{ groups: [ui.item.group] }] }, function (html) { + $('[data-uid=' + uid + '] .group-area').append(html.find('.group-area').html()); + }); + }); + }); + }); + modal.on('click', '.group-area a', function () { + modal.modal('hide'); + }); + modal.on('click', '.remove-group-icon', function () { + var groupCard = $(this).parents('[data-group-name]'); + var groupName = groupCard.attr('data-group-name'); + var uid = $(this).parents('[data-uid]').attr('data-uid'); + socket.emit('admin.groups.leave', { uid: uid, groupName: groupName }, function (err) { + if (err) { + return app.alertError(err); + } + groupCard.remove(); + }); + return false; + }); + }); + }); }); $('.ban-user').on('click', function () { @@ -321,8 +365,8 @@ define('admin/manage/users', ['translator', 'benchpress'], function (translator, Benchpress.parse('admin/manage/users', 'users', data, function (html) { translator.translate(html, function (html) { html = $(html); - $('.users-table tr').not(':first').remove(); - $('.users-table tr').first().after(html); + $('.users-table tbody tr').remove(); + $('.users-table tbody').append(html); html.find('.timeago').timeago(); $('.fa-spinner').addClass('hidden'); diff --git a/public/src/client/account/edit/password.js b/public/src/client/account/edit/password.js index 4f4353d6f8..964af3053e 100644 --- a/public/src/client/account/edit/password.js +++ b/public/src/client/account/edit/password.js @@ -76,12 +76,12 @@ define('forum/account/edit/password', ['forum/account/header', 'translator', 'zx currentPassword.val(''); password.val(''); password_confirm.val(''); + password_notify.parent().removeClass('show-success show-danger'); + password_confirm_notify.parent().removeClass('show-success show-danger'); passwordsmatch = false; passwordvalid = false; if (err) { - onPasswordChanged(); - onPasswordConfirmChanged(); return app.alertError(err.message); } if (parseInt(app.user.uid, 10) === parseInt(ajaxify.data.uid, 10)) { diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 61b000d8ac..6bcc05ddc2 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -261,8 +261,8 @@ define('forum/topic/posts', [ }; function addNecroPostMessage() { - var necroThreshold = 7 * 24 * 60 * 60 * 1000; - if (config.topicPostSort !== 'newest_to_oldest' && config.topicPostSort !== 'oldest_to_newest') { + var necroThreshold = ajaxify.data.necroThreshold * 24 * 60 * 60 * 1000; + if (!necroThreshold || (config.topicPostSort !== 'newest_to_oldest' && config.topicPostSort !== 'oldest_to_newest')) { return; } diff --git a/public/src/modules/autocomplete.js b/public/src/modules/autocomplete.js index 92f01e25b9..9baf4329f5 100644 --- a/public/src/modules/autocomplete.js +++ b/public/src/modules/autocomplete.js @@ -55,7 +55,12 @@ define('autocomplete', function () { app.loadJQueryUI(function () { input.autocomplete({ delay: 200, - select: onselect, + open: function () { + $(this).autocomplete('widget').css('z-index', 100005); + }, + select: function (event, ui) { + handleOnSelect(input, onselect, event, ui); + }, source: function (request, response) { socket.emit('groups.search', { query: request.term, @@ -63,16 +68,12 @@ define('autocomplete', function () { if (err) { return app.alertError(err.message); } - if (results && results.length) { var names = results.map(function (group) { return group && { label: group.name, value: group.name, - group: { - name: group.name, - slug: group.slug, - }, + group: group, }; }); response(names); diff --git a/public/src/utils.js b/public/src/utils.js index b647356308..b71c9dda48 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -487,9 +487,18 @@ }); }, + // https://github.com/sindresorhus/is-absolute-url + isAbsoluteUrlRE: /^[a-zA-Z][a-zA-Z\d+\-.]*:/, + isWinPathRE: /^[a-zA-Z]:\\/, + isAbsoluteUrl: function (url) { + if (utils.isWinPathRE.test(url)) { + return false; + } + return utils.isAbsoluteUrlRE.test(url); + }, + isRelativeUrl: function (url) { - var firstChar = String(url || '').charAt(0); - return (firstChar === '.' || firstChar === '/'); + return !utils.isAbsoluteUrl(url); }, makeNumbersHumanReadable: function (elements) { diff --git a/public/src/widgets.js b/public/src/widgets.js index 2ce59becb0..152ba80c6d 100644 --- a/public/src/widgets.js +++ b/public/src/widgets.js @@ -24,17 +24,17 @@ }); if (location === 'footer' && !$('#content [widget-area="footer"],#content [data-widget-area="footer"]').length) { - $('#content').append($('

')); + $('#content').append($('
')); } else if (location === 'sidebar' && !$('#content [widget-area="sidebar"],#content [data-widget-area="sidebar"]').length) { if ($('[component="account/cover"]').length) { - $('[component="account/cover"]').nextAll().wrapAll($('
')); + $('[component="account/cover"]').nextAll().wrapAll($('
')); } else if ($('[component="groups/cover"]').length) { - $('[component="groups/cover"]').nextAll().wrapAll($('
')); + $('[component="groups/cover"]').nextAll().wrapAll($('
')); } else { - $('#content > *').wrapAll($('
')); + $('#content > *').wrapAll($('
')); } } else if (location === 'header' && !$('#content [widget-area="header"],#content [data-widget-area="header"]').length) { - $('#content').prepend($('
')); + $('#content').prepend($('
')); } area = $('#content [widget-area="' + location + '"],#content [data-widget-area="' + location + '"]').eq(0); diff --git a/src/admin/versions.js b/src/admin/versions.js index 2f203a35a4..286c6de5cb 100644 --- a/src/admin/versions.js +++ b/src/admin/versions.js @@ -1,14 +1,14 @@ 'use strict'; -var semver = require('semver'); -var request = require('request'); +const semver = require('semver'); +const request = require('request'); -var meta = require('../meta'); +const meta = require('../meta'); -var versionCache = ''; -var versionCacheLastModified = ''; +let versionCache = ''; +let versionCacheLastModified = ''; -var isPrerelease = /^v?\d+\.\d+\.\d+-.+$/; +const isPrerelease = /^v?\d+\.\d+\.\d+-.+$/; function getLatestVersion(callback) { var headers = { diff --git a/src/cli/manage.js b/src/cli/manage.js index eb215982db..22ae9fe432 100644 --- a/src/cli/manage.js +++ b/src/cli/manage.js @@ -92,21 +92,39 @@ function activate(plugin) { }); } -function listPlugins() { - async.waterfall([ - function (next) { - db.init(next); - }, - function (next) { - db.getSortedSetRange('plugins:active', 0, -1, next); - }, - function (plugins) { - winston.info('Active plugins: \n\t - ' + plugins.join('\n\t - ')); - process.exit(); - }, - ], function (err) { - throw err; +async function listPlugins() { + await db.init(); + const installed = await plugins.showInstalled(); + const installedList = installed.map(plugin => plugin.name); + const active = await db.getSortedSetRange('plugins:active', 0, -1); + + // Merge the two sets, defer to plugins in `installed` if already present + let combined = installed.concat(active.reduce((memo, cur) => { + if (!installedList.includes(cur)) { + memo.push({ + id: cur, + active: true, + installed: false, + }); + } + + return memo; + }, [])); + + // Alphabetical sort + combined = combined.sort((a, b) => (a.id > b.id ? 1 : -1)); + + // Pretty output + process.stdout.write('Active plugins:\n'); + combined.forEach((plugin) => { + process.stdout.write('\t* ' + plugin.id + ' ('); + process.stdout.write(plugin.installed ? 'installed'.green : 'not installed'.red); + process.stdout.write(', '); + process.stdout.write(plugin.active ? 'enabled'.green : 'disabled'.yellow); + process.stdout.write(')\n'); }); + + process.exit(); } function listEvents(count) { diff --git a/src/cli/reset.js b/src/cli/reset.js index 9e040b3e2c..cb1eb041f3 100644 --- a/src/cli/reset.js +++ b/src/cli/reset.js @@ -84,12 +84,11 @@ exports.reset = async function (options) { /* eslint-disable no-await-in-loop */ await task(); } - winston.info('[reset] Reset complete'); - await require('../meta/build').buildAll(); + winston.info('[reset] Reset complete. Please run `./nodebb build` to rebuild assets.'); process.exit(0); } catch (err) { winston.error('[reset] Errors were encountered during reset -- ' + err.message); - throw err; + process.exit(1); } }; diff --git a/src/controllers/accounts/helpers.js b/src/controllers/accounts/helpers.js index 466f190b92..7a646651ac 100644 --- a/src/controllers/accounts/helpers.js +++ b/src/controllers/accounts/helpers.js @@ -11,6 +11,7 @@ const meta = require('../../meta'); const utils = require('../../utils'); const privileges = require('../../privileges'); const translator = require('../../translator'); +const messaging = require('../../messaging'); const helpers = module.exports; @@ -75,6 +76,7 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID) { userData.canChangePassword = isAdmin || (isSelf && !meta.config['password:disableEdit']); userData.isSelf = isSelf; userData.isFollowing = results.isFollowing; + userData.hasPrivateChat = results.hasPrivateChat; userData.showHidden = isSelf || isAdmin || (isGlobalModerator && !results.isTargetAdmin); userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : []; userData.disableSignatures = meta.config.disableSignatures === 1; @@ -132,6 +134,7 @@ async function getAllData(uid, callerUID) { canBanUser: privileges.users.canBanUser(callerUID, uid), isBlocked: user.blocks.is(uid, callerUID), canViewInfo: privileges.global.can('view:users:info', callerUID), + hasPrivateChat: messaging.hasPrivateChat(callerUID, uid), }); } diff --git a/src/controllers/accounts/profile.js b/src/controllers/accounts/profile.js index 37585921ff..83d4c0ef01 100644 --- a/src/controllers/accounts/profile.js +++ b/src/controllers/accounts/profile.js @@ -10,7 +10,6 @@ const plugins = require('../../plugins'); const meta = require('../../meta'); const accountHelpers = require('./helpers'); const helpers = require('../helpers'); -const messaging = require('../../messaging'); const utils = require('../../utils'); const profileController = module.exports; @@ -33,8 +32,7 @@ profileController.get = async function (req, res, next) { await incrementProfileViews(req, userData); - const [hasPrivateChat, latestPosts, bestPosts] = await Promise.all([ - messaging.hasPrivateChat(req.uid, userData.uid), + const [latestPosts, bestPosts] = await Promise.all([ getLatestPosts(req.uid, userData), getBestPosts(req.uid, userData), posts.parseSignature(userData, req.uid), @@ -47,7 +45,6 @@ profileController.get = async function (req, res, next) { userData.posts = latestPosts; // for backwards compat. userData.latestPosts = latestPosts; userData.bestPosts = bestPosts; - userData.hasPrivateChat = hasPrivateChat; userData.breadcrumbs = helpers.buildBreadcrumbs([{ text: userData.username }]); userData.title = userData.username; userData.allowCoverPicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:cover-picture']; @@ -89,7 +86,7 @@ async function getPosts(callerUid, userData, setSuffix) { const keys = cids.map(c => 'cid:' + c + ':uid:' + userData.uid + ':' + setSuffix); const pids = await db.getSortedSetRevRange(keys, 0, 9); const postData = await posts.getPostSummaryByPids(pids, callerUid, { stripTags: false }); - return postData.filter(p => p && !p.deleted); + return postData.filter(p => p && !p.deleted && p.topic && !p.topic.deleted); } function addMetaTags(res, userData) { diff --git a/src/controllers/authentication.js b/src/controllers/authentication.js index 11776c510c..56a0a11f20 100644 --- a/src/controllers/authentication.js +++ b/src/controllers/authentication.js @@ -34,6 +34,9 @@ async function registerAndLoginUser(req, res, userData) { userData.register = true; req.session.registration = userData; + if (req.body.referrer) { + req.session.referrer = req.body.referrer; + } if (req.body.noscript === 'true') { res.redirect(nconf.get('relative_path') + '/register/complete'); return; @@ -53,7 +56,10 @@ async function registerAndLoginUser(req, res, userData) { } user.deleteInvitationKey(userData.email); - return await plugins.fireHook('filter:register.complete', { uid: uid, referrer: req.body.referrer || nconf.get('relative_path') + '/' }); + const referrer = req.body.referrer || req.session.referrer || nconf.get('relative_path') + '/'; + const complete = await plugins.fireHook('filter:register.complete', { uid: uid, referrer: referrer }); + req.session.returnTo = complete.referrer; + return complete; } const registerAndLoginUserCallback = util.callbackify(registerAndLoginUser); @@ -413,7 +419,7 @@ authenticationController.logout = async function (req, res, next) { req.logout(); await destroyAsync(req); - res.clearCookie('express.sid', { + res.clearCookie(nconf.get('sessionKey'), { path: nconf.get('relative_path'), }); req.uid = 0; diff --git a/src/controllers/topics.js b/src/controllers/topics.js index 5ac12e629d..a42747c0d4 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -81,6 +81,7 @@ topicsController.get = async function getTopic(req, res, callback) { topicData['downvote:disabled'] = meta.config['downvote:disabled']; topicData['feeds:disableRSS'] = meta.config['feeds:disableRSS']; topicData.bookmarkThreshold = meta.config.bookmarkThreshold; + topicData.necroThreshold = meta.config.necroThreshold; topicData.postEditDuration = meta.config.postEditDuration; topicData.postDeleteDuration = meta.config.postDeleteDuration; topicData.scrollToMyPost = settings.scrollToMyPost; diff --git a/src/controllers/users.js b/src/controllers/users.js index 358dcd2c5c..e6cbffaaf8 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -138,8 +138,9 @@ usersController.getUsers = async function (set, uid, query) { const start = Math.max(0, page - 1) * resultsPerPage; const stop = start + resultsPerPage - 1; - const [isAdminOrGlobalMod, canSearch, usersData] = await Promise.all([ - user.isAdminOrGlobalMod(uid), + const [isAdmin, isGlobalMod, canSearch, usersData] = await Promise.all([ + user.isAdministrator(uid), + user.isGlobalModerator(uid), privileges.global.can('search:users', uid), usersController.getUsersAndCount(set, uid, start, stop), ]); @@ -150,7 +151,9 @@ usersController.getUsers = async function (set, uid, query) { userCount: usersData.count, title: setToData[set].title || '[[pages:users/latest]]', breadcrumbs: helpers.buildBreadcrumbs(breadcrumbs), - isAdminOrGlobalMod: isAdminOrGlobalMod, + isAdminOrGlobalMod: isAdmin || isGlobalMod, + isAdmin: isAdmin, + isGlobalMod: isGlobalMod, displayUserSearch: canSearch, ['section_' + (query.section || 'joindate')]: true, }; @@ -181,8 +184,12 @@ async function render(req, res, data) { data.maximumInvites = meta.config.maximumInvites; data.inviteOnly = registrationType === 'invite-only' || registrationType === 'admin-invite-only'; data.adminInviteOnly = registrationType === 'admin-invite-only'; - data['reputation:disabled'] = meta.config['reputation:disabled']; data.invites = await user.getInvitesNumber(req.uid); + data.showInviteButton = req.loggedIn && ( + (registrationType === 'invite-only' && (!data.maximumInvites || data.invites < data.maximumInvites)) || + (registrationType === 'admin-invite-only' && data.isAdmin) + ); + data['reputation:disabled'] = meta.config['reputation:disabled']; res.append('X-Total-Count', data.userCount); res.render('users', data); diff --git a/src/groups/search.js b/src/groups/search.js index 45dbdbbc61..a19c6ea253 100644 --- a/src/groups/search.js +++ b/src/groups/search.js @@ -13,7 +13,7 @@ module.exports = function (Groups) { if (!options.hideEphemeralGroups) { groupNames = Groups.ephemeralGroups.concat(groupNames); } - groupNames = groupNames.filter(name => name.toLowerCase().includes(query) && name !== 'administrators' && !Groups.isPrivilegeGroup(name)); + groupNames = groupNames.filter(name => name.toLowerCase().includes(query) && !Groups.isPrivilegeGroup(name)); groupNames = groupNames.slice(0, 100); let groupsData; diff --git a/src/meta/configs.js b/src/meta/configs.js index 0973501ca9..036dc7f74e 100644 --- a/src/meta/configs.js +++ b/src/meta/configs.js @@ -138,6 +138,7 @@ Configs.setMultiple = async function (data) { Configs.setOnEmpty = async function (values) { const data = await db.getObject('config'); + values = serialize(values); const config = { ...values, ...(data ? serialize(data) : {}) }; await db.setObject('config', config); }; diff --git a/src/meta/css.js b/src/meta/css.js index c0c9cc71f0..b8cb9a1a8f 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -29,6 +29,7 @@ var buildImports = { '@import (inline) "../public/vendor/colorpicker/colorpicker.css";', '@import (inline) "../node_modules/cropperjs/dist/cropper.css";', '@import "../../public/less/flags.less";', + '@import "../../public/less/post-queue.less";', '@import "../../public/less/admin/manage/ip-blacklist.less";', '@import "../../public/less/generics.less";', '@import "../../public/less/mixins.less";', diff --git a/src/middleware/index.js b/src/middleware/index.js index fedd035ad3..9722c42690 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -32,7 +32,11 @@ middleware.regexes = { }; middleware.applyCSRF = csrf({ - cookie: true, + cookie: nconf.get('url_parsed').protocol === 'https:' ? { + secure: true, + sameSite: 'Strict', + httpOnly: true, + } : true, }); middleware.ensureLoggedIn = ensureLoggedIn.ensureLoggedIn(nconf.get('relative_path') + '/login'); diff --git a/src/middleware/maintenance.js b/src/middleware/maintenance.js index e98a75b9ef..00b34d4be3 100644 --- a/src/middleware/maintenance.js +++ b/src/middleware/maintenance.js @@ -1,44 +1,38 @@ 'use strict'; -var async = require('async'); -var nconf = require('nconf'); -var meta = require('../meta'); -var user = require('../user'); +const util = require('util'); +const nconf = require('nconf'); +const meta = require('../meta'); +const user = require('../user'); module.exports = function (middleware) { - middleware.maintenanceMode = function maintenanceMode(req, res, callback) { + middleware.maintenanceMode = async function maintenanceMode(req, res, next) { if (!meta.config.maintenanceMode) { - return setImmediate(callback); + return setImmediate(next); } - var url = req.url.replace(nconf.get('relative_path'), ''); + const url = req.url.replace(nconf.get('relative_path'), ''); if (url.startsWith('/login') || url.startsWith('/api/login')) { - return setImmediate(callback); + return setImmediate(next); } - var data; - async.waterfall([ - function (next) { - user.isAdministrator(req.uid, next); - }, - function (isAdmin, next) { - if (isAdmin) { - return callback(); - } - res.status(meta.config.maintenanceModeStatus); - data = { - site_title: meta.config.title || 'NodeBB', - message: meta.config.maintenanceModeMessage, - }; - if (res.locals.isAPI) { - return res.json(data); - } + const isAdmin = await user.isAdministrator(req.uid); + if (isAdmin) { + return setImmediate(next); + } - middleware.buildHeader(req, res, next); - }, - function () { - res.render('503', data); - }, - ], callback); + res.status(meta.config.maintenanceModeStatus); + + const data = { + site_title: meta.config.title || 'NodeBB', + message: meta.config.maintenanceModeMessage, + }; + + if (res.locals.isAPI) { + return res.json(data); + } + const buildHeaderAsync = util.promisify(middleware.buildHeader); + await buildHeaderAsync(req, res); + res.render('503', data); }; }; diff --git a/src/middleware/ratelimit.js b/src/middleware/ratelimit.js index 504cb0acd7..89f6cccdc4 100644 --- a/src/middleware/ratelimit.js +++ b/src/middleware/ratelimit.js @@ -1,11 +1,11 @@ 'use strict'; -var winston = require('winston'); +const winston = require('winston'); -var ratelimit = module.exports; +const ratelimit = module.exports; -var allowedCalls = 100; -var timeframe = 10000; +const allowedCalls = 100; +const timeframe = 10000; ratelimit.isFlooding = function (socket) { socket.callsPerSecond = socket.callsPerSecond || 0; @@ -14,7 +14,7 @@ ratelimit.isFlooding = function (socket) { socket.callsPerSecond += 1; - var now = Date.now(); + const now = Date.now(); socket.elapsedTime += now - socket.lastCallTime; if (socket.callsPerSecond > allowedCalls && socket.elapsedTime < timeframe) { diff --git a/src/middleware/render.js b/src/middleware/render.js index c33d6a8eac..23579bb70f 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -1,118 +1,89 @@ 'use strict'; -var async = require('async'); -var nconf = require('nconf'); -var validator = require('validator'); -var winston = require('winston'); +const util = require('util'); +const nconf = require('nconf'); +const validator = require('validator'); +const winston = require('winston'); -var plugins = require('../plugins'); -var meta = require('../meta'); -var translator = require('../translator'); -var widgets = require('../widgets'); -var utils = require('../utils'); +const plugins = require('../plugins'); +const meta = require('../meta'); +const translator = require('../translator'); +const widgets = require('../widgets'); +const utils = require('../utils'); module.exports = function (middleware) { + const renderHeaderFooterAsync = util.promisify(renderHeaderFooter); + middleware.processRender = function processRender(req, res, next) { // res.render post-processing, modified from here: https://gist.github.com/mrlannigan/5051687 - var render = res.render; - res.render = function renderOverride(template, options, fn) { - var self = this; - var req = this.req; - var defaultFn = function (err, str) { - if (err) { - return next(err); - } - self.send(str); - }; + const render = res.render; + res.render = async function renderOverride(template, options, fn) { + const self = this; + const req = this.req; options = options || {}; if (typeof options === 'function') { fn = options; options = {}; } - if (typeof fn !== 'function') { - fn = defaultFn; + + options.loggedIn = req.uid > 0; + options.relative_path = nconf.get('relative_path'); + options.template = { name: template, [template]: true }; + options.url = (req.baseUrl + req.path.replace(/^\/api/, '')); + options.bodyClass = buildBodyClass(req, res, options); + + const buildResult = await plugins.fireHook('filter:' + template + '.build', { req: req, res: res, templateData: options }); + const templateToRender = buildResult.templateData.templateToRender || template; + + const renderResult = await plugins.fireHook('filter:middleware.render', { req: req, res: res, templateData: buildResult.templateData }); + options = renderResult.templateData; + options._header = { + tags: await meta.tags.parse(req, renderResult, res.locals.metaTags, res.locals.linkTags), + }; + options.widgets = await widgets.render(req.uid, { + template: template + '.tpl', + url: options.url, + templateData: options, + req: req, + res: res, + }); + res.locals.template = template; + options._locals = undefined; + + if (res.locals.isAPI) { + if (req.route && req.route.path === '/api/') { + options.title = '[[pages:home]]'; + } + req.app.set('json spaces', global.env === 'development' || req.query.pretty ? 4 : 0); + return res.json(options); } + const ajaxifyData = JSON.stringify(options).replace(/<\//g, '<\\/'); - var ajaxifyData; - var templateToRender; - async.waterfall([ - function (next) { - options.loggedIn = req.uid > 0; - options.relative_path = nconf.get('relative_path'); - options.template = { name: template }; - options.template[template] = true; - options.url = (req.baseUrl + req.path.replace(/^\/api/, '')); - options.bodyClass = buildBodyClass(req, res, options); - plugins.fireHook('filter:' + template + '.build', { req: req, res: res, templateData: options }, next); - }, - function (data, next) { - templateToRender = data.templateData.templateToRender || template; - plugins.fireHook('filter:middleware.render', { req: req, res: res, templateData: data.templateData }, next); - }, - function parseTags(data, next) { - meta.tags.parse(req, data, res.locals.metaTags, res.locals.linkTags, function (err, tags) { - options._header = { - tags: tags, - }; - next(err, data); - }); - }, - function (data, next) { - options = data.templateData; + const renderAsync = util.promisify((templateToRender, options, next) => render.call(self, templateToRender, options, next)); - widgets.render(req.uid, { - template: template + '.tpl', - url: options.url, - templateData: options, - req: req, - res: res, - }, next); - }, - function (data, next) { - options.widgets = data; + const results = await utils.promiseParallel({ + header: renderHeaderFooterAsync('renderHeader', req, res, options), + content: renderAsync(templateToRender, options), + footer: renderHeaderFooterAsync('renderFooter', req, res, options), + }); - res.locals.template = template; - options._locals = undefined; + const str = results.header + + (res.locals.postHeader || '') + + results.content + '' + + (res.locals.preFooter || '') + + results.footer; - if (res.locals.isAPI) { - if (req.route && req.route.path === '/api/') { - options.title = '[[pages:home]]'; - } - req.app.set('json spaces', global.env === 'development' || req.query.pretty ? 4 : 0); - return res.json(options); - } + let translated = await translate(str, req, res); + translated = translated.replace('', function () { + return ''; + }); - ajaxifyData = JSON.stringify(options).replace(/<\//g, '<\\/'); - - async.parallel({ - header: function (next) { - renderHeaderFooter('renderHeader', req, res, options, next); - }, - content: function (next) { - render.call(self, templateToRender, options, next); - }, - footer: function (next) { - renderHeaderFooter('renderFooter', req, res, options, next); - }, - }, next); - }, - function (results, next) { - var str = results.header + - (res.locals.postHeader || '') + - results.content + '' + - (res.locals.preFooter || '') + - results.footer; - - translate(str, req, res, next); - }, - function (translated, next) { - translated = translated.replace('', function () { - return ''; - }); - next(null, translated); - }, - ], fn); + if (typeof fn !== 'function') { + self.send(translated); + } else { + fn(null, translated); + } }; next(); @@ -128,20 +99,19 @@ module.exports = function (middleware) { } } - function translate(str, req, res, next) { - var language = (res.locals.config && res.locals.config.userLang) || 'en-GB'; + async function translate(str, req, res) { + let language = (res.locals.config && res.locals.config.userLang) || 'en-GB'; if (res.locals.renderAdminHeader) { language = (res.locals.config && res.locals.config.acpLang) || 'en-GB'; } language = req.query.lang ? validator.escape(String(req.query.lang)) : language; - translator.translate(str, language, function (translated) { - next(null, translator.unescape(translated)); - }); + const translated = await translator.translate(str, language); + return translator.unescape(translated); } function buildBodyClass(req, res, templateData) { - var clean = req.path.replace(/^\/api/, '').replace(/^\/|\/$/g, ''); - var parts = clean.split('/').slice(0, 3); + const clean = req.path.replace(/^\/api/, '').replace(/^\/|\/$/g, ''); + const parts = clean.split('/').slice(0, 3); parts.forEach(function (p, index) { try { p = utils.slugify(decodeURIComponent(p)); diff --git a/src/middleware/user.js b/src/middleware/user.js index 141c574d5e..9e794a6a9e 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -1,17 +1,17 @@ 'use strict'; -var async = require('async'); -var nconf = require('nconf'); -var winston = require('winston'); +const util = require('util'); +const nconf = require('nconf'); +const winston = require('winston'); -var meta = require('../meta'); -var user = require('../user'); -var privileges = require('../privileges'); -var plugins = require('../plugins'); +const meta = require('../meta'); +const user = require('../user'); +const privileges = require('../privileges'); +const plugins = require('../plugins'); -var auth = require('../routes/authentication'); +const auth = require('../routes/authentication'); -var controllers = { +const controllers = { helpers: require('../controllers/helpers'), }; @@ -49,6 +49,8 @@ module.exports = function (middleware) { }); }; + const authenticateAsync = util.promisify(middleware.authenticate); + middleware.authenticateOrGuest = function authenticateOrGuest(req, res, next) { authenticate(req, res, next, next); }; @@ -61,30 +63,21 @@ module.exports = function (middleware) { ensureSelfOrMethod(user.isPrivileged, req, res, next); }; - function ensureSelfOrMethod(method, req, res, next) { + async function ensureSelfOrMethod(method, req, res, next) { /* The "self" part of this middleware hinges on you having used middleware.exposeUid prior to invoking this middleware. */ - async.waterfall([ - function (next) { - if (!req.loggedIn) { - return setImmediate(next, null, false); - } - - if (req.uid === parseInt(res.locals.uid, 10)) { - return setImmediate(next, null, true); - } - - method(req.uid, next); - }, - function (allowed, next) { - if (!allowed) { - return controllers.helpers.notAllowed(req, res); - } - next(); - }, - ], next); + if (!req.loggedIn) { + return controllers.helpers.notAllowed(req, res); + } + if (req.uid === parseInt(res.locals.uid, 10)) { + return setImmediate(next); + } + const allowed = await method(req.uid); + if (!allowed) { + return controllers.helpers.notAllowed(req, res); + } } middleware.checkGlobalPrivacySettings = function checkGlobalPrivacySettings(req, res, next) { @@ -92,155 +85,110 @@ module.exports = function (middleware) { middleware.canViewUsers(req, res, next); }; - middleware.canViewUsers = function canViewUsers(req, res, next) { + middleware.canViewUsers = async function canViewUsers(req, res, next) { if (parseInt(res.locals.uid, 10) === req.uid) { return next(); } - privileges.global.can('view:users', req.uid, function (err, canView) { - if (err || canView) { - return next(err); - } - controllers.helpers.notAllowed(req, res); - }); + const canView = await privileges.global.can('view:users', req.uid); + if (canView) { + return next(); + } + controllers.helpers.notAllowed(req, res); }; - middleware.canViewGroups = function canViewGroups(req, res, next) { - privileges.global.can('view:groups', req.uid, function (err, canView) { - if (err || canView) { - return next(err); - } - controllers.helpers.notAllowed(req, res); - }); + middleware.canViewGroups = async function canViewGroups(req, res, next) { + const canView = await privileges.global.can('view:groups', req.uid); + if (canView) { + return next(); + } + controllers.helpers.notAllowed(req, res); }; - middleware.checkAccountPermissions = function checkAccountPermissions(req, res, next) { + middleware.checkAccountPermissions = async function checkAccountPermissions(req, res, next) { // This middleware ensures that only the requested user and admins can pass - async.waterfall([ - function (next) { - middleware.authenticate(req, res, next); - }, - function (next) { - user.getUidByUserslug(req.params.userslug, next); - }, - function (uid, next) { - privileges.users.canEdit(req.uid, uid, next); - }, - function (allowed, next) { - if (allowed) { - return next(null, allowed); - } + await authenticateAsync(req, res); + const uid = await user.getUidByUserslug(req.params.userslug); + let allowed = await privileges.users.canEdit(req.uid, uid); + if (allowed) { + return next(); + } - // For the account/info page only, allow plain moderators through - if (/user\/.+\/info$/.test(req.path)) { - privileges.global.can('view:users:info', req.uid, next); - } else { - next(null, false); - } - }, - function (allowed) { - if (allowed) { - return next(); - } - controllers.helpers.notAllowed(req, res); - }, - ], next); + if (/user\/.+\/info$/.test(req.path)) { + allowed = await privileges.global.can('view:users:info', req.uid); + } + if (allowed) { + return next(); + } + controllers.helpers.notAllowed(req, res); }; - middleware.redirectToAccountIfLoggedIn = function redirectToAccountIfLoggedIn(req, res, next) { + middleware.redirectToAccountIfLoggedIn = async function redirectToAccountIfLoggedIn(req, res, next) { if (req.session.forceLogin || req.uid <= 0) { return next(); } - - async.waterfall([ - function (next) { - user.getUserField(req.uid, 'userslug', next); - }, - function (userslug) { - controllers.helpers.redirect(res, '/user/' + userslug); - }, - ], next); + const userslug = await user.getUserField(req.uid, 'userslug'); + controllers.helpers.redirect(res, '/user/' + userslug); }; - middleware.redirectUidToUserslug = function redirectUidToUserslug(req, res, next) { - var uid = parseInt(req.params.uid, 10); + middleware.redirectUidToUserslug = async function redirectUidToUserslug(req, res, next) { + const uid = parseInt(req.params.uid, 10); if (uid <= 0) { return next(); } - async.waterfall([ - function (next) { - user.getUserField(uid, 'userslug', next); - }, - function (userslug) { - if (!userslug) { - return next(); - } - var path = req.path.replace(/^\/api/, '') - .replace('uid', 'user') - .replace(uid, function () { return userslug; }); - controllers.helpers.redirect(res, path); - }, - ], next); + const userslug = await user.getUserField(uid, 'userslug'); + if (!userslug) { + return next(); + } + const path = req.path.replace(/^\/api/, '') + .replace('uid', 'user') + .replace(uid, function () { return userslug; }); + controllers.helpers.redirect(res, path); }; - middleware.redirectMeToUserslug = function redirectMeToUserslug(req, res, next) { - var uid = req.uid; - async.waterfall([ - function (next) { - user.getUserField(uid, 'userslug', next); - }, - function (userslug) { - if (!userslug) { - return controllers.helpers.notAllowed(req, res); - } - var path = req.path.replace(/^(\/api)?\/me/, '/user/' + userslug); - controllers.helpers.redirect(res, path); - }, - ], next); + middleware.redirectMeToUserslug = async function redirectMeToUserslug(req, res) { + const userslug = await user.getUserField(req.uid, 'userslug'); + if (!userslug) { + return controllers.helpers.notAllowed(req, res); + } + const path = req.path.replace(/^(\/api)?\/me/, '/user/' + userslug); + controllers.helpers.redirect(res, path); }; - middleware.isAdmin = function isAdmin(req, res, next) { - async.waterfall([ - function (next) { - user.isAdministrator(req.uid, next); - }, - function (isAdmin, next) { - if (!isAdmin) { - return controllers.helpers.notAllowed(req, res); - } - user.hasPassword(req.uid, next); - }, - function (hasPassword, next) { - if (!hasPassword) { - return next(); - } + middleware.isAdmin = async function isAdmin(req, res, next) { + const isAdmin = await user.isAdministrator(req.uid); + if (!isAdmin) { + return controllers.helpers.notAllowed(req, res); + } + const hasPassword = await user.hasPassword(req.uid); + if (!hasPassword) { + return next(); + } - var loginTime = req.session.meta ? req.session.meta.datetime : 0; - var adminReloginDuration = meta.config.adminReloginDuration * 60000; - var disabled = meta.config.adminReloginDuration === 0; - if (disabled || (loginTime && parseInt(loginTime, 10) > Date.now() - adminReloginDuration)) { - var timeLeft = parseInt(loginTime, 10) - (Date.now() - adminReloginDuration); - if (req.session.meta && timeLeft < Math.min(300000, adminReloginDuration)) { - req.session.meta.datetime += Math.min(300000, adminReloginDuration); - } + const loginTime = req.session.meta ? req.session.meta.datetime : 0; + const adminReloginDuration = meta.config.adminReloginDuration * 60000; + const disabled = meta.config.adminReloginDuration === 0; + if (disabled || (loginTime && parseInt(loginTime, 10) > Date.now() - adminReloginDuration)) { + const timeLeft = parseInt(loginTime, 10) - (Date.now() - adminReloginDuration); + if (req.session.meta && timeLeft < Math.min(300000, adminReloginDuration)) { + req.session.meta.datetime += Math.min(300000, adminReloginDuration); + } - return next(); - } + return next(); + } - var returnTo = req.path; - if (nconf.get('relative_path')) { - returnTo = req.path.replace(new RegExp('^' + nconf.get('relative_path')), ''); - } - returnTo = returnTo.replace(/^\/api/, ''); + let returnTo = req.path; + if (nconf.get('relative_path')) { + returnTo = req.path.replace(new RegExp('^' + nconf.get('relative_path')), ''); + } + returnTo = returnTo.replace(/^\/api/, ''); - req.session.returnTo = returnTo; - req.session.forceLogin = 1; - if (res.locals.isAPI) { - res.status(401).json({}); - } else { - res.redirect(nconf.get('relative_path') + '/login'); - } - }, - ], next); + req.session.returnTo = returnTo; + req.session.forceLogin = 1; + if (res.locals.isAPI) { + res.status(401).json({}); + } else { + res.redirect(nconf.get('relative_path') + '/login?local=1'); + } }; middleware.requireUser = function (req, res, next) { diff --git a/src/notifications.js b/src/notifications.js index 69b3822e35..2159a0da9d 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -94,14 +94,18 @@ Notifications.filterExists = async function (nids) { }; Notifications.findRelated = async function (mergeIds, set) { + mergeIds = mergeIds.filter(Boolean); + if (!mergeIds.length) { + return []; + } // A related notification is one in a zset that has the same mergeId const nids = await db.getSortedSetRevRange(set, 0, -1); const keys = nids.map(nid => 'notifications:' + nid); - let sets = await db.getObjectsFields(keys, ['mergeId']); - sets = sets.map(set => String(set.mergeId)); + const notificationData = await db.getObjectsFields(keys, ['mergeId']); + const notificationMergeIds = notificationData.map(notifObj => String(notifObj.mergeId)); const mergeSet = new Set(mergeIds.map(id => String(id))); - return nids.filter((nid, idx) => mergeSet.has(sets[idx])); + return nids.filter((nid, idx) => mergeSet.has(notificationMergeIds[idx])); }; Notifications.create = async function (data) { diff --git a/src/plugins/index.js b/src/plugins/index.js index 387933290f..1a04d7064a 100644 --- a/src/plugins/index.js +++ b/src/plugins/index.js @@ -170,10 +170,13 @@ function request(url, callback) { require('request')(url, { json: true, }, function (err, res, body) { - if (res.statusCode === 404 || !body) { - return callback(err, {}); + if (err) { + return callback(err); } - callback(err, body); + if (res.statusCode === 404 || !body) { + return callback(null, {}); + } + callback(null, body); }); } const requestAsync = util.promisify(request); diff --git a/src/posts/parse.js b/src/posts/parse.js index 3ab61b3d57..6a7586fbc6 100644 --- a/src/posts/parse.js +++ b/src/posts/parse.js @@ -33,6 +33,9 @@ let sanitizeConfig = { 'draggable', 'dropzone', 'hidden', 'id', 'lang', 'spellcheck', 'style', 'tabindex', 'title', 'translate', 'aria-expanded', 'data-*', ], + allowedClasses: { + ...sanitize.defaults.allowedClasses, + }, }; module.exports = function (Posts) { @@ -105,7 +108,9 @@ module.exports = function (Posts) { Posts.sanitize = function (content) { return sanitize(content, { - allowedTags: sanitizeConfig.allowedTags, allowedAttributes: sanitizeConfig.allowedAttributes, + allowedTags: sanitizeConfig.allowedTags, + allowedAttributes: sanitizeConfig.allowedAttributes, + allowedClasses: sanitizeConfig.allowedClasses, }); }; diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js index 3313bd8d19..7899f2b61b 100644 --- a/src/socket.io/admin/user.js +++ b/src/socket.io/admin/user.js @@ -9,6 +9,7 @@ const user = require('../../user'); const events = require('../../events'); const meta = require('../../meta'); const plugins = require('../../plugins'); +const translator = require('../../translator'); const User = module.exports; @@ -190,3 +191,17 @@ User.search = async function (socket, data) { User.restartJobs = async function () { user.startJobs(); }; + +User.loadGroups = async function (socket, uids) { + const [userData, groupData] = await Promise.all([ + user.getUsersData(uids), + groups.getUserGroupsFromSet('groups:createtime', uids), + ]); + userData.forEach((data, index) => { + data.groups = groupData[index].filter(group => !groups.isPrivilegeGroup(group.name)); + data.groups.forEach((group) => { + group.nameEscaped = translator.escape(group.displayName); + }); + }); + return { users: userData }; +}; diff --git a/src/socket.io/groups.js b/src/socket.io/groups.js index fa88cd9e24..b00af300a6 100644 --- a/src/socket.io/groups.js +++ b/src/socket.io/groups.js @@ -291,7 +291,7 @@ SocketGroups.search = async (socket, data) => { const groupData = await groups.getGroupsBySort(data.options.sort, 0, groupsPerPage - 1); return groupData; } - + data.options.filterHidden = data.options.filterHidden || !await user.isAdministrator(socket.uid); return await groups.search(data.query, data.options); }; @@ -309,6 +309,14 @@ SocketGroups.loadMore = async (socket, data) => { SocketGroups.searchMembers = async (socket, data) => { data.uid = socket.uid; + const [isOwner, isMember, isAdmin] = await Promise.all([ + groups.ownership.isOwner(socket.uid, data.groupName), + groups.isMember(socket.uid, data.groupName), + user.isAdministrator(socket.uid), + ]); + if (!isOwner && !isMember && !isAdmin) { + throw new Error('[[error:no-privileges]]'); + } return await groups.searchMembers(data); }; diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index 97f7ec3b0a..588ca5b202 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -74,9 +74,9 @@ SocketPosts.getTimestampByIndex = async function (socket, data) { } let pid; if (data.index === 0) { - pid = topics.getTopicField(data.tid, 'mainPid'); + pid = await topics.getTopicField(data.tid, 'mainPid'); } else { - pid = db.getSortedSetRange('tid:' + data.tid + ':posts', data.index - 1, data.index - 1); + pid = await db.getSortedSetRange('tid:' + data.tid + ':posts', data.index - 1, data.index - 1); } pid = Array.isArray(pid) ? pid[0] : pid; if (!pid) { diff --git a/src/socket.io/topics/unread.js b/src/socket.io/topics/unread.js index e997e1608d..0d8021a398 100644 --- a/src/socket.io/topics/unread.js +++ b/src/socket.io/topics/unread.js @@ -67,6 +67,7 @@ module.exports = function (SocketTopics) { await topics.markAsUnreadForAll(tid); await topics.updateRecent(tid, now); await db.sortedSetAdd('cid:' + topicData.cid + ':tids:lastposttime', now, tid); + await topics.setTopicField(tid, 'lastposttime', now); })); topics.pushUnreadCount(socket.uid); }; diff --git a/src/user/digest.js b/src/user/digest.js index 6ada20c9c1..b0051a9977 100644 --- a/src/user/digest.js +++ b/src/user/digest.js @@ -48,28 +48,24 @@ Digest.getUsersInterval = async (uids) => { single = true; } - let settings = await Promise.all([ + const settings = await Promise.all([ db.isSortedSetMembers('digest:day:uids', uids), db.isSortedSetMembers('digest:week:uids', uids), db.isSortedSetMembers('digest:month:uids', uids), ]); - settings = settings.reduce((memo, cur, idx) => { - switch (idx) { - case 0: - memo = cur.map(bool => (bool === true ? 'day' : bool)); - break; - case 1: - memo = cur.map(bool => (bool === true ? 'week' : bool)); - break; - case 2: - memo = cur.map(bool => (bool === true ? 'month' : bool)); - break; - } - return memo; + const interval = uids.map((uid, index) => { + if (settings[0][index]) { + return 'day'; + } else if (settings[1][index]) { + return 'week'; + } else if (settings[2][index]) { + return 'month'; + } + return false; }); - return single ? settings[0] : settings; + return single ? interval[0] : interval; }; Digest.getSubscribers = async function (interval) { diff --git a/src/views/admin/manage/post-queue.tpl b/src/views/admin/manage/post-queue.tpl index 0f605613ab..52e02fb9ee 100644 --- a/src/views/admin/manage/post-queue.tpl +++ b/src/views/admin/manage/post-queue.tpl @@ -36,7 +36,7 @@ {posts.category.name} - + [[admin/manage/post-queue:reply-to, {posts.topic.title}]] diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index ef250aa980..fb9061a700 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -1,127 +1,127 @@
-
-
[[admin/manage/users:users]]
-
- -
- - - [[admin/manage/users:download-csv]] - - - - - - + +
+ - +
- -
- - + + + [[admin/manage/users:inactive.3-months]] + [[admin/manage/users:inactive.6-months]] + [[admin/manage/users:inactive.12-months]] + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[[admin/manage/users:users.uid]][[admin/manage/users:users.username]][[admin/manage/users:users.email]][[admin/manage/users:users.postcount]][[admin/manage/users:users.reputation]][[admin/manage/users:users.flags]][[admin/manage/users:users.joined]][[admin/manage/users:users.last-online]][[admin/manage/users:users.banned]]
{users.uid} {users.username} + + + + {users.email}{users.postcount}{users.reputation}{users.flags}0
+
+ + +
diff --git a/src/views/admin/partials/manage_user_groups.tpl b/src/views/admin/partials/manage_user_groups.tpl new file mode 100644 index 0000000000..6136f8c44c --- /dev/null +++ b/src/views/admin/partials/manage_user_groups.tpl @@ -0,0 +1,13 @@ + +
+
{users.username}
+ + +
+ \ No newline at end of file diff --git a/src/views/admin/partials/menu.tpl b/src/views/admin/partials/menu.tpl index 06b7fdea43..d08c1eb90f 100644 --- a/src/views/admin/partials/menu.tpl +++ b/src/views/admin/partials/menu.tpl @@ -78,19 +78,6 @@ - - - - + + + +
+
+ + +

+ [[admin/settings/post:timestamp.necro-threshold-help]] +

+
diff --git a/test/groups.js b/test/groups.js index 3d1627e062..986509e863 100644 --- a/test/groups.js +++ b/test/groups.js @@ -196,6 +196,15 @@ describe('Groups', function () { done(); }); }); + + it('should not return hidden groups', async function () { + await Groups.create({ + name: 'hiddenGroup', + hidden: '1', + }); + const result = await socketGroups.search({ uid: testUid }, { query: 'hiddenGroup' }); + assert.equal(result.length, 0); + }); }); describe('.isMember()', function () { diff --git a/test/mocks/databasemock.js b/test/mocks/databasemock.js index 6536af0d63..4e26093aa8 100644 --- a/test/mocks/databasemock.js +++ b/test/mocks/databasemock.js @@ -119,6 +119,7 @@ before(async function () { // Parse out the relative_url and other goodies from the configured URL const urlObject = url.parse(nconf.get('url')); const relativePath = urlObject.pathname !== '/' ? urlObject.pathname : ''; + nconf.set('url_parsed', urlObject); nconf.set('base_url', urlObject.protocol + '//' + urlObject.host); nconf.set('secure', urlObject.protocol === 'https:'); nconf.set('use_port', !!urlObject.port);