diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 80e8d4e1ed..e938284a9b 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -27,7 +27,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - node: [16, 18, 20] + node: [18, 20] database: [mongo-dev, mongo, redis, postgres] include: # only run coverage once @@ -63,7 +63,7 @@ jobs: - 5432:5432 redis: - image: 'redis:7.0.12' + image: 'redis:7.2.0' # Set health checks to wait until redis has started options: >- --health-cmd "redis-cli ping" @@ -75,7 +75,7 @@ jobs: - 6379:6379 mongo: - image: 'mongo:6.0' + image: 'mongo:7.0' ports: # Maps port 27017 on service container to the host - 27017:27017 @@ -192,7 +192,7 @@ jobs: run: npm run coverage - name: Test coverage - uses: coverallsapp/github-action@v2.2.1 + uses: coverallsapp/github-action@3b7078ee895f74fc267b7b267c88211df59fa816 # v2.2.2 if: matrix.coverage with: github-token: ${{ secrets.GITHUB_TOKEN }} @@ -206,7 +206,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Coveralls Finished - uses: coverallsapp/github-action@v2.2.1 + uses: coverallsapp/github-action@3b7078ee895f74fc267b7b267c88211df59fa816 # v2.2.2 with: github-token: ${{ secrets.GITHUB_TOKEN }} parallel-finished: true diff --git a/CHANGELOG.md b/CHANGELOG.md index e2a7da9214..d217dcea0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,40 @@ +#### v3.3.9 (2023-08-25) + +##### Chores + +* up mentions (4ec3a480) +* incrementing version number - v3.3.8 (a5603565) +* update changelog for v3.3.8 (65e16e9f) +* incrementing version number - v3.3.7 (b26f1744) +* incrementing version number - v3.3.6 (7fb38792) +* incrementing version number - v3.3.4 (a67f84ea) +* incrementing version number - v3.3.3 (f94d239b) +* incrementing version number - v3.3.2 (ec9dac97) +* incrementing version number - v3.3.1 (151cc68f) +* incrementing version number - v3.3.0 (fc1ad70f) +* incrementing version number - v3.2.3 (b06d3e63) +* incrementing version number - v3.2.2 (758ecfcd) +* incrementing version number - v3.2.1 (20145074) +* incrementing version number - v3.2.0 (9ecac38e) +* incrementing version number - v3.1.7 (0b4e81ab) +* incrementing version number - v3.1.6 (b3a3b130) +* incrementing version number - v3.1.5 (ec19343a) +* incrementing version number - v3.1.4 (2452783c) +* incrementing version number - v3.1.3 (3b4e9d3f) +* incrementing version number - v3.1.2 (40fa3489) +* incrementing version number - v3.1.1 (40250733) +* incrementing version number - v3.1.0 (0cb386bd) +* incrementing version number - v3.0.1 (26f6ea49) +* incrementing version number - v3.0.0 (224e08cd) + +##### Bug Fixes + +* isPrivilegeGroup not capturing admin privileges (d13e7cd3) + +##### Tests + +* add some tests for isPrivilegeGroup (d5c8bf9e) + #### v3.3.8 (2023-08-23) ##### Chores diff --git a/install/data/defaults.json b/install/data/defaults.json index 12acc55fd6..e32f98fd27 100644 --- a/install/data/defaults.json +++ b/install/data/defaults.json @@ -89,6 +89,7 @@ "min:rep:chat": 0, "min:rep:downvote": 0, "min:rep:upvote": 0, + "min:rep:post-links": 0, "min:rep:flag": 0, "min:rep:profile-picture": 0, "min:rep:cover-picture": 0, diff --git a/install/package.json b/install/package.json index 7bdb78f0b2..a6e8d44e71 100644 --- a/install/package.json +++ b/install/package.json @@ -35,7 +35,7 @@ "@isaacs/ttlcache": "1.4.1", "@popperjs/core": "2.11.8", "ace-builds": "1.24.1", - "archiver": "5.3.1", + "archiver": "6.0.1", "async": "3.2.4", "autoprefixer": "10.4.15", "bcryptjs": "2.4.3", @@ -58,8 +58,8 @@ "connect-pg-simple": "9.0.0", "connect-redis": "7.1.0", "cookie-parser": "1.4.6", - "cron": "2.4.1", - "cropperjs": "1.5.13", + "cron": "2.4.3", + "cropperjs": "1.6.0", "csrf-sync": "4.0.1", "daemon": "1.1.0", "diff": "5.1.0", @@ -74,47 +74,47 @@ "html-to-text": "9.0.5", "imagesloaded": "5.0.0", "ipaddr.js": "2.1.0", - "jquery": "3.7.0", + "jquery": "3.7.1", "jquery-deserialize": "2.0.0", "jquery-form": "4.3.0", "jquery-serializeobject": "1.0.0", "jquery-ui": "1.13.2", "jsesc": "3.0.2", "json2csv": "5.0.7", - "jsonwebtoken": "9.0.1", + "jsonwebtoken": "9.0.2", "lodash": "4.17.21", "logrotate-stream": "0.2.9", "lru-cache": "10.0.1", "mime": "3.0.0", "mkdirp": "3.0.1", - "mongodb": "5.7.0", + "mongodb": "5.8.1", "morgan": "1.10.0", "mousetrap": "1.6.5", "multiparty": "4.2.3", "nconf": "0.12.0", "nodebb-plugin-2factor": "7.2.1", - "nodebb-plugin-composer-default": "10.2.13", - "nodebb-plugin-dbsearch": "6.2.0", + "nodebb-plugin-composer-default": "10.2.18", + "nodebb-plugin-dbsearch": "6.2.1", "nodebb-plugin-emoji": "5.1.5", "nodebb-plugin-emoji-android": "4.0.0", - "nodebb-plugin-markdown": "12.1.7", + "nodebb-plugin-markdown": "12.2.3", "nodebb-plugin-mentions": "4.3.5", - "nodebb-plugin-ntfy": "1.4.0", + "nodebb-plugin-ntfy": "1.6.1", "nodebb-plugin-spam-be-gone": "2.1.1", "nodebb-rewards-essentials": "0.2.3", - "nodebb-theme-harmony": "1.1.41", + "nodebb-theme-harmony": "1.1.52", "nodebb-theme-lavender": "7.1.3", - "nodebb-theme-peace": "2.1.12", - "nodebb-theme-persona": "13.2.19", + "nodebb-theme-peace": "2.1.18", + "nodebb-theme-persona": "13.2.27", "nodebb-widget-essentials": "7.0.13", - "nodemailer": "6.9.4", + "nodemailer": "6.9.5", "nprogress": "0.2.0", "passport": "0.6.0", "passport-http-bearer": "1.0.1", "passport-local": "1.0.0", - "pg": "8.11.2", - "pg-cursor": "2.10.2", - "postcss": "8.4.28", + "pg": "8.11.3", + "pg-cursor": "2.10.3", + "postcss": "8.4.29", "postcss-clean": "1.2.0", "progress-webpack-plugin": "1.0.16", "prompt": "1.3.0", @@ -125,7 +125,7 @@ "rss": "1.2.2", "rtlcss": "4.1.0", "sanitize-html": "2.11.0", - "sass": "1.65.1", + "sass": "1.66.1", "semver": "7.5.4", "serve-favicon": "2.5.0", "sharp": "0.32.5", @@ -134,7 +134,7 @@ "socket.io-client": "4.7.2", "@socket.io/redis-adapter": "8.2.1", "sortablejs": "1.15.0", - "spdx-license-list": "6.6.0", + "spdx-license-list": "6.7.0", "spider-detector": "2.0.1", "terser-webpack-plugin": "5.3.9", "textcomplete": "0.18.2", @@ -156,14 +156,14 @@ "@commitlint/cli": "17.7.1", "@commitlint/config-angular": "17.7.0", "coveralls": "3.1.1", - "eslint": "8.47.0", + "eslint": "8.48.0", "eslint-config-nodebb": "0.2.1", - "eslint-plugin-import": "2.27.5", + "eslint-plugin-import": "2.28.1", "grunt": "1.6.1", "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "22.1.0", - "lint-staged": "14.0.0", + "lint-staged": "14.0.1", "mocha": "10.2.0", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", @@ -171,10 +171,10 @@ "smtp-server": "3.13.0" }, "optionalDependencies": { - "sass-embedded": "1.64.2" + "sass-embedded": "1.66.1" }, "resolutions": { - "*/jquery": "3.7.0" + "*/jquery": "3.7.1" }, "bugs": { "url": "https://github.com/NodeBB/NodeBB/issues" diff --git a/public/language/ar/admin/settings/reputation.json b/public/language/ar/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/ar/admin/settings/reputation.json +++ b/public/language/ar/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/ar/email.json b/public/language/ar/email.json index 8ee0473c61..4ae1a4220c 100644 --- a/public/language/ar/email.json +++ b/public/language/ar/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "هناك محادثة جديدة من %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "انقر هنا لمتابعة المحادثة", "notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.", "notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.", diff --git a/public/language/ar/error.json b/public/language/ar/error.json index f5fee4def9..5c464e8e0a 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/ar/modules.json b/public/language/ar/modules.json index 80e6716909..4eb3cf0089 100644 --- a/public/language/ar/modules.json +++ b/public/language/ar/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/ar/notifications.json b/public/language/ar/notifications.json index b20e528108..520c62c76d 100644 --- a/public/language/ar/notifications.json +++ b/public/language/ar/notifications.json @@ -15,31 +15,41 @@ "replies": "ردود", "chat": "محادثات", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "متابعون", "upvote": "الموافقين", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "الحظر", "new_message_from": "رسالة جديدة من %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 أضاف صوتًا إيجابيا إلى مشاركتك في %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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "user_flagged_post_in": "%1 أشعَرَ بمشاركة مخلة في %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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 أضاف ردا إلى: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 أنشأ موضوعًا جديدًا: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 صار يتابعك.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "تم تخصيص العلامة 1% لك", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/bg/admin/settings/reputation.json b/public/language/bg/admin/settings/reputation.json index 9601b9d0f4..556a33c280 100644 --- a/public/language/bg/admin/settings/reputation.json +++ b/public/language/bg/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Отрицателни гласувания за ден (задайте 0 за неограничен брой)", "downvotes-per-user-per-day": "Отрицателни гласувания за потребител за ден (задайте 0 за неограничен брой)", "min-rep-chat": "Минимална репутация, необходима за изпращане на съобщения в разговори", + "min-rep-post-links": "Минимална репутация, необходима за публикуване на връзки", "min-rep-flag": "Минимална репутация, необходима за докладване на публикации", "min-rep-website": "Минимална репутация, необходима за добавяне на полето „Уебсайт“ към профила на потребителя", "min-rep-aboutme": "Минимална репутация, необходима за добавяне на полето „За мен“ към профила на потребителя", diff --git a/public/language/bg/email.json b/public/language/bg/email.json index 5a62e0594f..0cc27fde43 100644 --- a/public/language/bg/email.json +++ b/public/language/bg/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Седмичното Ви резюме", "digest.title.month": "Месечното Ви резюме", "notif.chat.subject": "Получено е ново съобщение от %1", + "notif.chat.public-chat-subject": "Ново съобщение от %1 в стая %2", "notif.chat.cta": "Натиснете тук, за да продължите дискусията", "notif.chat.unsub.info": "Това известие за разговор беше изпратено до Вас поради настройките Ви за абонаментите.", "notif.post.unsub.info": "Това известие за публикация беше изпратено до Вас поради настройките Ви за абонаментите.", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 82bc0a5d3a..9a73a61078 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Репутацията Ви трябва да бъде поне %1, за да участвате в разговори", "not-enough-reputation-to-upvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате положително", "not-enough-reputation-to-downvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате отрицателно", + "not-enough-reputation-to-post-links": "Репутацията Ви трябва да бъде поне %1, за да публикувате връзки", "not-enough-reputation-to-flag": "Репутацията Ви трябва да бъде поне %1, за да докладвате тази публикация", "not-enough-reputation-min-rep-website": "Репутацията Ви трябва да бъде поне %1, за да добавите уеб сайт", "not-enough-reputation-min-rep-aboutme": "Репутацията Ви трябва да бъде поне %1, за да добавите информация за себе си", diff --git a/public/language/bg/modules.json b/public/language/bg/modules.json index 72be8a42bb..2efe1733da 100644 --- a/public/language/bg/modules.json +++ b/public/language/bg/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Стая %1", "chat.chatting_with": "Разговор с", "chat.placeholder": "Въведете съобщение тук или пуснете снимки и натиснете Ентер за изпращане", "chat.placeholder.mobile": "Въведете съобщение тук", diff --git a/public/language/bg/notifications.json b/public/language/bg/notifications.json index 8bc7240caf..67b9ca8072 100644 --- a/public/language/bg/notifications.json +++ b/public/language/bg/notifications.json @@ -15,31 +15,41 @@ "replies": "Отговори", "chat": "Разговори", "group-chat": "Групови разговори", + "public-chat": "Публични разговори", "follows": "Следвания", "upvote": "Положителни гласове", "new-flags": "Нови докладвания", "my-flags": "Докладвания, назначени на мен", "bans": "Блокирания", "new_message_from": "Ново съобщение от %1", + "user_posted_in_public_room": "%1 писа в %3", + "user_posted_in_public_room_dual": "%1 и %2 писаха в %4", + "user_posted_in_public_room_triple": "%1, %2 и %3 писаха в %5", + "user_posted_in_public_room_multiple": "%1, %2 и %3 други писаха в %5", "upvoted_your_post_in": "%1 гласува положително за Ваша публикация в %2.", "upvoted_your_post_in_dual": "%1 и %2 гласуваха положително за Ваша публикация в %3.", - "upvoted_your_post_in_multiple": "%1 и %2 други гласуваха положително за Ваша публикация в %3.", + "upvoted_your_post_in_triple": "%1, %2 и %3 гласуваха положително за Ваша публикация в %4.", + "upvoted_your_post_in_multiple": "%1, %2 и %3 други гласуваха положително за Ваша публикация в %4.", "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_post_in": "%1 докладва публикация в %2", + "user_flagged_post_in_dual": "%1 и %2 докладваха публикация в %3", + "user_flagged_post_in_triple": "%1, %2 и %3 докладваха публикация в %4", + "user_flagged_post_in_multiple": "%1, %2 и %3 други докладваха публикация в %4", "user_flagged_user": "%1 докладва потребителски профил (%2)", "user_flagged_user_dual": "%1 и %2 докладваха потребителски профил (%3)", - "user_flagged_user_multiple": "%1 и още %2 потребители докладваха потребителски профил (%3)", + "user_flagged_user_triple": "%1, %2 и %3 докладваха потребителски профил (%4)", + "user_flagged_user_multiple": "%1, %2 и %3 други докладваха потребителски профил (%4)", "user_posted_to": "%1 публикува отговор на: %2", "user_posted_to_dual": "%1 и %2 публикуваха отговори на: %3", - "user_posted_to_multiple": "%1 и %2 други публикуваха отговори на: %3", + "user_posted_to_triple": "%1, %2 и %3 публикуваха отговори на: %4", + "user_posted_to_multiple": "%1, %2 и %3 други публикуваха отговори на: %4", "user_posted_topic": "%1 публикува нова тема: %2", "user_edited_post": "%1 редактира публикация в %2", "user_started_following_you": "%1 започна да Ви следва.", "user_started_following_you_dual": "%1 и %2 започнаха да Ви следват.", - "user_started_following_you_multiple": "%1 и %2 започнаха да Ви следват.", + "user_started_following_you_triple": "%1, %2 и %3 започнаха да Ви следват.", + "user_started_following_you_multiple": "%1, %2 и %3 други започнаха да Ви следват.", "new_register": "%1 изпрати заявка за регистрация.", "new_register_multiple": "Има %1 заявки за регистрация, които очакват да бъдат прегледани.", "flag_assigned_to_you": "Докладът %1 беше назначен на Вас", @@ -66,6 +76,7 @@ "notificationType_follow": "Когато някой започне да Ви следва", "notificationType_new-chat": "Когато получите съобщение в разговор", "notificationType_new-group-chat": "Когато получите съобщение в групов разговор", + "notificationType_new-public-chat": "Когато получите съобщение в публичен групов разговор", "notificationType_group-invite": "Когато получите покана за група", "notificationType_group-leave": "Когато потребител напусне групата Ви", "notificationType_group-request-membership": "Когато някой поиска да се включи в група, на която Вие сте собственик", diff --git a/public/language/bn/admin/settings/reputation.json b/public/language/bn/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/bn/admin/settings/reputation.json +++ b/public/language/bn/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/bn/email.json b/public/language/bn/email.json index 89e667c75f..7bba25659a 100644 --- a/public/language/bn/email.json +++ b/public/language/bn/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "%1 এর থেকে নতুন মেসেজ এসেছে।", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "কথপোকথন চালিয়ে যেতে এখানে ক্লিক করুন", "notif.chat.unsub.info": "আপনার সাবস্ক্রীপশন সেটিংসের কারনে আপনার এই নোটিফিকেশন পাঠানো হয়েছে", "notif.post.unsub.info": "আপনার সাবস্ক্রিপশন সেটিংসের কারনে আপনার এই বার্তাটি পাঠানো হয়েছে", diff --git a/public/language/bn/error.json b/public/language/bn/error.json index 44f4bdd2b2..fce2615174 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/bn/modules.json b/public/language/bn/modules.json index 18793084f6..228f7dc89b 100644 --- a/public/language/bn/modules.json +++ b/public/language/bn/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/bn/notifications.json b/public/language/bn/notifications.json index 545d7eeeea..1af531bfa8 100644 --- a/public/language/bn/notifications.json +++ b/public/language/bn/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "%1 থেকে নতুন বার্তা", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 , %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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 একটি উত্তর দিয়েছেন: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 আপনাকে অনুসরন করা শুরু করেছেন।", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/cs/admin/settings/reputation.json b/public/language/cs/admin/settings/reputation.json index ab092c574c..c3fb273430 100644 --- a/public/language/cs/admin/settings/reputation.json +++ b/public/language/cs/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimální reputace pro označení příspěvků", "min-rep-website": "Minimální reputace pro přidání „Webové stránky” do uživatelského profilu", "min-rep-aboutme": "Minimální reputace pro přidání „O mně” do uživatelského profilu", diff --git a/public/language/cs/email.json b/public/language/cs/email.json index 8ee84565ae..626d9f8a00 100644 --- a/public/language/cs/email.json +++ b/public/language/cs/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Váš týdenní přehled", "digest.title.month": "Váš měsíční přehled", "notif.chat.subject": "Nová zpráva z chatu od %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Chcete-li pokračovat v konverzaci, klikněte zde.", "notif.chat.unsub.info": "Toto upozornění na chat vám bylo odesláno na základě vašeho nastavení odběru.", "notif.post.unsub.info": "Toto upozornění na příspěvek vám bylo odesláno na základě vašeho nastavení odběru.", diff --git a/public/language/cs/error.json b/public/language/cs/error.json index e0fefa01b8..a328f7bbe5 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/cs/modules.json b/public/language/cs/modules.json index 369e9b0b4f..18fa01ea6f 100644 --- a/public/language/cs/modules.json +++ b/public/language/cs/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Konverzace s", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/cs/notifications.json b/public/language/cs/notifications.json index 085659c2e9..943998ccb7 100644 --- a/public/language/cs/notifications.json +++ b/public/language/cs/notifications.json @@ -15,31 +15,41 @@ "replies": "Odpovědi", "chat": "Konverzace", "group-chat": "Skupinová konverzace", + "public-chat": "Public Chats", "follows": "Sledování", "upvote": "Souhlasy", "new-flags": "Nové označení", "my-flags": "Označení přiřazené mě", "bans": "Blokace", "new_message_from": "Nová zpráva od %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 souhlasil s vaším příspěvkem v %2.", "upvoted_your_post_in_dual": "%1 a %2 souhlasili s vaším příspěvkem v %3.", - "upvoted_your_post_in_multiple": "%1 a %2 další/ch souhlasilo s vaším příspěvkem v %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 přesunul váš příspěvek do %2", "moved_your_topic": "%1 přesunul %2", "user_flagged_post_in": "%1 označil příspěvek v %2", "user_flagged_post_in_dual": "%1 a %2 označil příspěvek v %3", - "user_flagged_post_in_multiple": "%1 a %2 další/ch označili příspěvěk v %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 označil uživatelský profil (%2)", "user_flagged_user_dual": "%1 a %2 označili uživatelský profil (%3)", - "user_flagged_user_multiple": "%1 a %2 další/ch označili uživatelský profil (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 odpověděl na: %2", "user_posted_to_dual": "%1%2 odpověděli na: %3", - "user_posted_to_multiple": "%1 a %2 další/ch odpověděli na %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 založil nové téma: %2", "user_edited_post": "Příspěvek %2 byl upraven uživatelem %1 ", "user_started_following_you": "%1 vás začal sledovat.", "user_started_following_you_dual": "%1 a %2 vás začali sledovat.", - "user_started_following_you_multiple": "%1 a %2 další/ch vás začali sledovat.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 odeslal registrační požadavek.", "new_register_multiple": "Je zde %1 registračních požadavků čeká na vyřízení.", "flag_assigned_to_you": "Označení %1 vám bylo přiřazeno", @@ -66,6 +76,7 @@ "notificationType_follow": "Jakmile vás někdo začne sledovat", "notificationType_new-chat": "Obdržíte-li novou konverzační zprávu", "notificationType_new-group-chat": "Když obdržíte zprávu ve skupinové konverzaci", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Obdržíte-li pozvání ke skupině", "notificationType_group-leave": "Když uživatel opustí Vaši skupinu", "notificationType_group-request-membership": "Jakmile někdo pošle žádost o připojení se do vaší skupiny", diff --git a/public/language/da/admin/settings/reputation.json b/public/language/da/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/da/admin/settings/reputation.json +++ b/public/language/da/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/da/email.json b/public/language/da/email.json index 2687f24acb..7e52e35724 100644 --- a/public/language/da/email.json +++ b/public/language/da/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Ny chat besked modtaget fra %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klik her for at forsætte med samtalen", "notif.chat.unsub.info": "Denne chat notifikation blev sendt til dig pga. indstillingerne i dit abonnement.", "notif.post.unsub.info": "Denne indlægs notifikation var sendt pga. dine abonnering indstillinger.", diff --git a/public/language/da/error.json b/public/language/da/error.json index a78dffdf52..9ec2f6ea65 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/da/modules.json b/public/language/da/modules.json index ed8526fabd..0951dc43a5 100644 --- a/public/language/da/modules.json +++ b/public/language/da/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/da/notifications.json b/public/language/da/notifications.json index d2fd4b2638..0451ef8fb6 100644 --- a/public/language/da/notifications.json +++ b/public/language/da/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Ny besked fra %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 har upvotet dit indlæg i %2.", "upvoted_your_post_in_dual": "%1 og %2 har syntes godt om dit indlæg i %3.", - "upvoted_your_post_in_multiple": "%1 og %2 andre har syntes godt om dit indlæg i%3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 har flyttet dit indlæg til %2", "moved_your_topic": "%1 har flyttet %2", "user_flagged_post_in": "%1 har anmeldt et indlæg i %2", "user_flagged_post_in_dual": "%1 og %2 har anmeldt et indlæg i %3", - "user_flagged_post_in_multiple": "%1 og %2 andre har anmeldt et indlæg i %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 har skrevet et svar til: %2", "user_posted_to_dual": "%1 og %2 har skrevet svar til: %3", - "user_posted_to_multiple": "%1 og %2 andre har skrevet svar til: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 har oprettet en ny tråd: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 har valgt at følge dig.", "user_started_following_you_dual": "%1 og %2 har valgt at følge dig.", - "user_started_following_you_multiple": "%1 og %2 har valgt at følge dig.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 har sendt en registrerings anmodning.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/de/admin/settings/reputation.json b/public/language/de/admin/settings/reputation.json index 1f98481e0a..c37ae02282 100644 --- a/public/language/de/admin/settings/reputation.json +++ b/public/language/de/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Runtervoten pro Tag (auf 0 gesetzt für unbegrenzte Runtervotes)", "downvotes-per-user-per-day": "Runtervoten pro Benutzer pro Tag (auf 0 gesetzt für unbegrenzte Runtervotes)", "min-rep-chat": "Mindestreputation zum Senden von Chatnachrichten", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimales Ansehen und Beiträge zu melden", "min-rep-website": "Erforderliche Reputation um eine \"Website\" zum Benutzerprofil hinzuzufügen", "min-rep-aboutme": "Erforderliche Reputation um eine \"Über mich\"-Sektion zum Benutzerprofil hinzuzufügen", diff --git a/public/language/de/email.json b/public/language/de/email.json index f025b5fcdd..a7625b2b4a 100644 --- a/public/language/de/email.json +++ b/public/language/de/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Deine wöchentliche Zusammenfassung", "digest.title.month": "Deine monatliche Zusammenfassung", "notif.chat.subject": "Neue Chatnachricht von %1 erhalten", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klicke hier, um die Unterhaltung fortzusetzen", "notif.chat.unsub.info": "Diese Chat-Benachrichtigung wurde dir aufgrund deiner Abonnement-Einstellungen gesendet.", "notif.post.unsub.info": "Diese Mitteilung wurde dir aufgrund deiner Abonnement-Einstellungen gesendet.", diff --git a/public/language/de/error.json b/public/language/de/error.json index 010103fa7b..e08073effe 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Du benötigst %1 Ruf zum Chatten", "not-enough-reputation-to-upvote": "Du benötigst %1 Ruf, um upvoten zu können", "not-enough-reputation-to-downvote": "Du benötigst %1 Ruf, um abzustimmen", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Du benötigst %1 Ruf, um diesen Beitrag zu melden", "not-enough-reputation-min-rep-website": "Du benötigst %1 Ruf, um eine Website hinzuzufügen", "not-enough-reputation-min-rep-aboutme": "Du benötigst %1 Ruf, um eine Über mich hinzuzufügen", diff --git a/public/language/de/modules.json b/public/language/de/modules.json index 23a5321dc8..7a1ee2f416 100644 --- a/public/language/de/modules.json +++ b/public/language/de/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chatte mit", "chat.placeholder": "Gebe hier eine Chatnachricht ein, ziehe Bilder per Drag & Drop und drücke die Eingabetaste, um sie zu senden", "chat.placeholder.mobile": "Hier Chatnachricht eingeben", diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json index f2114912bd..34437ab9e1 100644 --- a/public/language/de/notifications.json +++ b/public/language/de/notifications.json @@ -15,31 +15,41 @@ "replies": "Antworten", "chat": "Chats", "group-chat": "Gruppenchats", + "public-chat": "Public Chats", "follows": "Folgt", "upvote": "Positive Bewertungen", "new-flags": "Neue Markierungen", "my-flags": "Mir zugewiesene Markierungen", "bans": "Verbannungen", "new_message_from": "Neue Nachricht von %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 hat deinen Beitrag in %2 positiv bewertet.", "upvoted_your_post_in_dual": "%1 und %2 haben deinen Beitrag in %3 positiv bewertet.", - "upvoted_your_post_in_multiple": "%1 und %2 andere Nutzer haben deinen Beitrag in %3 positiv bewertet.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 hat deinen Beitrag nach %2 verschoben.", "moved_your_topic": "%1 hat %2 verschoben.", "user_flagged_post_in": "%1 hat einen Beitrag in %2 gemeldet", "user_flagged_post_in_dual": "%1 und %2 haben einen Beitrag in %3 gemeldet", - "user_flagged_post_in_multiple": "%1 und %2 andere Nutzer haben einen Beitrag in %3 gemeldet", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 meldete ein Nutzerprofil (%2)", "user_flagged_user_dual": "%1 und %2 meldeten ein Nutzerprofil (%3)", - "user_flagged_user_multiple": "%1 und %2 weitere meldeten ein Nutzerprofil (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 hat auf %2 geantwortet.", "user_posted_to_dual": "%1 und %2 haben auf %3 geantwortet.", - "user_posted_to_multiple": "%1 und %2 andere Nutzer haben auf %3 geantwortet.", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 hat ein neues Thema erstellt: %2", "user_edited_post": "%1 hat einen Post in %2 bearbeitet", "user_started_following_you": "%1 folgt dir jetzt.", "user_started_following_you_dual": "%1 und %2 folgen dir jetzt.", - "user_started_following_you_multiple": "%1 und %2 andere Nutzer folgen dir jetzt.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 hat eine Registrationsanfrage geschickt.", "new_register_multiple": "Es erwarten %1 Registrierungsanfragen eine Überprüfung.", "flag_assigned_to_you": "Markierung %1 wurde Ihnen zugewiesen", @@ -66,6 +76,7 @@ "notificationType_follow": "Wenn dir jemand neues folgt", "notificationType_new-chat": "Wenn du eine Chat Nachricht erhältst", "notificationType_new-group-chat": "Wenn Du eine Gruppen-Chat-Nachricht erhalten hast", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Wenn du eine Gruppeneinladung erhältst", "notificationType_group-leave": "Wenn ein Benutzer Ihre Gruppe verlässt", "notificationType_group-request-membership": "Wenn jemand einer Gruppe beitreten möchte, die dir gehört", diff --git a/public/language/el/admin/settings/reputation.json b/public/language/el/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/el/admin/settings/reputation.json +++ b/public/language/el/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/el/email.json b/public/language/el/email.json index fd5957829e..19b7847147 100644 --- a/public/language/el/email.json +++ b/public/language/el/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Νέο μήνυμα συνομιλίας από τον/την %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Κάνε κλικ εδώ για να πας στην συνομιλία", "notif.chat.unsub.info": "Αυτή η ειδοποίηση για συνομιλία σου στάλθηκε λόγω των ρυθμίσεών σου. ", "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", diff --git a/public/language/el/error.json b/public/language/el/error.json index f329ff5f2e..cc68d2bc2a 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/el/modules.json b/public/language/el/modules.json index 070d1ba4f4..0069418878 100644 --- a/public/language/el/modules.json +++ b/public/language/el/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/el/notifications.json b/public/language/el/notifications.json index c930226e8f..35f03d4cfc 100644 --- a/public/language/el/notifications.json +++ b/public/language/el/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "New message from %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 has posted a reply to: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 started following you.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/en-GB/admin/manage/users.json b/public/language/en-GB/admin/manage/users.json index 1fef96f56d..08e5701f40 100644 --- a/public/language/en-GB/admin/manage/users.json +++ b/public/language/en-GB/admin/manage/users.json @@ -4,16 +4,21 @@ "edit": "Actions", "make-admin": "Make Admin", "remove-admin": "Remove Admin", + "change-email": "Change Email", + "new-email": "New Email", "validate-email": "Validate Email", "send-validation-email": "Send Validation Email", + "change-password": "Change Password", "password-reset-email": "Send Password Reset Email", "force-password-reset": "Force Password Reset & Log User Out", - "ban": "Ban User(s)", + "ban": "Ban", + "ban-users": "Ban User(s)", "temp-ban": "Ban User(s) Temporarily", "unban": "Unban User(s)", "reset-lockout": "Reset Lockout", "reset-flags": "Reset Flags", - "delete": "Delete User(s)", + "delete": "Delete", + "delete-users": "Delete User(s)", "delete-content": "Delete User(s) Content", "purge": "Delete User(s) and Content", "download-csv": "Download CSV", @@ -81,6 +86,7 @@ "alerts.button-ban-x": "Ban %1 user(s)", "alerts.unban-success": "User(s) unbanned!", "alerts.lockout-reset-success": "Lockout(s) reset!", + "alerts.password-change-success": "Password(s) changed!", "alerts.flag-reset-success": "Flags(s) reset!", "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", "alerts.make-admin-success": "User is now administrator.", @@ -106,6 +112,7 @@ "alerts.create": "Create User", "alerts.button-create": "Create", "alerts.button-cancel": "Cancel", + "alerts.button-change": "Change", "alerts.error-passwords-different": "Passwords must match!", "alerts.error-x": "Error

%1

", "alerts.create-success": "User created!", @@ -113,6 +120,10 @@ "alerts.prompt-email": "Emails: ", "alerts.email-sent-to": "An invitation email has been sent to %1", "alerts.x-users-found": "%1 user(s) found, (%2 seconds)", + "alerts.select-a-single-user-to-change-email": "Select a single user to change email", "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.", - "export-users-completed": "Users exported as csv, click here to download." + "export-users-completed": "Users exported as csv, click here to download.", + "email": "Email", + "password": "Password", + "manage": "Manage" } \ No newline at end of file diff --git a/public/language/en-GB/admin/settings/reputation.json b/public/language/en-GB/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/en-GB/admin/settings/reputation.json +++ b/public/language/en-GB/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/en-GB/email.json b/public/language/en-GB/email.json index 3f8043cc67..3b6709697e 100644 --- a/public/language/en-GB/email.json +++ b/public/language/en-GB/email.json @@ -46,6 +46,7 @@ "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "New chat message received from %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "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.", diff --git a/public/language/en-GB/error.json b/public/language/en-GB/error.json index a374787ea6..af0b72e990 100644 --- a/public/language/en-GB/error.json +++ b/public/language/en-GB/error.json @@ -199,6 +199,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/en-GB/modules.json b/public/language/en-GB/modules.json index 0fd767d049..d348e75e7c 100644 --- a/public/language/en-GB/modules.json +++ b/public/language/en-GB/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", @@ -8,7 +9,10 @@ "chat.chat-with-usernames-and-x-others": "Chat with %1 & %2 others", "chat.send": "Send", "chat.no_active": "You have no active chats.", - "chat.user_typing": "%1 is typing ...", + "chat.user_typing_1": "%1 is typing ...", + "chat.user_typing_2": "%1 and %2 are typing ...", + "chat.user_typing_3": "%1, %2 and %3 are typing ...", + "chat.user_typing_n": "%1, %2 and %3 others are typing ...", "chat.user_has_messaged_you": "%1 has messaged you.", "chat.replying-to": "Replying to %1", "chat.see_all": "All chats", @@ -29,6 +33,10 @@ "chat.delete_message_confirm": "Are you sure you wish to delete this message?", "chat.retrieving-users": "Retrieving users...", "chat.view-users-list": "View users list", + "chat.pinned-messages": "Pinned Messages", + "chat.no-pinned-messages": "There are no pinned messages", + "chat.pin-message": "Pin Message", + "chat.unpin-message": "Unpin Message", "chat.public-rooms": "Public Rooms (%1)", "chat.private-rooms": "Private Rooms (%1)", "chat.create-room": "Create Chat Room", @@ -89,6 +97,7 @@ "composer.zen_mode": "Zen Mode", "composer.select_category": "Select a category", "composer.textarea.placeholder": "Enter your post content here, drag and drop images", + "composer.post-queue-alert": "Hello👋!
This forum uses a post queue system, since you are a new user your post will be hidden until it is approved by our moderation team.", "composer.schedule-for": "Schedule topic for", "composer.schedule-date": "Date", "composer.schedule-time": "Time", diff --git a/public/language/en-GB/notifications.json b/public/language/en-GB/notifications.json index c4beb75c30..040117fcd0 100644 --- a/public/language/en-GB/notifications.json +++ b/public/language/en-GB/notifications.json @@ -17,6 +17,7 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", @@ -25,25 +26,34 @@ "new_message_from": "New message from %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to" : "%1 has posted a reply to: %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_triple" : "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple" : "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post" : "%1 has edited a post in %2", "user_started_following_you": "%1 started following you.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -72,6 +82,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/en-GB/user.json b/public/language/en-GB/user.json index 69bb631da7..e56cdfd4c1 100644 --- a/public/language/en-GB/user.json +++ b/public/language/en-GB/user.json @@ -64,6 +64,7 @@ "change_picture": "Change Picture", "change_username": "Change Username", "change_email": "Change Email", + "email-updated": "Email Updated", "email_same_as_password": "Please enter your current password to continue – you've entered your new email again", "edit": "Edit", "edit-profile": "Edit Profile", diff --git a/public/language/en-US/admin/settings/reputation.json b/public/language/en-US/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/en-US/admin/settings/reputation.json +++ b/public/language/en-US/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/en-US/email.json b/public/language/en-US/email.json index 3e35d7514c..0e5e1b8afe 100644 --- a/public/language/en-US/email.json +++ b/public/language/en-US/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "New chat message received from %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "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.", diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index 9ec0963641..f19e8ad0fa 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/en-US/modules.json b/public/language/en-US/modules.json index 070d1ba4f4..0069418878 100644 --- a/public/language/en-US/modules.json +++ b/public/language/en-US/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/en-US/notifications.json b/public/language/en-US/notifications.json index e5a6012c13..584927194b 100644 --- a/public/language/en-US/notifications.json +++ b/public/language/en-US/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "New message from %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 has posted a reply to: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 started following you.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/en-x-pirate/admin/settings/reputation.json b/public/language/en-x-pirate/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/en-x-pirate/admin/settings/reputation.json +++ b/public/language/en-x-pirate/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/en-x-pirate/email.json b/public/language/en-x-pirate/email.json index e31b3cf3cd..23f1be0c52 100644 --- a/public/language/en-x-pirate/email.json +++ b/public/language/en-x-pirate/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "New chat message received from %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "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.", diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json index 9ec0963641..f19e8ad0fa 100644 --- a/public/language/en-x-pirate/error.json +++ b/public/language/en-x-pirate/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/en-x-pirate/modules.json b/public/language/en-x-pirate/modules.json index 7bd33c38ec..d59feeb295 100644 --- a/public/language/en-x-pirate/modules.json +++ b/public/language/en-x-pirate/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/en-x-pirate/notifications.json b/public/language/en-x-pirate/notifications.json index df401190e2..ce989c11a8 100644 --- a/public/language/en-x-pirate/notifications.json +++ b/public/language/en-x-pirate/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "New message from %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 has posted a reply to: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 started following you.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/es/admin/settings/reputation.json b/public/language/es/admin/settings/reputation.json index b236d5a90d..079bc1c166 100644 --- a/public/language/es/admin/settings/reputation.json +++ b/public/language/es/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Reputación negativa para denunciar", "min-rep-website": "Reputación mínima para añadir \"Sitio web\" al perfil del usuario.", "min-rep-aboutme": "Reputación mínima para añadir \"Sobre mi\" al perfil de usuario.", diff --git a/public/language/es/email.json b/public/language/es/email.json index a07a86913e..89ba509a41 100644 --- a/public/language/es/email.json +++ b/public/language/es/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Nuevo mensaje de chat recibido de %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Haz click aquí para continuar la conversación", "notif.chat.unsub.info": "Esta notificación de chat se te envió debido a tus ajustes de suscripción.", "notif.post.unsub.info": "La notificación de este mensaje se te ha enviado debido a tus ajustes de subscripción.", diff --git a/public/language/es/error.json b/public/language/es/error.json index d5313d6d70..9f08e04050 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/es/modules.json b/public/language/es/modules.json index 55d8684a87..2126720b1d 100644 --- a/public/language/es/modules.json +++ b/public/language/es/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chatear con", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json index 225a649f43..8fb125804e 100644 --- a/public/language/es/notifications.json +++ b/public/language/es/notifications.json @@ -15,31 +15,41 @@ "replies": "Respuestas", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Seguidores", "upvote": "Votos positivos", "new-flags": "Nuevos reportes", "my-flags": "Reportado asignado a mí", "bans": "Baneos", "new_message_from": "Nuevo mensaje de %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 ha votado positivamente tu respuesta en %2.", "upvoted_your_post_in_dual": "%1 y %2 han votado positivamente tu respuesta en %3.", - "upvoted_your_post_in_multiple": "%1 y otras %2 personas han votado positivamente tu respuesta en %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 su tema ha sido movido a %2", "moved_your_topic": "%1 ha movido %2", "user_flagged_post_in": "%1 ha reportado una respuesta en %2", "user_flagged_post_in_dual": "%1 y %2 han reportado un post en %3", - "user_flagged_post_in_multiple": "%1 y otras %2 personas han reportado un post en %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 reportó el perfil (%2) ", "user_flagged_user_dual": "%1 y %2 reportaron el perfil (%3)", - "user_flagged_user_multiple": "%1 y otros %2 reportaron el perfil (%3) ", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 ha respondido a: %2", "user_posted_to_dual": "%1 y %2 han respondido a %3", - "user_posted_to_multiple": "%1 y otras %2 personas han respondido a: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 ha publicado un nuevo tema: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 comenzó a seguirte.", "user_started_following_you_dual": "%1 y %2 comenzaron a seguirte.", - "user_started_following_you_multiple": "%1 y otras %2 personas comenzaron a seguirte.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 envió una solicitud de registro.", "new_register_multiple": "Hay %1 peticiones de registros pendientes de revisión", "flag_assigned_to_you": "Reporte %1 te ha sido asignado.", @@ -66,6 +76,7 @@ "notificationType_follow": "Cuando alguien comienza a seguirte", "notificationType_new-chat": "Cuando recibes un mensaje de chat", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Cuando recibes una invitación a un grupo", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/et/admin/settings/reputation.json b/public/language/et/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/et/admin/settings/reputation.json +++ b/public/language/et/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/et/email.json b/public/language/et/email.json index 7bb5323856..3f58b29d91 100644 --- a/public/language/et/email.json +++ b/public/language/et/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Sulle on saabunud uus sõnum kasutajalt %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Vajuta siia, et jätkata vestlusega", "notif.chat.unsub.info": "See chat teavitus on saadetud teile tellimuse seadistuse tõttu.", "notif.post.unsub.info": "See postituse teavitus on saadetud teile tellimuse seadistuse tõttu.", diff --git a/public/language/et/error.json b/public/language/et/error.json index 11a4fc8249..d2197b6a5b 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/et/modules.json b/public/language/et/modules.json index 93a3f5a21f..a3c2db24bc 100644 --- a/public/language/et/modules.json +++ b/public/language/et/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json index c6479db247..c44319acce 100644 --- a/public/language/et/notifications.json +++ b/public/language/et/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Uus sõnum kasutajalt %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 hääletas sinu postituse poolt teemas %2.", "upvoted_your_post_in_dual": "%1 ja %2 kiitsid sinu postituse heaks: %3.", - "upvoted_your_post_in_multiple": "%1 ja %2 teist on kiitnud sinu postituse heaks: %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 liigutas sinu postituse %2 'sse", "moved_your_topic": "%1 liigutas %2", "user_flagged_post_in": "%1 raporteeris postitust %2", "user_flagged_post_in_dual": "%1 ja %2 märgistasid postituse: %3", - "user_flagged_post_in_multiple": "%1 ja %2 teist märgistasid postituse: %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "Kasutaja %1 postitas vastuse teemasse %2", "user_posted_to_dual": "%1 ja %2 on postitanud vastused: %3", - "user_posted_to_multiple": "%1 ja %2 teist on postitanud vastused: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 on postitanud uue teema: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 hakkas sind jälgima.", "user_started_following_you_dual": "%1 ja %2 hakkasid sind jälgima.", - "user_started_following_you_multiple": "%1 ja %2 hakkasid sind jälgima.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 saatis registreerimistaotluse.", "new_register_multiple": "%1 registreerimistaotlust ootavad ülevaadet.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/fa-IR/admin/settings/reputation.json b/public/language/fa-IR/admin/settings/reputation.json index 0f12e67296..848719352d 100644 --- a/public/language/fa-IR/admin/settings/reputation.json +++ b/public/language/fa-IR/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "کمترین اعتبار برای ارسال پیام‌های چت ", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/fa-IR/email.json b/public/language/fa-IR/email.json index 64225662e5..60762c8997 100644 --- a/public/language/fa-IR/email.json +++ b/public/language/fa-IR/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "پیام چتی جدیدی از %1 دریافت شد", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "برای ادامه‌ی چت اینجا کلیک کنید", "notif.chat.unsub.info": "این اطلاعیه ی چتیی که برای شما فرستاده شده به علت تنظیمات اشترک شماست.", "notif.post.unsub.info": "این اطلاعیه ی پستی که برای شما فرستاده شده به علت تنظیمات اشترک شماست.", diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json index a0a901833f..8d41ac6902 100644 --- a/public/language/fa-IR/error.json +++ b/public/language/fa-IR/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "شما به %1 اعتبار برای چت نیاز دارید ", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/fa-IR/modules.json b/public/language/fa-IR/modules.json index 7034b505e5..40735545a6 100644 --- a/public/language/fa-IR/modules.json +++ b/public/language/fa-IR/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "چت با", "chat.placeholder": "پیام چت را اینجا بنویس، عکس‌ها را اینجا درگ و دراپ کن، برای ارسال دکمه Enter را بزن", "chat.placeholder.mobile": "پیام چت را اینجا بنویس", diff --git a/public/language/fa-IR/notifications.json b/public/language/fa-IR/notifications.json index b8033cc50b..980484e1b4 100644 --- a/public/language/fa-IR/notifications.json +++ b/public/language/fa-IR/notifications.json @@ -15,31 +15,41 @@ "replies": "پاسخ ها", "chat": "گفتگو ها", "group-chat": "چت‌های گروهی", + "public-chat": "Public Chats", "follows": "دنبال کننده ها", "upvote": "رای های مثبت", "new-flags": "گزارش های جدید", "my-flags": "گزارش های اختصاص یافته به من", "bans": "اخراجی ها", "new_message_from": "پیام تازه از %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 امتیاز مثبت به پست شما در %2 داده", "upvoted_your_post_in_dual": "%1 و %2 رای مثبت به پست شما در\n %3.", - "upvoted_your_post_in_multiple": "%1و %2 دیگران به پست شما رای مثبت دادن در %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 پست شما را به %2 انتقال داده است", "moved_your_topic": "%2 %1 را منتقل کرده است", "user_flagged_post_in": "%1 پستی را در %2 گزارش کرده", "user_flagged_post_in_dual": "%1 و %2 پستی را در %3 گزارش کرده اند", - "user_flagged_post_in_multiple": "%1 و %2 نفر دیگر این پست را در %3 گزارش کرده اند", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1کاربری را برای بررسی گزارش کرد (%2)", "user_flagged_user_dual": "%1و %2کاربری را برای بررسی گزارش کردند (%3)", - "user_flagged_user_multiple": "%1و %2 دیگران کاربری را برای بررسی گزارش کردند (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "پاسخ دادن به %2 از سوی %1", "user_posted_to_dual": "%1 و %2 پاسخ به پست دادند در: %3", - "user_posted_to_multiple": "%1 و %2 نفر دیگر به پست شما پاسخ ارسال کرده‌اند در: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 یک موضوع جدید ارسال کرده: %2", "user_edited_post": "%1 پستی را در %2 ویرایش کرد", "user_started_following_you": "%1 شروع به دنبال کردن شما کرده", "user_started_following_you_dual": "%1 و %2 شروع به دنبال کردن شما کرده.", - "user_started_following_you_multiple": "%1 و %2 نفر دیگر شروع به دنبال کردن شما کرده.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 یک درخواست ثبت نام ارسال کرده است", "new_register_multiple": "تعداد %1 درخواست عضویت برای بررسی وجود دارد.", "flag_assigned_to_you": "گزارش %1به شما تعلق گرفت", @@ -66,6 +76,7 @@ "notificationType_follow": "هنگامی که کسی شما را دنبال می کند", "notificationType_new-chat": "هنگامی که شما پیام خصوصی دریافت می کنید", "notificationType_new-group-chat": "هنگامی که شما پیام چت گروهی دریافت می کنید", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "هنگامی که شما دعوتنامه گروه دریافت می کنید", "notificationType_group-leave": "هنگامی که کاربری گروه شما را ترک می کند", "notificationType_group-request-membership": "هنگامی که کسی درخواست ملحق شدن به گروه شما را می دهد", diff --git a/public/language/fa-IR/topic.json b/public/language/fa-IR/topic.json index f415d3e46c..d7dfe75444 100644 --- a/public/language/fa-IR/topic.json +++ b/public/language/fa-IR/topic.json @@ -12,7 +12,7 @@ "notify_me": "از پاسخ‌های تازه در موضوع آگاه شوید", "quote": "نقل قول", "reply": "پاسخ", - "replies_to_this_post": "1% پاسخ", + "replies_to_this_post": "%1 پاسخ", "one_reply_to_this_post": "1 پاسخ", "last_reply_time": "آخرین پاسخ", "reply-as-topic": "پاسخ به عنوان موضوع", @@ -72,9 +72,9 @@ "resolve-flag": "Resolve Flag", "merged_message": "این تاپیک با %2 ادغام شد ", "deleted_message": "این موضوع پاک شده است. تنها کاربرانِ با حق مدیریت موضوع می‌توانند آن را ببینند.", - "following_topic.message": "از این پس اگر کسی در این موضوع پست بگذارد، شما آگاه خواهید شد.", - "not_following_topic.message": "شما این موضوع را تو فهرست موضوعات خوانده نشده می‌بینید، اما وقتی پست جدیدی ارسال می‌شود آگاه‌سازی دریافت نمی‌کنید.", - "ignoring_topic.message": "شما دیگر نمی خواهید این موضوع را در فهرست عنوان های خوانده نشده ببینید. به شما اطلاع داده خواهد شد زمانی که به پست شما کسی رای بدهد.", + "following_topic.message": "زمانی که کسی پست جدیدی در این تاپیک بفرستد شما نوتیفیکشن دریافت خواهید کرد.", + "not_following_topic.message": "شما این تاپیک را در لیست تاپیک‌های خوانده‌نشده می‌بینید، اما وقتی پست جدیدی ارسال می‌شود نوتیفیکشن دریافت نمی‌کنید.", + "ignoring_topic.message": "شما دیگر نمی‌خواهید این موضوع را در فهرست تاپیک‌های خوانده نشده ببینید. وقتی کسی شما را منشن کند و یا به پست شما امتیاز مثبت دهد نوتیفیکشن ارسال می‌شود.", "login_to_subscribe": "برای دنبال کردن این موضوع، لطفا ثبت نام کنید و یا با نام کاربری خود وارد شوید", "markAsUnreadForAll.success": "موضوع برای همگان نخوانده در نظر گرفته شد.", "mark_unread": "علامت بزن به عنوان خوانده نشده", @@ -87,9 +87,9 @@ "watching": "درحال پیگیری", "not-watching": "درحال پیگیری نیستید", "ignoring": "نادیده گرفتن", - "watching.description": "به من اطلاع بده برای پاسخ های جدید.
نشان بده موضوع های خوانده نشده را.", - "not-watching.description": "به من پس از ارسال هر پاسخی جدیدی اطلاع نده.
موضوع به صورت خوانده نشده قرار بگیرد ولی نادیده گرفته نشود.", - "ignoring.description": "به من پس از ارسال هر پاسخی جدیدی اطلاع نده.
دیگر موضوع را به صورت خوانده نشده نشان نده.", + "watching.description": " برای پست های جدید نوتیفیکشن ارسال شود.
تاپیک را در صفحه نخوانده‌ها نشان بده.", + "not-watching.description": "برای هر پاسخ جدید نوتیفیکشن ارسال نشود.
اگر دسته بندی نادیده نگرفته شده تاپیک را در صفحه نخوانده ها نشان بده", + "ignoring.description": " برای پاسخ های جدید نوتیفیکشن ارسال نشود.
تاپیک را در صفحه نخوانده‌ها نشان نده.", "thread_tools.title": "ابزارهای موضوع", "thread_tools.markAsUnreadForAll": "برای همه کاربران نخوانده شده علامت بزن", "thread_tools.pin": "سنجاق زدن موضوع", @@ -205,5 +205,5 @@ "no-more-next-post": "شما پست بیشتری در این تاپیک ندارید", "post-quick-reply": "پاسخ سریع", "navigator.index": "پست %1 از %2", - "navigator.unread": "%1 unread" + "navigator.unread": "%1 خوانده نشده " } \ No newline at end of file diff --git a/public/language/fi/admin/settings/reputation.json b/public/language/fi/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/fi/admin/settings/reputation.json +++ b/public/language/fi/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/fi/email.json b/public/language/fi/email.json index f0e2f1e2fa..934d86ce37 100644 --- a/public/language/fi/email.json +++ b/public/language/fi/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Viikottainen koosteesi", "digest.title.month": "Kuukausittainen koosteesi", "notif.chat.subject": "Uusi chatviesti henkilöltä %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "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", diff --git a/public/language/fi/error.json b/public/language/fi/error.json index e701f5d6d1..77063a8a29 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/fi/modules.json b/public/language/fi/modules.json index 38dc299ac9..8bdf711dae 100644 --- a/public/language/fi/modules.json +++ b/public/language/fi/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json index ac012ccf62..bbd4bae857 100644 --- a/public/language/fi/notifications.json +++ b/public/language/fi/notifications.json @@ -15,31 +15,41 @@ "replies": "Vastaukset", "chat": "Keskustelut", "group-chat": "Group Chats", + "public-chat": "Public Chats", "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", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "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", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 on vastannut viestiin: %2", "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_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 on kirjoittanut uuden aiheen: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 alkoi seurata sinua.", "user_started_following_you_dual": "%1 ja %2 alkoivat seurata sinua", - "user_started_following_you_multiple": "%1 ja %2 muuta alkoivat seurata sinua", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "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", @@ -66,6 +76,7 @@ "notificationType_follow": "Kun joku alkaa seurata sinua", "notificationType_new-chat": "Kun saat viestin keskusteluun", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Kun saat kutsun ryhmään", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "Kun joku pyytää lupaa liittyä ryhmään, jonka omistaja olet", diff --git a/public/language/fr/admin/settings/reputation.json b/public/language/fr/admin/settings/reputation.json index a888590efc..d2a97f3652 100644 --- a/public/language/fr/admin/settings/reputation.json +++ b/public/language/fr/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Votes négatif par jour (0 = illimités)", "downvotes-per-user-per-day": "Votes négatif pour un utilisateur par jour (0 = illimités)", "min-rep-chat": "Réputation minimum pour écrire un message", + "min-rep-post-links": "Réputation minimale pour publier des liens", "min-rep-flag": "Réputation minimum pour signaler un message", "min-rep-website": "Réputation minimum pour ajouter \"Site internet\" au profil utilisateur", "min-rep-aboutme": "Réputation minimum pour ajouter \"À propos\" au profil utilisateur", diff --git a/public/language/fr/email.json b/public/language/fr/email.json index 161cf7ed0b..f19ff31fbd 100644 --- a/public/language/fr/email.json +++ b/public/language/fr/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Votre lettre d'activités hebdomadaire", "digest.title.month": "Votre lettre d'activités mensuel", "notif.chat.subject": "Nouveau message de chat reçu de %1", + "notif.chat.public-chat-subject": "Nouveau message de %1 dans la discussion %2", "notif.chat.cta": "Cliquez ici pour continuer la conversation", "notif.chat.unsub.info": "Cette notification de chat a été envoyé en raison de vos paramètres d'abonnement.", "notif.post.unsub.info": "La notification de ce message vous a été envoyé en raison de vos paramètres d'abonnement.", diff --git a/public/language/fr/error.json b/public/language/fr/error.json index 71304010e0..a29abd42bc 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Vous avez besoin de %1 réputation pour signaler", "not-enough-reputation-to-upvote": "Vous avez besoin de %1 réputation pour voter", "not-enough-reputation-to-downvote": "Vous avez besoin de %1 réputation pour voter", + "not-enough-reputation-to-post-links": "Vous avez besoin de %1 réputation pour publier des liens", "not-enough-reputation-to-flag": "Vous avez besoin de %1 réputation pour faire un signalement", "not-enough-reputation-min-rep-website": "Vous avez besoin de %1 réputation pour ajouter un site Web", "not-enough-reputation-min-rep-aboutme": "Vous avez besoin de %1 réputation pour ajouter à propos de moi", diff --git a/public/language/fr/modules.json b/public/language/fr/modules.json index 31b7833088..154f2556c2 100644 --- a/public/language/fr/modules.json +++ b/public/language/fr/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Discussion %1", "chat.chatting_with": "Discuter avec", "chat.placeholder": "Écrivez vos message ici, faites glisser / déposez les images, validez sur entrée pour envoyer", "chat.placeholder.mobile": "Tapez le message ici", diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json index 8a63968f19..69d2056b2f 100644 --- a/public/language/fr/notifications.json +++ b/public/language/fr/notifications.json @@ -15,31 +15,41 @@ "replies": "Réponses", "chat": "Discussions", "group-chat": "Groupe de discussions", + "public-chat": "Discussions plubiques", "follows": "Suivis", "upvote": "Votes positifs", "new-flags": "Nouveaux drapeaux", "my-flags": "Drapeaux assignés à moi", "bans": "Bannissements", "new_message_from": "Nouveau message de %1", + "user_posted_in_public_room": "%1 à écrit dans %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 a voté pour votre message dans %2.", "upvoted_your_post_in_dual": "%1 et %2 ont voté pour votre message dans %3.", - "upvoted_your_post_in_multiple": "%1 et %2 autres on voté pour votre message dans %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 a déplacé votre message vers %2", "moved_your_topic": "%1 a déplacé %2.", "user_flagged_post_in": "%1 a signalé un message dans %2.", "user_flagged_post_in_dual": "%1 et %2 ont signalé un message dans %3", - "user_flagged_post_in_multiple": "%1 et %2 autres on signalé un message dans %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 a signalé un profil utilisateur (%2)", "user_flagged_user_dual": "%1 et %2 ont signalé un profil utilisateur (%3)", - "user_flagged_user_multiple": "%1 et %2 autres utilisateurs ont signalé un profil utilisateur (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 a répondu à : %2", "user_posted_to_dual": "%1 et %2 ont posté une réponse à : %3", - "user_posted_to_multiple": "%1 et %2 autres ont posté une réponse à : %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 a posté un nouveau sujet: %2.", "user_edited_post": "%1 a édité un message dans %2", "user_started_following_you": "%1 vous suit.", "user_started_following_you_dual": "%1 et %2 se sont abonnés à votre compte.", - "user_started_following_you_multiple": "%1 et %2 autres se sont abonnés à votre compte.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 a envoyé une demande d'incription.", "new_register_multiple": "%1 inscription(s) est en attente de validation.", "flag_assigned_to_you": "Drapeau %1 vous a été assigné", @@ -66,6 +76,7 @@ "notificationType_follow": "Lorsque quelqu'un commence à vous suivre", "notificationType_new-chat": "Lorsque vous recevez un message du chat ", "notificationType_new-group-chat": "Lorsque vous recevez un message de discussion de groupe", + "notificationType_new-public-chat": "Lorsque vous recevez un message du groupe de discussion publique", "notificationType_group-invite": "Lorsque vous recevez une invitation d'un groupe", "notificationType_group-leave": "Lorsqu'un utilisateur quitte votre groupe", "notificationType_group-request-membership": "Quand quelqu'un demande à rejoindre un groupe que vous administrez", diff --git a/public/language/gl/admin/settings/reputation.json b/public/language/gl/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/gl/admin/settings/reputation.json +++ b/public/language/gl/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/gl/email.json b/public/language/gl/email.json index 6cd015df60..18ffdece58 100644 --- a/public/language/gl/email.json +++ b/public/language/gl/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Nova charla recibida de %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Pica aquí para continuar a conversación", "notif.chat.unsub.info": "Esta notificación de charla foiche enviada polas túas opcións de subscrición.", "notif.post.unsub.info": "Esta notificación de mensaxe foiche enviada polas túas opcións de subscrición.", diff --git a/public/language/gl/error.json b/public/language/gl/error.json index aae9e55d49..055c6d132e 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/gl/modules.json b/public/language/gl/modules.json index 985ed67510..5f029bf2d6 100644 --- a/public/language/gl/modules.json +++ b/public/language/gl/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/gl/notifications.json b/public/language/gl/notifications.json index 9c36fc9ebd..1ebe787f85 100644 --- a/public/language/gl/notifications.json +++ b/public/language/gl/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Nova mensaxe de %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 votoute positivo en %2.", "upvoted_your_post_in_dual": "%1 e %2 votaron positivamente a túa mensaxe en %3.", - "upvoted_your_post_in_multiple": "%1 e %2 máis votaron positivamente a túa mensaxe en %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 moveu a túa publicación a%2", "moved_your_topic": "%1 moveu %2", "user_flagged_post_in": "%1 reportou unha mensaxe en %2", "user_flagged_post_in_dual": "%1 e %2 reportaron a túa mensaxe en %3", - "user_flagged_post_in_multiple": "%1 e outras %2 persoas reportaron unha mensaxe en %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 publicou unha resposta en: %2", "user_posted_to_dual": "%1 e %2 responderon a %3", - "user_posted_to_multiple": "%1 e outras %2 persoas responderon a: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 publicou un novo tema: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 comezou a seguirte.", "user_started_following_you_dual": "%1 e %2 comezaron a seguirte.", - "user_started_following_you_multiple": "%1 e %2 máis comezaron a seguirte.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 enviou unha petición de rexistro.", "new_register_multiple": "Hai %1 peticións de rexistros pendentes de revisión", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/he/admin/admin.json b/public/language/he/admin/admin.json index 05c6ac70fb..7e94d2b2ba 100644 --- a/public/language/he/admin/admin.json +++ b/public/language/he/admin/admin.json @@ -14,5 +14,5 @@ "view": "צפייה", "edit": "עריכה", "add": "הוספה", - "select-icon": "Select Icon" + "select-icon": "בחר סמל" } \ No newline at end of file diff --git a/public/language/he/admin/dashboard.json b/public/language/he/admin/dashboard.json index 472c01a389..77d70892f6 100644 --- a/public/language/he/admin/dashboard.json +++ b/public/language/he/admin/dashboard.json @@ -25,7 +25,7 @@ "updates": "עדכונים", "running-version": "הפורום מעודכן לגרסה %1", - "keep-updated": "לעדכוני אבטחה מעודכנים ותיקוני באגים, וודא שהפורום שלך עדכני לגרסה האחרונה.", + "keep-updated": "לעדכוני אבטחה ותיקוני באגים, וודא שהפורום שלך עדכני לגרסה האחרונה.", "up-to-date": "אתה מעודכן ", "upgrade-available": "גרסה חדשה (v%1) שוחררה. שקול לעדכן את הפורום שלך.", "prerelease-upgrade-available": "זוהי גרסת טרום-הפצה מיושנת של NodeBB. גרסה חדשה (v%1) שוחררה. שקול לשדרג את ה-NodeBB שלך.", @@ -48,7 +48,7 @@ "restart-disabled": "הפעלה או בניה מחדש של הפורום בוטלה, נראה שאינך מפעיל את הפורום דרך שרת מתאים.", "maintenance-mode": "מצב תחזוקה", "maintenance-mode-title": "לחץ כאן על מנת להכניס את הפורום למצב תחזוקה", - "dark-mode": "Dark Mode", + "dark-mode": "מצב כהה", "realtime-chart-updates": "עדכן תרשים בזמן אמת", "active-users": "משתמשים פעילים", @@ -91,8 +91,8 @@ "start": "התחלה", "end": "סיום", "filter": "סינון", - "view-as-json": "View as JSON", - "expand-analytics": "Expand analytics", - "clear-search-history": "Clear Search History", - "clear-search-history-confirm": "Are you sure you want to clear entire search history?" + "view-as-json": "הצג כ-JSON", + "expand-analytics": "הרחב ניתוח", + "clear-search-history": "מחק היסטוריית חיפושים", + "clear-search-history-confirm": "האם אתה בטוח שברצונך למחוק את כל היסטוריית החיפושים?" } diff --git a/public/language/he/admin/menu.json b/public/language/he/admin/menu.json index affb02c2e8..af4a3d8276 100644 --- a/public/language/he/admin/menu.json +++ b/public/language/he/admin/menu.json @@ -14,7 +14,7 @@ "manage/users": "משתמשים", "manage/admins-mods": "מנחים ומנהלים", "manage/registration": "תור הרשמה", - "manage/flagged-content": "Flagged Content", + "manage/flagged-content": "תוכן מדווח", "manage/post-queue": "תור פוסטים", "manage/groups": "קבוצות", "manage/ip-blacklist": "רשימה שחורה של כתובות IP", diff --git a/public/language/he/admin/settings/chat.json b/public/language/he/admin/settings/chat.json index c7a3bdf478..27a5f0e69d 100644 --- a/public/language/he/admin/settings/chat.json +++ b/public/language/he/admin/settings/chat.json @@ -4,7 +4,7 @@ "disable-editing": "השבת עריכה/מחיקה של הודעות צ'אט", "disable-editing-help": "מנהלי מערכת ומנחים גלובליים פטורים מהגבלה זו", "max-length": "אורך מקסימלי של הודעת צ'אט", - "max-chat-room-name-length": "Maximum length of chat room names", + "max-chat-room-name-length": "אורך מקסימלי של שם חדר צ'אט", "max-room-size": "מספר המשתמשים המרבי בחדרי צ'אט", "delay": "זמן המתנה בין הודעות צ'אט - באלפיות שניה", "notification-delay": "עיכוב התראות להודעות צ'אט. (0 ללא עיכוב)", diff --git a/public/language/he/admin/settings/reputation.json b/public/language/he/admin/settings/reputation.json index db9974f451..780bc97170 100644 --- a/public/language/he/admin/settings/reputation.json +++ b/public/language/he/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "הצבעות מטה ליום (מוגדרות ל -0 להצבעות למטה ללא הגבלה)", "downvotes-per-user-per-day": "הצבעות למטה למשתמש ליום (מוגדרות ל -0 להצבעות למטה ללא הגבלה)", "min-rep-chat": "מוניטין מינימלי כדי לשלוח הודעות בצ'אט", + "min-rep-post-links": "מינימום מוניטין כדי לפרסם קישורים", "min-rep-flag": "מוניטין מינימלי כדי לדווח על הודעות", "min-rep-website": "מוניטין מינימלי להוספת \"אתר\" לפרופיל המשתמש", "min-rep-aboutme": "מוניטין מינימלי להוסיף \"אודותיי\" לפרופיל המשתמש", diff --git a/public/language/he/email.json b/public/language/he/email.json index 9ac51b3bbd..29f9e2962c 100644 --- a/public/language/he/email.json +++ b/public/language/he/email.json @@ -37,6 +37,7 @@ "digest.title.week": "התקציר השבועי שלך", "digest.title.month": "התקציר החודשי שלך", "notif.chat.subject": "הודעת צ'אט חדשה התקבלה מ%1", + "notif.chat.public-chat-subject": "הודעה חדשה מאת %1 בחדר %2", "notif.chat.cta": "לחץ כאן כדי להמשיך את השיחה", "notif.chat.unsub.info": "התראה הצ'אט הזו נשלחה אליך על-פי הגדרות החשבון שלך.", "notif.post.unsub.info": "התראת הפוסט הזו נשלחה אליך על-פי הגדרות החשבון שלך.", diff --git a/public/language/he/error.json b/public/language/he/error.json index c959a0e711..74445a55b1 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -55,7 +55,7 @@ "user-banned-reason-until": "מצטערים, חשבון זה הורחק עד %1 (סיבה: %2)", "user-too-new": "אנא המתינו %1 שניות לפני פרסום ההודעה", "blacklisted-ip": "מצטערים, אך הורחקתם מקהילה זו. אם הנכם סבורים שמדובר בטעות, אנא צרו קשר עם מנהלי הקהילה.", - "cant-blacklist-self-ip": "You can't blacklist your own IP", + "cant-blacklist-self-ip": "לא ניתן לרשום את ה-IP של עצמך ברשימה השחורה", "ban-expiry-missing": "אנא ספקו תאריך סיום להרחקה זו.", "no-category": "קטגוריה אינה קיימת", "no-topic": "נושא אינו קיים", @@ -165,13 +165,14 @@ "chat-room-does-not-exist": "חדר צ'אט אינו קיים.", "cant-add-users-to-chat-room": "לא ניתן להוסיף משתמשים לחדר הצ'אט.", "cant-remove-users-from-chat-room": "לא ניתן להסיר משתמשים מחדר הצ'אט.", - "chat-room-name-too-long": "Chat room name too long. Names can't be longer than %1 characters.", + "chat-room-name-too-long": "שם החדר ארוך מדי. השם לא יכול להיות ארוך מ-%1 תווים.", "already-voting-for-this-post": "הצבעתם כבר בנושא זה.", "reputation-system-disabled": "מערכת המוניטין לא פעילה.", "downvoting-disabled": "היכולת להצביע נגד מושבתת", "not-enough-reputation-to-chat": "נדרש %1 מוניטין כדי לכתוב בצ'אט", "not-enough-reputation-to-upvote": "נדרש %1 מוניטין כדי להצביע בעד", "not-enough-reputation-to-downvote": "נדרש %1 מוניטין כדי להצביע למטה", + "not-enough-reputation-to-post-links": "אתה צריך %1 מוניטין כדי לפרסם קישורים", "not-enough-reputation-to-flag": "נדרש %1 מוניטין כדי לדווח על פוסט", "not-enough-reputation-min-rep-website": "נרדש %1 מוניטין כדי להוסיף אתר אינטרנט", "not-enough-reputation-min-rep-aboutme": "נדרש %1 מוניטין כדי להוסיף תיאור", diff --git a/public/language/he/global.json b/public/language/he/global.json index 4e0395b1dc..7dd51cee85 100644 --- a/public/language/he/global.json +++ b/public/language/he/global.json @@ -51,8 +51,8 @@ "nextpage": "העמוד הבא", "alert.success": "הצלחה", "alert.error": "שגיאה", - "alert.warning": "Warning", - "alert.info": "Info", + "alert.warning": "אזהרה", + "alert.info": "מידע", "alert.banned": "מורחק", "alert.banned.message": "You have just been banned, your access is now restricted.", "alert.unbanned": "Unbanned", diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 1968510ea0..02a60be83d 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "חדר %1", "chat.chatting_with": "שוחחו בצ'אט עם", "chat.placeholder": "כתבו תוכן הודעת הצ'אט כאן, ניתן לגרור ולשחרר כאן תמונות, הקישו אנטר לשליחה.", "chat.placeholder.mobile": "הקלד הודעת צ'אט כאן", @@ -10,7 +11,7 @@ "chat.no_active": "אין לכם צ'אטים פעילים.", "chat.user_typing": "%1 מקליד...", "chat.user_has_messaged_you": "ל%1 יש הודעה עבורכם.", - "chat.replying-to": "Replying to %1", + "chat.replying-to": "מגיב ל%1", "chat.see_all": "צפו בכל הצ'אטים", "chat.mark_all_read": "סמנו את כל הצ'אטים כ'נקראו'", "chat.no-messages": "בחרו משתמש על מנת לראות את שיחות הצ'אט ביניכם", @@ -50,7 +51,7 @@ "chat.rename-room": "שינוי שם חדר", "chat.rename-placeholder": "הזינו את שם החדר שלכם כאן", "chat.rename-help": "שם החדר המוגדר כאן יהיה זמין לכל המשתתפים בחדר.", - "chat.leave": "Leave", + "chat.leave": "יציאה", "chat.leave-room": "עזוב חדר", "chat.leave-prompt": "האם לעזוב שיחה זו?", "chat.leave-help": "עזיבת שיחה, תסיר אתכם מהתכתבות עתידית בצ'אט זה. אם תצטרפו מחדש בעתיד, לא תראו את היסטוריית הצ'אט שלפני הצטרפותכם מחדש.", @@ -62,9 +63,9 @@ "chat.show-ip": "הצג IP", "chat.owner": "מנהלי החדר", "chat.grant-rescind-ownership": "הענק/בטל בעלות", - "chat.system.user-join": "%1 has joined the room ", - "chat.system.user-leave": "%1 has left the room ", - "chat.system.room-rename": "%2 has renamed this room to \"%1\" ", + "chat.system.user-join": "%1 הצטרף לחדר ", + "chat.system.user-leave": "%1 עזב את החדר ", + "chat.system.room-rename": "%2 שינה את שם החדר הזה ל \"%1\" ", "composer.compose": "יצירה", "composer.show_preview": "הצגת תצוגה מקדימה", "composer.hide_preview": "הסתרת תצוגה מקדימה", diff --git a/public/language/he/notifications.json b/public/language/he/notifications.json index 5b60088902..425c9377bb 100644 --- a/public/language/he/notifications.json +++ b/public/language/he/notifications.json @@ -15,31 +15,41 @@ "replies": "תגובות", "chat": "צ'אטים", "group-chat": "צ'אט קבוצתי", + "public-chat": "צ'אטים ציבוריים", "follows": "עוקבים", "upvote": "הצבעות בעד", "new-flags": "דיווחים חדשים", "my-flags": "דיווחים שהוקצו עבורי", "bans": "הרחקות", "new_message_from": "הודעה חדשה מ %1", + "user_posted_in_public_room": "%1 כתבו ב-%3", + "user_posted_in_public_room_dual": "%1 ו%2 כתבו ב-%4", + "user_posted_in_public_room_triple": "%1, %2 ו%3 כתבו ב-%5", + "user_posted_in_public_room_multiple": "%1, %2 ו-%3 אחרים כתבו ב-%5", "upvoted_your_post_in": "%1 הצביע בעד הפוסט שלך ב %2", "upvoted_your_post_in_dual": "%1 ו%2 הצביעו בעד הפוסט שלך ב%3", - "upvoted_your_post_in_multiple": "%1 ו%2 אחרים הצביעו לפוסט שלך ב%3.", + "upvoted_your_post_in_triple": "%1, %2 ו%3 הצביעו בעד הפוסט שלך ב-%4.", + "upvoted_your_post_in_multiple": "%1, %2 ו-%3 אחרים הצביעו בעד הפוסט שלך ב-%4.", "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_post_in_triple": "%1, %2 ו%3 דיווחו על פוסט ב-%4", + "user_flagged_post_in_multiple": "%1, %2 ו-%3 אחרים דיווחו על פוסט ב-%4", "user_flagged_user": "%1 דיווח על משתמש (%2)", "user_flagged_user_dual": "%1 ו - %2 דיווחו על משתמש (%3)", - "user_flagged_user_multiple": "%1 ו-%2 נוספים דיווחו על משתמש (%3)", + "user_flagged_user_triple": "%1, %2 ו%3 דיווחו על פרופיל משתמש (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 פרסם תגובה ל: %2", "user_posted_to_dual": "%1 ו%2 הגיבו ל: %3", - "user_posted_to_multiple": "%1 ו%2 אחרים הגיבו ל: %3", + "user_posted_to_triple": "%1, %2 ו3% הגיבו ל: %4", + "user_posted_to_multiple": "%1, %2 ו-%3 אחרים הגיבו ל: %4", "user_posted_topic": "%1 העלה נושא חדש: %2", "user_edited_post": "%1 ערך פוסט ב: %2", "user_started_following_you": "%1 התחיל לעקוב אחריך.", "user_started_following_you_dual": "%1 ו-%2 התחילו לעקוב אחריך.", - "user_started_following_you_multiple": "%1 ו%2 התחילו לעקוב אחריך.", + "user_started_following_you_triple": "%1, %2 ו3% התחילו לעקוב אחריך.", + "user_started_following_you_multiple": "%1, %2 ו-%3 אחרים התחילו לעקוב אחריך.", "new_register": "%1 שלח בקשת הרשמה.", "new_register_multiple": "ישנן %1 בקשות הרשמה שמחכות לבדיקה.", "flag_assigned_to_you": "דיווח %1 הוקצה עבורך", @@ -66,6 +76,7 @@ "notificationType_follow": "כשמישהו מתחיל לעקוב אחריך", "notificationType_new-chat": "כשאתה מקבל הודעת צאט", "notificationType_new-group-chat": "כשאתה מקבל הודעת צ'אט קבוצתית", + "notificationType_new-public-chat": "כאשר מתקבלת הודעה בקבוצת צ'אט ציבורית", "notificationType_group-invite": "כשאתה מקבל הזמנה מקבוצה", "notificationType_group-leave": "כאשר משתמש עוזב את הקבוצה שלך", "notificationType_group-request-membership": "כשמישהו מבקש להירשם לקבוצה שאתה מנהל", diff --git a/public/language/hr/admin/settings/reputation.json b/public/language/hr/admin/settings/reputation.json index 54894d1fd0..4487af8017 100644 --- a/public/language/hr/admin/settings/reputation.json +++ b/public/language/hr/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimalna reputacija za označavanje objava", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/hr/email.json b/public/language/hr/email.json index f2bbfc0ab2..38aa6f2ba7 100644 --- a/public/language/hr/email.json +++ b/public/language/hr/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Nova poruka od %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klikni ovdje za nastavak razgovora ", "notif.chat.unsub.info": "Ova obavijest razgovora Vam je poslana na temelju vaših postavki pretplate.", "notif.post.unsub.info": "Ova objava Vam je poslana na temelju vaših postavki pretplate.", diff --git a/public/language/hr/error.json b/public/language/hr/error.json index 77ca94bc2f..7fdf7d7f4d 100644 --- a/public/language/hr/error.json +++ b/public/language/hr/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/hr/modules.json b/public/language/hr/modules.json index 0009842c19..6a2ce294a5 100644 --- a/public/language/hr/modules.json +++ b/public/language/hr/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Razgovaraj s", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/hr/notifications.json b/public/language/hr/notifications.json index 08576b1d30..64d3b78e4f 100644 --- a/public/language/hr/notifications.json +++ b/public/language/hr/notifications.json @@ -15,31 +15,41 @@ "replies": "Odgovori", "chat": "Razgovori", "group-chat": "Grupni Chat", + "public-chat": "Public Chats", "follows": "Pratitelji", "upvote": "Glasači za", "new-flags": "Nove zastave", "my-flags": "Zastave označene na mene", "bans": "Blokirani", "new_message_from": "Poruka od %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 je glasao za u %2.", "upvoted_your_post_in_dual": "%1 i %2 Glasalo je za Vašu objavu in %3.", - "upvoted_your_post_in_multiple": "%1 i %2 ostalih glasalo je za Vašu objavu %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 je premjestio Vašu objavu u %2", "moved_your_topic": "%1 je premjestio %2", "user_flagged_post_in": "%1 je označio objavu u %2", "user_flagged_post_in_dual": "%1 i %2 označio objavu u %3", - "user_flagged_post_in_multiple": "%1 i %2 ostalih označio objavu u %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 označio je profil (%2)", "user_flagged_user_dual": "%1 i %2su označili profil (%3)", - "user_flagged_user_multiple": "%1 i %2 ostalih su označili korisnički profil (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 je odgovorio/la na: %2", "user_posted_to_dual": "%1 i %2 ostalih su odgovorili na objavu u: %3", - "user_posted_to_multiple": "%1 i %2 drugih su odgovorili na: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 je otvorio novu temu: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 Vas sada prati.", "user_started_following_you_dual": "%1 i %2 vas sada prate.", - "user_started_following_you_multiple": "%1 i %2 ostalih vas sada prate.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 je poslao zahtjev za registraciju.", "new_register_multiple": "%1 registracija čeka odobrenje.", "flag_assigned_to_you": "Zastava%1 je dodijeljena vama.", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/hu/admin/settings/reputation.json b/public/language/hu/admin/settings/reputation.json index 7e686d9250..df6747373d 100644 --- a/public/language/hu/admin/settings/reputation.json +++ b/public/language/hu/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Leszavazások naponta (adj meg 0-t, hogy ne legyen korlátozás)", "downvotes-per-user-per-day": "Leszavazások felhasználónként naponta (adj meg 0-t, hogy ne legyen korlátozás)", "min-rep-chat": "Minimális hírnév a csevegőüzenetek küldéséhez", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Szükséges minimális hírnév hozzászólások megjelöléséhez", "min-rep-website": "Szükséges minimális hírnév \"weboldal\" megadásához a felhasználói profilon", "min-rep-aboutme": "Szükséges minimális hírnév \"bemutatkozás\" megadásához a felhasználói profilon", diff --git a/public/language/hu/email.json b/public/language/hu/email.json index 19ff665c48..e1daae30bb 100644 --- a/public/language/hu/email.json +++ b/public/language/hu/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Heti összefoglalód", "digest.title.month": "Havi összefoglalód", "notif.chat.subject": "Új chat üzenet érkezett a következőtől: %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Kattints ide a beszélgetés folytatásához", "notif.chat.unsub.info": "Ez a chat-értesítés a feliratkozási beállításaid miatt lett kiküldve.", "notif.post.unsub.info": "Ez a hozzászólás-értesítés a feliratkozási beállításaid miatt lett kiküldve.", diff --git a/public/language/hu/error.json b/public/language/hu/error.json index c0c0fe9794..bb1825f9c4 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "A csevegéshez %1 hírnévre van szüksége", "not-enough-reputation-to-upvote": "A pozitív szavazáshoz %1 hírnévre van szüksége", "not-enough-reputation-to-downvote": "A negatív szavazáshoz %1 hírnévre van szüksége", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "A bejegyzés megjelöléséhez %1 hírnévre van szüksége", "not-enough-reputation-min-rep-website": "Webhely hozzáadásához %1 hírnévre van szüksége", "not-enough-reputation-min-rep-aboutme": "A rólam mező kitöltéséhez %1 hírnévre van szüksége", diff --git a/public/language/hu/modules.json b/public/language/hu/modules.json index 8218e1b19d..2e31addbaf 100644 --- a/public/language/hu/modules.json +++ b/public/language/hu/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Csevegés vele", "chat.placeholder": "Írja be ide a csevegőüzenetet, húzza át a képeket, majd nyomja meg az Enter billentyűt a küldéshez", "chat.placeholder.mobile": "Írja be ide a csevegő üzenetet", diff --git a/public/language/hu/notifications.json b/public/language/hu/notifications.json index f9c3371a1e..6611e4fb19 100644 --- a/public/language/hu/notifications.json +++ b/public/language/hu/notifications.json @@ -15,31 +15,41 @@ "replies": "Válasz", "chat": "Chat", "group-chat": "Csoport Csevegők", + "public-chat": "Public Chats", "follows": "Követés", "upvote": "Kedvelés", "new-flags": "Új megjelölés", "my-flags": "Hozzám társított megjelölés", "bans": "Kitiltás", "new_message_from": "Új üzenet, feladó: %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 kedvelte a hozzászólásod itt: %2.", "upvoted_your_post_in_dual": "%1 és %2 kedvelte a hozzászólásod itt: %3.", - "upvoted_your_post_in_multiple": "%1 és %2 másik kedvelte a hozzászólásod itt: %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 áthelyezte a hozzászólásod ide: %2", "moved_your_topic": "%1 áthelyezve: %2", "user_flagged_post_in": "%1 megjelölt egy hozzászólást itt: %2", "user_flagged_post_in_dual": "%1 és%2 megjelölt egy hozzászólást itt: %3", - "user_flagged_post_in_multiple": "%1 és %2 másik megjelölt egy hozzászólást itt: %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 megjelölt egy felhasználói profilt (%2)", "user_flagged_user_dual": "%1 és %2 megjelölt egy felhasználói profilt (%3)", - "user_flagged_user_multiple": "%1 és %2 másik megjelölt egy felhasználói profilt (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 választ írt neki: %2", "user_posted_to_dual": "%1 és%2 választ írt neki: %3", - "user_posted_to_multiple": "%1 és %2 másik választ írt neki: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 új témakört hozott létre: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 elkezdett követni téged.", "user_started_following_you_dual": "%1 és%2 elkezdett követni téged.", - "user_started_following_you_multiple": "%1 és %2 másik elkezdett követni téged.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 regisztrációs kérvényt nyújtott be.", "new_register_multiple": "Jelenleg %1 regisztrációs kérvény vár elbírálásra.", "flag_assigned_to_you": "%1 megjelölés hozzád van társítva", @@ -66,6 +76,7 @@ "notificationType_follow": "Mikor valaki elkezd követni téged", "notificationType_new-chat": "Mikor chat üzenetet kapsz", "notificationType_new-group-chat": "Mikor kapsz egy csoportos chat üzenetet", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Mikor csoportmeghívást kapsz", "notificationType_group-leave": "Mikor egy felhasználó elhagyja a csoportot", "notificationType_group-request-membership": "Mikor valaki jelentkezni szeretne a csoportba ami a tiéd", diff --git a/public/language/hy/admin/settings/reputation.json b/public/language/hy/admin/settings/reputation.json index 1988149c3f..7d123f6675 100644 --- a/public/language/hy/admin/settings/reputation.json +++ b/public/language/hy/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Օրական դեմ ձայներ (սահմանված է 0՝ անսահմանափակ դեմ ձայների համար)", "downvotes-per-user-per-day": "Դեմ ձայներ մեկ օգտատիրոջ համար մեկ օրում (սահմանված է 0՝ անսահմանափակ դեմ ձայների համար)", "min-rep-chat": "Զրույցի հաղորդագրություններ ուղարկելու նվազագույն վարկանիշ", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Նվազագույն վարկանիշ դրոշի գրառումների համար", "min-rep-website": "«Վեբկայք» օգտատերի պրոֆիլին ավելացնելու նվազագույն վարկանիշ", "min-rep-aboutme": "«Իմ մասին» օգտատիրոջ պրոֆիլին ավելացնելու նվազագույն վարկանիշ", diff --git a/public/language/hy/email.json b/public/language/hy/email.json index d14651774b..7aa5c31f18 100644 --- a/public/language/hy/email.json +++ b/public/language/hy/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Ձեր շաբաթական ամփոփագիրը", "digest.title.month": "Ձեր ամսական ամփոփագիրը", "notif.chat.subject": "Նոր զրույցի հաղորդագրություն ստացվել է %1-ից", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Սեղմեք այստեղ՝ զրույցը շարունակելու համար", "notif.chat.unsub.info": "Այս զրույցի ծանուցումն ուղարկվել է ձեզ՝ ձեր բաժանորդագրության կարգավորումների պատճառով:", "notif.post.unsub.info": "Գրառման այս ծանուցումն ուղարկվել է ձեզ՝ ձեր բաժանորդագրության կարգավորումների պատճառով:", diff --git a/public/language/hy/error.json b/public/language/hy/error.json index e0a48e0a41..721b7493f8 100644 --- a/public/language/hy/error.json +++ b/public/language/hy/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Ձեզ անհրաժեշտ է %1 վարկանիշ զրուցելու համար", "not-enough-reputation-to-upvote": "Ձեզ անհրաժեշտ է %1 վարկանիշ՝ կողմ քվեարկելու համար", "not-enough-reputation-to-downvote": "Դեմ քվեարկելու համար ձեզ պետք է %1 վարկանիշ", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Այս գրառումը դրոշակելու համար ձեզ պետք է %1 հեղինակություն", "not-enough-reputation-min-rep-website": "Ձեզ անհրաժեշտ է %1 վարկանիշ՝ կայք ավելացնելու համար", "not-enough-reputation-min-rep-aboutme": "Ինձ պետք է %1 վարկանիշ՝ իմ մասին ավելացնելու համար", diff --git a/public/language/hy/language.json b/public/language/hy/language.json index 60c45dd7f6..a7fff8f30a 100644 --- a/public/language/hy/language.json +++ b/public/language/hy/language.json @@ -1,5 +1,5 @@ { - "name": "Անգլերեն (Միացյան Թագավորություն / Կանադա)", + "name": "Հայերեն", "code": "hy", "dir": "Itr" } \ No newline at end of file diff --git a/public/language/hy/modules.json b/public/language/hy/modules.json index 15f507dc86..417b53f0b5 100644 --- a/public/language/hy/modules.json +++ b/public/language/hy/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Զրուցել ", "chat.placeholder": "Գրեք հաղորդագրություն այստեղ, տեղադրեք նկարներ, սեղմեք \"enter\" ուղարկելու համար", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/hy/notifications.json b/public/language/hy/notifications.json index d1eda2e55f..3c21462d0a 100644 --- a/public/language/hy/notifications.json +++ b/public/language/hy/notifications.json @@ -15,31 +15,41 @@ "replies": "Պատասխաններ", "chat": "Զրույցներ", "group-chat": "Խմբային զրույցներ", + "public-chat": "Public Chats", "follows": "Հետևորդներ", "upvote": "Կողմ ձայներ", "new-flags": "Նոր դրոշներ ", "my-flags": "Ինձ հանձնարարված դրոշներ", "bans": "Արգելքներ", "new_message_from": "Նոր հաղորդագրություն %1-ից", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1-ը դրական է քվեարկել ձեր գրառմանը %2-ում:", "upvoted_your_post_in_dual": "%1-ը և %2-ը դրական են քվեարկել ձեր գրառմանը %3-ում:", - "upvoted_your_post_in_multiple": "%1 և %2 ուրիշներ կողմ են քվեարկել ձեր գրառմանը %3-ում:", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1-ը դրոշակեց օգտվողի պրոֆիլը (% 2)", "user_flagged_user_dual": "%1-ը և %2-ը դրոշակել են օգտվողի պրոֆիլը (%3)", - "user_flagged_user_multiple": "%1-ը և ևս %2-ը նշել են օգտվողի պրոֆիլը (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1-ը պատասխանել է %2-ին", "user_posted_to_dual": "%1-ը և %2-ը հրապարակել են պատասխաններ %3-ին", - "user_posted_to_multiple": "%1 և %2 ուրիշներ հրապարակել են պատասխաններ %3-ին", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1-ը նոր թեմա է տեղադրել՝ %2", "user_edited_post": "%1-ը խմբագրել է գրառում %2-ում", "user_started_following_you": "%1 սկսեց հետևել ձեզ", "user_started_following_you_dual": "%1 և %2 սկսեցին հետևել ձեզ:", - "user_started_following_you_multiple": "%1 և %2 ուրիշներ սկսեցին հետևել ձեզ:", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 գրանցման հարցում ուղարկեց:", "new_register_multiple": "Կան %1 գրանցման հարցումներ, որոնք սպասում են վերանայմանը:", "flag_assigned_to_you": "Դրոշ % 1 նշանակվել է ձեզ", @@ -66,6 +76,7 @@ "notificationType_follow": "Երբ ինչ-որ մեկը սկսում է հետևել քեզ", "notificationType_new-chat": "Երբ դուք ստանում եք զրույցի հաղորդագրություն", "notificationType_new-group-chat": "Երբ դուք ստանում եք խմբային զրույցի հաղորդագրություն", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Երբ դուք ստանում եք խմբի հրավեր", "notificationType_group-leave": "Երբ օգտատերը լքում է ձեր խումբը", "notificationType_group-request-membership": "Երբ ինչ-որ մեկը խնդրում է միանալ ձեզ պատկանող խմբին", diff --git a/public/language/id/admin/settings/reputation.json b/public/language/id/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/id/admin/settings/reputation.json +++ b/public/language/id/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/id/email.json b/public/language/id/email.json index e4c86cf523..1553bde555 100644 --- a/public/language/id/email.json +++ b/public/language/id/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Pesan yang baru diterima dari %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klik di sini untuk melanjutkan percakapan", "notif.chat.unsub.info": "Sesuai pengaturan langganan anda, notifikasi obrolan ini dikirmkan kepada anda", "notif.post.unsub.info": "This post notification was sent to you due to your subscription settings.", diff --git a/public/language/id/error.json b/public/language/id/error.json index db141c8765..819d1cb193 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/id/modules.json b/public/language/id/modules.json index 31b997c2bd..54822b0200 100644 --- a/public/language/id/modules.json +++ b/public/language/id/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Berbincang dengan", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/id/notifications.json b/public/language/id/notifications.json index 1e07bb9034..f103ddcd9c 100644 --- a/public/language/id/notifications.json +++ b/public/language/id/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Pesan baru dari %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 telah melakukan upvote untuk posting kamu di %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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "user_flagged_post_in": "%1 menandai sebuah posting di %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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 telah mengirim sebuah balasan kepada: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 telah membuat topik baru: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 mulai mengikutimu.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 mengirim permintaan registrasi.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/it/admin/settings/reputation.json b/public/language/it/admin/settings/reputation.json index c751b2badb..2425388679 100644 --- a/public/language/it/admin/settings/reputation.json +++ b/public/language/it/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Voti negativi al giorno (imposta a 0 per voti negativi illimitati)", "downvotes-per-user-per-day": "Voti negativi per utenti al giorno (imposta a 0 per voti negativi illimitati)", "min-rep-chat": "Reputazione minima per inviare messaggi di chat", + "min-rep-post-links": "Reputazione minima per pubblicare link", "min-rep-flag": "Reputazione minima per segnalare i post", "min-rep-website": "Reputazione minima per aggiungere \"Sito Web\" al profilo utente", "min-rep-aboutme": "Reputazione minima per aggiungere \"Su di me\" al profilo utente", diff --git a/public/language/it/email.json b/public/language/it/email.json index 8d94bae9db..0970260051 100644 --- a/public/language/it/email.json +++ b/public/language/it/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Il tuo riepilogo settimanale", "digest.title.month": "Il tuo riepilogo mensile", "notif.chat.subject": "Nuovo messaggio chat ricevuto da %1", + "notif.chat.public-chat-subject": "Nuovo messaggio da %1 nella stanza %2", "notif.chat.cta": "Clicca qui per continuare la conversazione", "notif.chat.unsub.info": "Questa notifica di chat ti è stata inviata perché l'hai sottoscritta nelle impostazioni.", "notif.post.unsub.info": "Questa notifica di discussione ti è stata inviata perché l'hai sottoscritta nelle impostazioni.", diff --git a/public/language/it/error.json b/public/language/it/error.json index ed1384580e..e25e507e96 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Hai bisogno di %1 reputazione per chattare", "not-enough-reputation-to-upvote": "Hai bisogno di %1 reputazione/i per votare positivamente", "not-enough-reputation-to-downvote": "Hai bisogno di %1 reputazione/i per effettuare un voto negativo", + "not-enough-reputation-to-post-links": "Hai bisogno di %1 reputazione per pubblicare link", "not-enough-reputation-to-flag": "Hai bisogno di %1 reputazione/i per segnalare questo post", "not-enough-reputation-min-rep-website": "Hai bisogno di %1 reputazione/i per aggiungere un sito web", "not-enough-reputation-min-rep-aboutme": "Hai bisogno di %1 reputazione/i per aggiungere un Su di me", diff --git a/public/language/it/modules.json b/public/language/it/modules.json index 3f888dbbe6..fa7fccf586 100644 --- a/public/language/it/modules.json +++ b/public/language/it/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Stanza %1", "chat.chatting_with": "Messaggia con", "chat.placeholder": "Digita il messaggio di chat qui, trascina le immagini, premi invio per inviare", "chat.placeholder.mobile": "Digita il messaggio di chat qui", diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json index c0e0f8a4c7..efd7b92d1e 100644 --- a/public/language/it/notifications.json +++ b/public/language/it/notifications.json @@ -15,31 +15,41 @@ "replies": "Risposte", "chat": "Chat", "group-chat": "Chat di gruppo", + "public-chat": "Chat pubbliche", "follows": "Segui", "upvote": "Voti", "new-flags": "Nuove segnalazioni", "my-flags": "Segnalazioni assegnate a me", "bans": "Espulsioni", "new_message_from": "Nuovo messaggio da %1", + "user_posted_in_public_room": "%1 ha scritto in %3", + "user_posted_in_public_room_dual": "%1 e %2 hanno scritto in %4", + "user_posted_in_public_room_triple": "%1, %2 e %3 hanno scritto in %5", + "user_posted_in_public_room_multiple": "%1, %2 e %3 altri hanno scritto in %5", "upvoted_your_post_in": "%1 ha votato positivamente il tuo post in %2.", "upvoted_your_post_in_dual": "%1 e %2 hanno apprezzato il tuo post in %3.", - "upvoted_your_post_in_multiple": "%1 ed altri %2 hanno apprezzato il tuo post in %3.", + "upvoted_your_post_in_triple": "%1, %2 e %3 hanno votato positivamente il tuo post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 e %3 altri hanno votato positivamente il tuo post in %4.", "moved_your_post": "%1 ha spostato il tuo post su %2", "moved_your_topic": "%1 è stato spostato %2", "user_flagged_post_in": "%1 ha segnalato un post in %2", "user_flagged_post_in_dual": "%1 e %2 hanno segnalato un post in %3", - "user_flagged_post_in_multiple": "%1 ed altri %2 hanno segnalato un post in %3", + "user_flagged_post_in_triple": "%1, %2 e %3 hanno segnalato un post in %4", + "user_flagged_post_in_multiple": "%1, %2 e %3 altri hanno segnalato un post in %4", "user_flagged_user": "%1 ha segnalato un utente (%2)", "user_flagged_user_dual": "%1 e %2 hanno segnalato un utente (%3)", - "user_flagged_user_multiple": "%1 e altri %2 hanno segnalato un utente (%3)", + "user_flagged_user_triple": "%1, %2 e %3 hanno segnalato un profilo utente (%4)", + "user_flagged_user_multiple": "%1, %2 e %3 altri hanno segnalato un profilo utente (%4)", "user_posted_to": "%1 ha postato una risposta a: %2", "user_posted_to_dual": "%1 e %2 hanno postato una risposta su: %3", - "user_posted_to_multiple": "%1 ed altri %2 hanno postato una risposta su: %3", + "user_posted_to_triple": "%1, %2 e %3 hanno postato risposte a: %4", + "user_posted_to_multiple": "%1, %2 e %3 altri hanno postato risposte a: %4", "user_posted_topic": "%1 ha postato una nuova discussione: %2", "user_edited_post": "%1 ha modificato un post in %2", "user_started_following_you": "%1 ha iniziato a seguirti.", "user_started_following_you_dual": "%1 e %2 hanno iniziato a seguirti.", - "user_started_following_you_multiple": "%1 ed altri %2 hanno iniziato a seguirti.", + "user_started_following_you_triple": "%1, %2 e %3 hanno iniziato a seguirti.", + "user_started_following_you_multiple": "%1, %2 e %3 altri hanno iniziato a seguirti.", "new_register": "%1 ha inviato una richiesta di registrazione.", "new_register_multiple": "Ci sono %1 richieste di registrazione che attendono di essere esaminate.", "flag_assigned_to_you": "Segnalazione %1 ti è stata assegnata", @@ -66,6 +76,7 @@ "notificationType_follow": "Quando qualcuno inizia a seguirti", "notificationType_new-chat": "Quando ricevi un messaggio in chat", "notificationType_new-group-chat": "Quando ricevi un messaggio di chat di gruppo", + "notificationType_new-public-chat": "Quando ricevi un messaggio di chat di gruppo pubblico", "notificationType_group-invite": "Quando ricevi un invito ad un gruppo", "notificationType_group-leave": "Quando un utente lascia il gruppo", "notificationType_group-request-membership": "Quando qualcuno richiede di iscriversi a un gruppo di tua proprietà", diff --git a/public/language/ja/admin/settings/reputation.json b/public/language/ja/admin/settings/reputation.json index db1e9764d5..5b553f6557 100644 --- a/public/language/ja/admin/settings/reputation.json +++ b/public/language/ja/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "フラグの投稿に低評価", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/ja/email.json b/public/language/ja/email.json index de460531ba..eb3887402a 100644 --- a/public/language/ja/email.json +++ b/public/language/ja/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "%1さんからの新しいチャットメッセージがあります。", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "クリックして会話を続ける", "notif.chat.unsub.info": "このチャットの通知はあなたの購読設定により送られました。", "notif.post.unsub.info": "この投稿の通知はあなたの購読設定により送られました。", diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 6a721ff75e..3a9b62e603 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/ja/modules.json b/public/language/ja/modules.json index f4b834ebb0..57cbe3dc63 100644 --- a/public/language/ja/modules.json +++ b/public/language/ja/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "とチャット", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json index 5bdd78e97b..6564d381d5 100644 --- a/public/language/ja/notifications.json +++ b/public/language/ja/notifications.json @@ -15,31 +15,41 @@ "replies": "返信", "chat": "チャット", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "フォロー", "upvote": "高評価", "new-flags": "新しいフラグ", "my-flags": "あなたにフラグがつきました", "bans": "Ban", "new_message_from": "%1からの新しいメッセージ", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1さんが%2に高評価をつけました。", "upvoted_your_post_in_dual": "%1さんと%2さんが%3に高評価をつけました。", - "upvoted_your_post_in_multiple": "%1 と%2 などのユーザーが、あなたの投稿 %3 に高評価をつけました。", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1さんはユーザープロフィールにフラグを付けました(%2)", "user_flagged_user_dual": "%1さんと%2さんは、ユーザープロフィール(%3)にフラグをつけました。", - "user_flagged_user_multiple": "%1さんと%2さんなどのユーザーがユーザープロフィール(%3)にフラグをつけました。", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1さんは %2に返信しました。", "user_posted_to_dual": "%1%2 は、返信しました: %3", - "user_posted_to_multiple": "%1 と %2 または他のユーザーが返信しました: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 が新しいスレッドを投稿しました。: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1があなたをフォローしました。", "user_started_following_you_dual": "%1%2 があなたをフォローしました。", - "user_started_following_you_multiple": "%1 と %2 または他のユーザーがあなたをフォローしました。", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1が登録リクエストを送りました。", "new_register_multiple": "%1の登録リクエストがレビュー待ちです。", "flag_assigned_to_you": "フラグ %1はあなたに割当てられました", @@ -66,6 +76,7 @@ "notificationType_follow": "誰かがあなたをフォローしたとき", "notificationType_new-chat": "チャットメッセージを受信したとき", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "グループ招待を受けたとき", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "誰かがあなたのグループへの参加を要求したとき", diff --git a/public/language/ko/admin/settings/reputation.json b/public/language/ko/admin/settings/reputation.json index 1115dfaf58..712683c013 100644 --- a/public/language/ko/admin/settings/reputation.json +++ b/public/language/ko/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "일일 최대 비추천 (0일 경우 무제한)", "downvotes-per-user-per-day": "개인 일일 최대 비추천 (0일 경우 무제한)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "포스트 신고에 필요한 최소 인지도", "min-rep-website": "\"웹사이트\" 등록에 필요한 최소 인지도", "min-rep-aboutme": "\"설명\" 작성에 필요한 최소 인지도", diff --git a/public/language/ko/email.json b/public/language/ko/email.json index a035d592de..73c1e713c0 100644 --- a/public/language/ko/email.json +++ b/public/language/ko/email.json @@ -37,6 +37,7 @@ "digest.title.week": "주간 포럼 메일", "digest.title.month": "월간 포럼 메일", "notif.chat.subject": "%1님이 채팅 메시지를 보냈습니다.", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "채팅을 계속하려면 여기를 클릭하세요.", "notif.chat.unsub.info": "이 채팅 알림은 사용자의 구독 설정에 따라 전송되었습니다.", "notif.post.unsub.info": "이 포스트 알림은 사용자의 구독 설정에 따라 전송되었습니다.", diff --git a/public/language/ko/error.json b/public/language/ko/error.json index 13e9594b15..7ac23508ad 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "오직 1%", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "이 포스트를 플래그하려면 1%가 더 필요합니다.", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/ko/modules.json b/public/language/ko/modules.json index 620530c29f..0623eaf39d 100644 --- a/public/language/ko/modules.json +++ b/public/language/ko/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "채팅", "chat.placeholder": "여기에 메시지를 쓰고, 이미지를 드래그 앤 드롭하고, Enter를 눌러 보내세요!", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json index 658b8b0c2c..7079a2641f 100644 --- a/public/language/ko/notifications.json +++ b/public/language/ko/notifications.json @@ -15,31 +15,41 @@ "replies": "답글", "chat": "채팅", "group-chat": "그룹 채팅", + "public-chat": "Public Chats", "follows": "팔로우", "upvote": "추천", "new-flags": "새로 들어온 신고", "my-flags": "내게 배정된 신고", "bans": "차단", "new_message_from": "%1님이 메시지를 보냈습니다.", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1님이 %2의 내 포스트를 추천했습니다.", "upvoted_your_post_in_dual": "%1님과 %2님이 %3의 내 포스트를 추천했습니다.", - "upvoted_your_post_in_multiple": "%1님과 다른 %2 명이 %3의 내 포스트를 추천했습니다.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1님이 %2님의 프로필을 신고했습니다.", "user_flagged_user_dual": "%1님과 %2님이 %3님의 프로필을 신고했습니다.", - "user_flagged_user_multiple": "%1님과 다른 %2명이 %3의 프로필을 신고했습니다.", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1님이 %2에 답글을 달았습니다.", "user_posted_to_dual": "%1님과 %2님이 %3에 답글을 달았습니다.", - "user_posted_to_multiple": "%1님과 %2명의 다른 유저들이 %3에 답글을 달았습니다.", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1님이 새 게시물을 작성했습니다: %2", "user_edited_post": "%1님이 %2에 속한 포스트를 편집했습니다.", "user_started_following_you": "%1님이 나를 팔로우 합니다.", "user_started_following_you_dual": "%1님과 %2님이 나를 팔로우 합니다.", - "user_started_following_you_multiple": "%1님외 %2명이 나를 팔로우 합니다.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1님이 가입을 요청했습니다.", "new_register_multiple": "%1개의 회원 가입 요청이 승인 대기 중입니다.", "flag_assigned_to_you": "신고 ID %1(이)가 나에게 배정되었습니다.", @@ -66,6 +76,7 @@ "notificationType_follow": "누군가 나를 팔로우", "notificationType_new-chat": "채팅 메시지 수신", "notificationType_new-group-chat": "그룹 채팅 메시지 수신", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "그룹 초대", "notificationType_group-leave": "그룹에서 탈퇴자 발생", "notificationType_group-request-membership": "누군가 당신이 관리하는 그룹에 참여 요청", diff --git a/public/language/lt/admin/settings/reputation.json b/public/language/lt/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/lt/admin/settings/reputation.json +++ b/public/language/lt/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/lt/email.json b/public/language/lt/email.json index d0cd26dd08..5cdc12c959 100644 --- a/public/language/lt/email.json +++ b/public/language/lt/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Nauja pokalbio žinutė gauta iš %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Pokalbio pratęsimui spauskite čia", "notif.chat.unsub.info": "Šios žinutės perpėjimas buvo išsiųstas į tavo prenumeratos nustatymus", "notif.post.unsub.info": "Šios žinutės perspėjimas buvo išsiųstas į tavo prenumeratos nustatymus", diff --git a/public/language/lt/error.json b/public/language/lt/error.json index 53f5e2743f..2ab97a8d7a 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index 65598f594d..9a74bc0fbe 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json index 7333c15855..9068a8413b 100644 --- a/public/language/lt/notifications.json +++ b/public/language/lt/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Nauja žinutė nuo %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 užbalsavo už jūsų pranešima čia %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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "user_flagged_post_in": "%1pagrįso nuomone čia %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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 parašė atsaką %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 paskelbė naują temą: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 pradėjo sekti tave", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 atsiuntė registracijos prašymą", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/lv/admin/settings/reputation.json b/public/language/lv/admin/settings/reputation.json index b70e1d4c5b..85e1a89823 100644 --- a/public/language/lv/admin/settings/reputation.json +++ b/public/language/lv/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimālie ranga punkti, lai atzīmētu rakstus", "min-rep-website": "Minimālie ranga punkti, lai lietotāja profilam pievienotu mājaslapu", "min-rep-aboutme": "Minimālie ranga punkti, lai lietotāja profilam pievienotu \"Par mani\"", diff --git a/public/language/lv/email.json b/public/language/lv/email.json index ff037d7d0c..badc349327 100644 --- a/public/language/lv/email.json +++ b/public/language/lv/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Jauna saruna saņemta no %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Noklikšķini, lai turpinātu sarunu", "notif.chat.unsub.info": "Sarunas paziņojums tika Tev nosūtīts Tavu abonēšanas iestatījumu dēļ.", "notif.post.unsub.info": "Rakstu paziņojums tika Tev nosūtīts Tavu abonēšanas iestatījumu dēļ.", diff --git a/public/language/lv/error.json b/public/language/lv/error.json index cb0695ec6f..38f9fc31be 100644 --- a/public/language/lv/error.json +++ b/public/language/lv/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/lv/modules.json b/public/language/lv/modules.json index 8e02627ed8..7c41031328 100644 --- a/public/language/lv/modules.json +++ b/public/language/lv/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Sarunāties ar", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/lv/notifications.json b/public/language/lv/notifications.json index 96575343ad..91aebbe955 100644 --- a/public/language/lv/notifications.json +++ b/public/language/lv/notifications.json @@ -15,31 +15,41 @@ "replies": "Par atbildēm", "chat": "Par sarunām", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Par tiem, kurus sekoju", "upvote": "Par balsojumiem \"par\"", "new-flags": "Jaunās atzīmes", "my-flags": "Atzīmes piešķirtas man", "bans": "Bloķēšanas", "new_message_from": "Jauns raksts no %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 ir balsojis \"par\" Tavu rakstu%2.", "upvoted_your_post_in_dual": "%1 un %2 ir balsojuši \"par\" Tavu rakstu %3.", - "upvoted_your_post_in_multiple": "%1 un %2 citi ir balsojuši \"par\" Tavu rakstu %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 ir pārvietojis Tavu rakstu %2", "moved_your_topic": "%1 ir pārvietojis %2", "user_flagged_post_in": "%1 ir atzīmējis rakstu %2", "user_flagged_post_in_dual": "%1 un %2 ir atzīmējuši rakstu %3", - "user_flagged_post_in_multiple": "%1 un %2 citi ir atzīmējuši rakstu %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 ir atzīmējis lietotāja profilu (%2)", "user_flagged_user_dual": "%1 un %2 ir atzīmējuši lietotāja profilu (%3)", - "user_flagged_user_multiple": "%1 un %2 citi ir atzīmējuši lietotāja profilu (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 ir atbildējis: %2", "user_posted_to_dual": "%1 un %2 ir atbildējuši %3", - "user_posted_to_multiple": "%1 un %2 citi ir atbildējuši %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 ir ievietojis jaunu tematu: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 sāka Tev sekot.", "user_started_following_you_dual": "%1 un %2 sāka Tev sekot.", - "user_started_following_you_multiple": "%1 un %2 citi sāka Tev sekot.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sūtīja reģistrācijas pieteikumu.", "new_register_multiple": "Ir %1 reģistrācijas pietiekumi, kas jāpārskata.", "flag_assigned_to_you": "Atzīme %1 ir piešķirta Tev", @@ -66,6 +76,7 @@ "notificationType_follow": "Kad kāds sāk Tev sekot", "notificationType_new-chat": "Kad saņemi sarunu", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Kad saņemi ielūgumu pievienoties grupai", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/ms/admin/settings/reputation.json b/public/language/ms/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/ms/admin/settings/reputation.json +++ b/public/language/ms/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/ms/email.json b/public/language/ms/email.json index 1b28462a1d..c0150b9759 100644 --- a/public/language/ms/email.json +++ b/public/language/ms/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Pesanan baru diterima dari %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klik sini untuk meneruskan perbualan", "notif.chat.unsub.info": "Pemberitahuan sembang ini dihantar berdasarkan tetapan langganan anda.", "notif.post.unsub.info": "Kiriman pemberitahuan ini dihantar berdasarkan tetapan langganan anda.", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index ae3c3c686f..c22b9f0b4a 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/ms/modules.json b/public/language/ms/modules.json index 2de5959ea1..4badbd8e28 100644 --- a/public/language/ms/modules.json +++ b/public/language/ms/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json index f880fe55f8..3b92b8a466 100644 --- a/public/language/ms/notifications.json +++ b/public/language/ms/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Pesanan baru daripada %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 telah mengundi naik kiriman and di %2.", "upvoted_your_post_in_dual": "%1dan %2 telah menambah undi pada kiriman anda di %3.", - "upvoted_your_post_in_multiple": "%1 dan %2 lagi telah menambah undi pada kiriman anda di %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 telah memindahkan kiriman anda ke %2", "moved_your_topic": "%1 telah memindahkan %2", "user_flagged_post_in": "%1 menanda kiriman anda di %2", "user_flagged_post_in_dual": "%1 dan %2 telah menanda kiriman anda pada %3", - "user_flagged_post_in_multiple": "%1 dan %2 lagi telah menanda kiriman anda pada %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 telah membalas kiriman kepada: %2", "user_posted_to_dual": "%1 dan %2 membalas kiriman : %3", - "user_posted_to_multiple": "%1 dan %2 lagu membalas kiriman: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 membuka topik baru : %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 mula mengikut anda.", "user_started_following_you_dual": "%1 dan %2 mula mengikuti anda.", - "user_started_following_you_multiple": "%1 dan %2 lagi mula mengikuti anda.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 menghantar jemputan pendaftaran.", "new_register_multiple": "Ada %1 permohonan ingin daftar yang sedang menunggu pengesahan.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/nb/admin/settings/reputation.json b/public/language/nb/admin/settings/reputation.json index 22c2a3afb9..f5457d3f34 100644 --- a/public/language/nb/admin/settings/reputation.json +++ b/public/language/nb/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum omdømme for å flagge innlegg", "min-rep-website": "Minimum omdømme som kreves for å legge \"Nettsted\" til brukerprofil", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/nb/email.json b/public/language/nb/email.json index 29e13b8e98..4510fbbf92 100644 --- a/public/language/nb/email.json +++ b/public/language/nb/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Ditt ukentlige sammendrag ", "digest.title.month": "Ditt månedlige sammendrag", "notif.chat.subject": "Ny samtalemelding mottatt fra %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klikk her for å fortsette samtalen", "notif.chat.unsub.info": "Denne samtale-varselen ble sendt til deg basert på dine innstillinger for abonnering.", "notif.post.unsub.info": "Dette innleggsvarselet ble sendt til deg basert på dine innstillinger for abonnering.", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index 304381b1b2..83cc2ada4f 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "Du trenger %1 omdømme for å stemme opp. ", "not-enough-reputation-to-downvote": "Du trenger %1 omdømme for å stemme ned. ", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Du trenger %1 omdømme for å flagge dette innlegget.", "not-enough-reputation-min-rep-website": "Du trenger %1 omdømme for å legge til et nettsted", "not-enough-reputation-min-rep-aboutme": "Du trenger %1 omdømme for å legge til om-meg", diff --git a/public/language/nb/modules.json b/public/language/nb/modules.json index 5ecd45afe2..cb7b9714af 100644 --- a/public/language/nb/modules.json +++ b/public/language/nb/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat med", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json index 9282fa280d..03fd22fcb6 100644 --- a/public/language/nb/notifications.json +++ b/public/language/nb/notifications.json @@ -15,31 +15,41 @@ "replies": "Svar", "chat": "Samtaler", "group-chat": "Gruppesamtaler", + "public-chat": "Public Chats", "follows": "Følger", "upvote": "Oppstemmer", "new-flags": "Nye flagg", "my-flags": "Flagg som er tildelt til meg", "bans": "Forbud", "new_message_from": "Ny melding fra %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 har stemt opp innlegget ditt i %2.", "upvoted_your_post_in_dual": "%1 og 2% har stemt opp innlegget ditt i %3.", - "upvoted_your_post_in_multiple": "%1 og 2% har stemt opp innlegget ditt i %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 har flyttet innlegget ditt til %2.", "moved_your_topic": "%1 har flyttet %2", "user_flagged_post_in": "%1 har flagget et innlegg i %2", "user_flagged_post_in_dual": "%1 og %2 flagget et innlegg i %3", - "user_flagged_post_in_multiple": "%1 og %2 har flagget et innlegg i %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagget en brukerprofil (%2)", "user_flagged_user_dual": "%1 og 2% har flagget en brukerprofil (%3)", - "user_flagged_user_multiple": "%1 og %2 andre flagget en brukerprofil (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 har skrevet et svar til: %2", "user_posted_to_dual": "%1 og 2% har svart på innlegget ditt i %3.", - "user_posted_to_multiple": "%1 og 2% andre har svart på %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 har skrevet en ny tråd: %2", "user_edited_post": "%1 har redigert ett innlegg i %2", "user_started_following_you": "%1 begynte å følge deg.", "user_started_following_you_dual": "%1 og 2% har begynt å følge deg. ", - "user_started_following_you_multiple": "%1 og %2 andre begynte å følge deg.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sendte en forespørsel om registrering", "new_register_multiple": " Det er %1 registreringsforespørsler som venter på deg.", "flag_assigned_to_you": "Flag %1 har blitt tildelt deg", @@ -66,6 +76,7 @@ "notificationType_follow": "Når noen starter å følge deg", "notificationType_new-chat": "Når du mottar en melding i chatt", "notificationType_new-group-chat": "Når du mottar en gruppemelding i chatt", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Når du får tilsendt en gruppeinvitasjon ", "notificationType_group-leave": "Når en bruker forlater gruppen din", "notificationType_group-request-membership": "Når noen sender en forespørsel om å bli med i en gruppe du eier", diff --git a/public/language/nl/admin/settings/reputation.json b/public/language/nl/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/nl/admin/settings/reputation.json +++ b/public/language/nl/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/nl/email.json b/public/language/nl/email.json index ab0f933f17..51c009fb48 100644 --- a/public/language/nl/email.json +++ b/public/language/nl/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Uw wekelijkse samenvatting", "digest.title.month": "Uw maandelijkse samenvatting", "notif.chat.subject": "Nieuw chatbericht van %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "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.", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index 19ec2babfc..6a2abd33c6 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/nl/modules.json b/public/language/nl/modules.json index dfd2fd9879..2e338a84aa 100644 --- a/public/language/nl/modules.json +++ b/public/language/nl/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat met", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json index fa4e69e9ea..4069b67a80 100644 --- a/public/language/nl/notifications.json +++ b/public/language/nl/notifications.json @@ -15,31 +15,41 @@ "replies": "Antwoorden", "chat": "Chats", "group-chat": "Groepsgesprekken", + "public-chat": "Public Chats", "follows": "Volgt", "upvote": "Upvotes", "new-flags": "Nieuwe markeringen", "my-flags": "Markeringen toegewezen aan mij", "bans": "Bans", "new_message_from": "Nieuw bericht van %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 heeft voor je bericht gestemd in %2.", "upvoted_your_post_in_dual": "%1 en %2 hebben voor je bericht gestemd in %3.", - "upvoted_your_post_in_multiple": "%1 en %2 anderen hebben voor je bericht gestemd in %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 heeft je bericht verplaatst naar %2", "moved_your_topic": "%1 heeft %2 verplaatst", "user_flagged_post_in": "%1 rapporteerde een bericht in %2", "user_flagged_post_in_dual": "%1 en %2 rapporteerden een bericht in %3", - "user_flagged_post_in_multiple": "%1 en %2 anderen rapporteerden een bericht in %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 markeerde een gebruikersprofiel (%2)", "user_flagged_user_dual": "%1 en %2 markeerden een gebruikersprofiel (%3)", - "user_flagged_user_multiple": "%1 en %2 anderen markeerden een gebruikersprofiel (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 heeft een reactie geplaatst in: %2", "user_posted_to_dual": "%1 en %2 hebben een reactie geplaatst in: %3", - "user_posted_to_multiple": "%1 en %2 hebben een reactie geplaatst in: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 heeft een nieuw onderwerp geplaatst: %2", "user_edited_post": "%1 heeft een bericht aangepast in %2", "user_started_following_you": "%1 volgt jou nu.", "user_started_following_you_dual": "%1 en %2 volgen jou nu.", - "user_started_following_you_multiple": "%1 en %2 anderen volgen jou nu.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 heeft een registratie verzoek aangevraagd.", "new_register_multiple": "Er is/zijn %1 registratieverzoek(en) die wacht(en) op goedkeuring.", "flag_assigned_to_you": "Flag %1 is aan u toegewezen", @@ -66,6 +76,7 @@ "notificationType_follow": "Als iemand begint met jou te volgen", "notificationType_new-chat": "Als je een chat-bericht ontvangt", "notificationType_new-group-chat": "Als je een bericht uit een groepsgesprek ontvangt.", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Als je een uitnodiging voor een groep ontvangt", "notificationType_group-leave": "Als een gebruiker je groep verlaat", "notificationType_group-request-membership": "Als iemand vraagt om lid te worden van een groep waarvan je eigenaar bent", diff --git a/public/language/pl/admin/settings/reputation.json b/public/language/pl/admin/settings/reputation.json index 4027961654..54c186fc57 100644 --- a/public/language/pl/admin/settings/reputation.json +++ b/public/language/pl/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Ilość głosów przeciw na dzień (ustaw na 0 by były nielimitowane)", "downvotes-per-user-per-day": "Ilość głosów przeciw na użytkownika na dzień (ustaw na 0 by były nielimitowane)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimalna reputacja pozwalająca flagować posty", "min-rep-website": "Minimalna reputacja pozwalająca wypełnić sekcję „Strona WWW” w profilu użytkownika", "min-rep-aboutme": "Minimalna reputacja pozwalająca wypełnić sekcję „O mnie” w profilu użytkownika", diff --git a/public/language/pl/email.json b/public/language/pl/email.json index 8b3ea2bfc8..595b8baa4f 100644 --- a/public/language/pl/email.json +++ b/public/language/pl/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Twoje tygodniowe podsumowanie", "digest.title.month": "Twoje miesięczne podsumowanie", "notif.chat.subject": "Nowa wiadomość na czacie od %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Kliknij tutaj, aby kontynuować rozmowę", "notif.chat.unsub.info": "To powiadomienie o czacie zostało wysłane zgodnie z Twoimi ustawieniami.", "notif.post.unsub.info": "To powiadomienie o poście zostało wysłane zgodnie z Twoimi ustawieniami.", diff --git a/public/language/pl/error.json b/public/language/pl/error.json index d817abed20..c73188b6dd 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "Potrzebujesz %1 reputacji aby głosować pozytywnie", "not-enough-reputation-to-downvote": "Potrzebujesz %1 reputacji aby głosować negatywnie", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "Potrzebujesz %1 reputacji aby dodać sekcję o mnie", diff --git a/public/language/pl/modules.json b/public/language/pl/modules.json index fec0d97f12..df978274d2 100644 --- a/public/language/pl/modules.json +++ b/public/language/pl/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Czatuj z", "chat.placeholder": "Wpisz tutaj wiadomość, przeciągnij i opuść obrazki, kliknij enter aby wysłać", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json index c146c517d5..1c77b3496c 100644 --- a/public/language/pl/notifications.json +++ b/public/language/pl/notifications.json @@ -15,31 +15,41 @@ "replies": "Odpowiedzi", "chat": "Czaty", "group-chat": "Rozmowy grupowe", + "public-chat": "Public Chats", "follows": "Obserwuje", "upvote": "Głosy na tak", "new-flags": "Nowe flagi", "my-flags": "Flagi przypisane mnie", "bans": "Bany", "new_message_from": "Nowa wiadomość od %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 zagłosował na Twój post w %2", "upvoted_your_post_in_dual": "%1 oraz %2 zagłosowali na Twój post w %3.", - "upvoted_your_post_in_multiple": "%1 oraz %2 innych zagłosowali na Twój post w %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 przeniósł Twój post do %2", "moved_your_topic": "%1 przeniósł %2", "user_flagged_post_in": "%1 oflagował post w %2", "user_flagged_post_in_dual": "%1 oraz %2 oflagowali post w %3", - "user_flagged_post_in_multiple": "%1 oraz %2 innych oflagowali post w %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 oflagował profil użytkownika (%2)", "user_flagged_user_dual": "%1 oraz %2 oflagowali profil użytkownika (%3)", - "user_flagged_user_multiple": "%1 and %2 innych oflagowali profil użytkownika (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 dodał odpowiedź do %2", "user_posted_to_dual": "%1 oraz %2 dodali odpowiedzi do %3", - "user_posted_to_multiple": "%1 oraz %2 innych dodali odpowiedzi do %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 stworzył nowy temat: %2", "user_edited_post": "%1 edytował post w %2", "user_started_following_you": "%1 zaczął Cię obserwować.", "user_started_following_you_dual": "%1 oraz %2 zaczęli Cię obserwować.", - "user_started_following_you_multiple": "%1 oraz %2 innych obserwują Cię.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 wysłał(-a) żądanie rejestracji.", "new_register_multiple": "%1 żądania rejestracji oczekują na sprawdzenie.", "flag_assigned_to_you": "Flaga %1 została przypisana do ciebie", @@ -66,6 +76,7 @@ "notificationType_follow": "Kiedy ktoś zacznie Cię obserwować", "notificationType_new-chat": "Kiedy otrzymasz wiadomość na czacie", "notificationType_new-group-chat": "Gdy otrzymasz wiadomość na czacie grupowym", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Kiedy otrzymasz grupowe zaproszenie", "notificationType_group-leave": "Kiedy użytkownik opuszcza Twoją grupę", "notificationType_group-request-membership": "Kiedy ktoś prosi o dołączenie do grupy, którą posiadasz", diff --git a/public/language/pt-BR/admin/settings/reputation.json b/public/language/pt-BR/admin/settings/reputation.json index dd54c3dacc..f32ce5ba0c 100644 --- a/public/language/pt-BR/admin/settings/reputation.json +++ b/public/language/pt-BR/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Votos negativos por dia (definido como 0 para votos negativos ilimitados)", "downvotes-per-user-per-day": "Votos negativos por usuário por dia (definido como 0 para votos negativos ilimitados)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Reputação mínima para sinalizar posts", "min-rep-website": "Reputação mínima para adicionar \"Website\" ao perfil do usuário", "min-rep-aboutme": "Reputação mínima para adicionar \"Sobre mim\" ao perfil do usuário", diff --git a/public/language/pt-BR/email.json b/public/language/pt-BR/email.json index a608bc6a8d..103a574191 100644 --- a/public/language/pt-BR/email.json +++ b/public/language/pt-BR/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Seu Resumo Semanal", "digest.title.month": "Seu Resumo Mensal", "notif.chat.subject": "Nova mensagem de chat recebida de %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Clique aqui para continuar a conversa", "notif.chat.unsub.info": "Esta notificação de chat foi enviada a você devido às suas configurações de assinatura.", "notif.post.unsub.info": "Esta notificação de postagem foi enviada para você devido as suas configurações de assinatura.", diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json index 9fe4d4e34f..30facbaa73 100644 --- a/public/language/pt-BR/error.json +++ b/public/language/pt-BR/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/pt-BR/modules.json b/public/language/pt-BR/modules.json index 7eff359ffc..b46522d21b 100644 --- a/public/language/pt-BR/modules.json +++ b/public/language/pt-BR/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Conversar com", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json index 7c6c5e7989..e7ee816335 100644 --- a/public/language/pt-BR/notifications.json +++ b/public/language/pt-BR/notifications.json @@ -15,31 +15,41 @@ "replies": "Respostas", "chat": "Conversas", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Seguindo", "upvote": "Votos positivos", "new-flags": "Novas Sinalizações", "my-flags": "Sinalizações designadas a mim", "bans": "Banimentos", "new_message_from": "Nova mensagem de %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 deu voto positivo para seu post em %2.", "upvoted_your_post_in_dual": "%1 e %2 deram voto positivo ao seu post em %3.", - "upvoted_your_post_in_multiple": "%1 e %2 outros deram voto positivo ao seu post em %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 moveu seu post para %2", "moved_your_topic": "%1 se mudou %2", "user_flagged_post_in": "%1 sinalizou um post em %2", "user_flagged_post_in_dual": "%1 e %2 sinalizaram um post em %3", - "user_flagged_post_in_multiple": "%1 e %2 outros sinalizaram um post em %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 sinalizou um perfil de usuário (%2)", "user_flagged_user_dual": "%1 e %2 sinalizaram um perfil de usuário (%3)", - "user_flagged_user_multiple": "%1 e %2 outros sinalizaram um perfil de usuário (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 postou uma resposta para: %2", "user_posted_to_dual": "%1 e %2 postaram respostas para: %3", - "user_posted_to_multiple": "%1 e %2 outros postaram respostas para: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 postou um novo tópico: %2", "user_edited_post": "%1 editou um post em %2", "user_started_following_you": "%1 começou a seguir você.", "user_started_following_you_dual": "%1 e %2 começaram a lhe acompanhar.", - "user_started_following_you_multiple": "%1 e %2 outros começaram a lhe acompanhar.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 lhe enviou um pedido de cadastro.", "new_register_multiple": "Há %1 pedidos de registro aguardando revisão.", "flag_assigned_to_you": "A Sinalização %1 foi atribuída a você", @@ -66,6 +76,7 @@ "notificationType_follow": "Quando alguém começar a seguir você", "notificationType_new-chat": "Quando você receber uma mensagem de chat", "notificationType_new-group-chat": "Quando você recebe uma mensagem de chat em grupo", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Quando você receber um convite para um grupo", "notificationType_group-leave": "Quando um usuário sai do seu grupo", "notificationType_group-request-membership": "Quando alguém pede para participar de um grupo que você é dono", diff --git a/public/language/pt-PT/admin/settings/reputation.json b/public/language/pt-PT/admin/settings/reputation.json index fa5d4a1a2a..b9f9829b9e 100644 --- a/public/language/pt-PT/admin/settings/reputation.json +++ b/public/language/pt-PT/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Votos negativos por dia (coloca 0 para votos negativos ilimitados)", "downvotes-per-user-per-day": "Votos negativos por utilizador por dia (coloca 0 para votos negativos ilimitados)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Reputação mínima para denunciar publicações", "min-rep-website": "Reputação mínima para adicionar \"Website\" ao perfil do utilizador", "min-rep-aboutme": "Reputação mínima para adicionar \"Sobre mim\" ao perfil do utilizador", diff --git a/public/language/pt-PT/email.json b/public/language/pt-PT/email.json index 5123fc6507..e97bb6a29d 100644 --- a/public/language/pt-PT/email.json +++ b/public/language/pt-PT/email.json @@ -37,6 +37,7 @@ "digest.title.week": "O teu Resumo Semanal", "digest.title.month": "O teu Resumo Mensal", "notif.chat.subject": "Nova mensagem de %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Clique aqui para continuar a conversa", "notif.chat.unsub.info": "Esta notificação de chat foi enviada devido às suas definições de subscrição", "notif.post.unsub.info": "Esta notificação foi envidada devido às tuas definições de subscrição.", diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json index 7fb7c37596..57dff678e0 100644 --- a/public/language/pt-PT/error.json +++ b/public/language/pt-PT/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/pt-PT/modules.json b/public/language/pt-PT/modules.json index 6476c0ae9f..d08d9de684 100644 --- a/public/language/pt-PT/modules.json +++ b/public/language/pt-PT/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Conversar com", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/pt-PT/notifications.json b/public/language/pt-PT/notifications.json index 58c1116f83..96a722c30e 100644 --- a/public/language/pt-PT/notifications.json +++ b/public/language/pt-PT/notifications.json @@ -15,31 +15,41 @@ "replies": "Respostas", "chat": "Chat", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Novos seguidores", "upvote": "Votos positivos", "new-flags": "Novas denúncias", "my-flags": "Denúncias atribuídas a mim", "bans": "Banimentos", "new_message_from": "Nova mensagem de %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 votou de forma favorável na tua publicação em %2.", "upvoted_your_post_in_dual": "%1 e %2 votaram favoravelmente à tua publicação em %3.", - "upvoted_your_post_in_multiple": "%1 e %2 outros utilizadores votaram favoravelmente na tua publicação em %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 moveu a tua publicação para %2", "moved_your_topic": "%1 moveu %2", "user_flagged_post_in": "%1 denunciou uma publicação em %2", "user_flagged_post_in_dual": "%1 e %2 denunciaram uma publicação em %3", - "user_flagged_post_in_multiple": "%1 e %2 outros utilizadores denunciaram uma publicação em %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 denunciou um perfil de um utilizador (%2)", "user_flagged_user_dual": "%1 e %2 denunciaram um perfil de um utilizador (%3)", - "user_flagged_user_multiple": "%1 e outros %2 utilizadores denunciaram um perfil de um utilizador (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 publicou uma resposta a: %2", "user_posted_to_dual": "%1 e %2 publicaram respostas a: %3", - "user_posted_to_multiple": "%1 e %2 outros utilizadores publicaram respostas a: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 publicou um novo tópico: %2", "user_edited_post": "%1 editou uma publicação em %2", "user_started_following_you": "%1 começou a seguir-te.", "user_started_following_you_dual": "%1 e %2 começaram a seguir-te.", - "user_started_following_you_multiple": "%1 e %2 outros utilizadores começaram a seguir-te.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 enviou um pedido de registro.", "new_register_multiple": "Existem %1 pedidos de registro aguardando pela tua revisão.", "flag_assigned_to_you": "A denúncia %1 foi atribuída a ti", @@ -66,6 +76,7 @@ "notificationType_follow": "Quando alguém começa a seguir-te", "notificationType_new-chat": "Quando recebes uma mensagem numa conversa", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Quando recebes um convite para um grupo", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "Quando alguém pede para entrar num grupo que é teu", diff --git a/public/language/ro/admin/settings/reputation.json b/public/language/ro/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/ro/admin/settings/reputation.json +++ b/public/language/ro/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/ro/email.json b/public/language/ro/email.json index d00213c89c..e1b853448a 100644 --- a/public/language/ro/email.json +++ b/public/language/ro/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Ai primit un mesaj de la %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Apasă aici pentru a continua conversația", "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.", diff --git a/public/language/ro/error.json b/public/language/ro/error.json index 10ad1827b2..6c03f4fa19 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/ro/modules.json b/public/language/ro/modules.json index 52887070c8..9877bfae4e 100644 --- a/public/language/ro/modules.json +++ b/public/language/ro/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/ro/notifications.json b/public/language/ro/notifications.json index 69b437bd6e..b640328d56 100644 --- a/public/language/ro/notifications.json +++ b/public/language/ro/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Un mesaj nou de la %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 a votat pozitiv mesajul tău în %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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "user_flagged_post_in": "%1 a semnalizat un mesaj în %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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 a postat un răspuns la: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 a început să te urmărească.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/ru/admin/settings/reputation.json b/public/language/ru/admin/settings/reputation.json index b883925cc7..5ef9a18d45 100644 --- a/public/language/ru/admin/settings/reputation.json +++ b/public/language/ru/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Количество отрицательных голосов в день (установите 0 для отключения ограничения)", "downvotes-per-user-per-day": "Количество отрицательных голосов за участника в день (установите 0 для неограниченного количества отрицательных голосов)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Минимальная репутация для отправки жалобы на сообщение", "min-rep-website": "Минимальная репутация, чтобы заполнить поле «Веб-сайт» в профиле пользователя", "min-rep-aboutme": "Минимальная репутация, чтобы добавить «Обо мне» в профиль пользователя", diff --git a/public/language/ru/email.json b/public/language/ru/email.json index 94a15a0dd0..98f6ec7fc1 100644 --- a/public/language/ru/email.json +++ b/public/language/ru/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Ваша еженедельная рассылка", "digest.title.month": "Ваша ежемесячная рассылка", "notif.chat.subject": "Новое сообщение от %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Нажмите, чтобы ответить", "notif.chat.unsub.info": "Вы получили это уведомление согласно вашим настройкам подписки.", "notif.post.unsub.info": "Вы получили это уведомление согласно вашим настройкам подписки.", diff --git a/public/language/ru/error.json b/public/language/ru/error.json index f21a9bcf0a..c8baea4746 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Нужно %1 репутации чтобы писать в чат.", "not-enough-reputation-to-upvote": "Нужно %1 репутации чтобы проголосовать положительно.", "not-enough-reputation-to-downvote": "Нужно %1 репутации чтобы проголосовать против.", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Нужно %1 репутации чтобы пожаловаться на пост.", "not-enough-reputation-min-rep-website": "Нужно %1 репутации чтобы добавить сайт.", "not-enough-reputation-min-rep-aboutme": "Нужно %1 репутации чтобы добавить обо мне.", diff --git a/public/language/ru/modules.json b/public/language/ru/modules.json index dbe91982a9..d1bbea801e 100644 --- a/public/language/ru/modules.json +++ b/public/language/ru/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Чат с", "chat.placeholder": "Введите сообщение, перетащите изображения, нажмите enter для отправки", "chat.placeholder.mobile": "Введите сообщение здесь", diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json index 1f3ccbf31c..734dab94be 100644 --- a/public/language/ru/notifications.json +++ b/public/language/ru/notifications.json @@ -15,31 +15,41 @@ "replies": "Ответы", "chat": "Чаты", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Подписки", "upvote": "Голоса", "new-flags": "Новые жалобы", "my-flags": "Назначенные мне жалобы", "bans": "Блокировки", "new_message_from": "Новое сообщение от %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "Пользователь %1 проголосовал за ваше сообщение в %2.", "upvoted_your_post_in_dual": "Пользователи %1 и %2 проголосовали за ваше сообщение в %3.", - "upvoted_your_post_in_multiple": "%1 и %2 других пользователя проголосовали за ваше сообщение в %3", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "Пользователь %1 пожаловался на профиль пользователя (%2)", "user_flagged_user_dual": "Пользователи %1 и %2 пожаловались на профиль пользователя (%3)", - "user_flagged_user_multiple": "%1 и %2 других пользователя пожаловались на профиль пользователя (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "Пользователь %1 ответил на сообщение в %2", "user_posted_to_dual": "Пользователи %1 и %2 ответили на сообщение в %3", - "user_posted_to_multiple": "%1 и %2 других пользователя ответили на сообщение в %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "Пользователь %1 создал новую тему: %2", "user_edited_post": " %1 отредактировал сообщение в %2 ", "user_started_following_you": "Пользователь %1 подписался на вас.", "user_started_following_you_dual": "Пользователи %1 и %2 подписались на вас.", - "user_started_following_you_multiple": "%1 и %2 других пользователя подписались на вас.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "Посетитель %1 отправил запрос на регистрацию.", "new_register_multiple": "В очереди %1 заявок на регистрацию.", "flag_assigned_to_you": "Жалоба %1 была назначена вам", @@ -66,6 +76,7 @@ "notificationType_follow": "Когда кто-то подписался на вас", "notificationType_new-chat": "Когда вы получаете сообщение в чат", "notificationType_new-group-chat": "Когда вы получаете сообщение группового чата", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Когда вы получаете приглашение в группу", "notificationType_group-leave": "Когда пользователь покидает вашу группу", "notificationType_group-request-membership": "Когда кто-то хочет присоединиться к группе, которой вы управляете", diff --git a/public/language/rw/admin/settings/reputation.json b/public/language/rw/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/rw/admin/settings/reputation.json +++ b/public/language/rw/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/rw/email.json b/public/language/rw/email.json index 2bb545eb3f..900b1ef17e 100644 --- a/public/language/rw/email.json +++ b/public/language/rw/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Ubutumwa bwo mu gikari bwaturutse kuri %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Kanda hano kugirango ukomeze", "notif.chat.unsub.info": "Iri tangazo rijyanye n'ubutumwa bwo mu gikari waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", "notif.post.unsub.info": "Iri tangazo rijyanye n'ibyashyizwe ku rubuga waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index c71287e9e8..ffba798269 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/rw/modules.json b/public/language/rw/modules.json index e362fcb911..db5e5d57eb 100644 --- a/public/language/rw/modules.json +++ b/public/language/rw/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json index 02e93e4452..9a854eea28 100644 --- a/public/language/rw/notifications.json +++ b/public/language/rw/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": " %1 yakwandikiye", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 yagushimye aguha inota kuri %2 washyizeho.", "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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "user_flagged_post_in": "%1 yatambikanye ikintu muri %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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 yanditse kuri: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 yatangije ikiganiro gishya: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 yatangiye kugukurikira.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 yasabye kwandikwa.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/sc/admin/settings/reputation.json b/public/language/sc/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/sc/admin/settings/reputation.json +++ b/public/language/sc/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/sc/email.json b/public/language/sc/email.json index 3e35d7514c..0e5e1b8afe 100644 --- a/public/language/sc/email.json +++ b/public/language/sc/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "New chat message received from %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "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.", diff --git a/public/language/sc/error.json b/public/language/sc/error.json index 9ec0963641..f19e8ad0fa 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/sc/modules.json b/public/language/sc/modules.json index cdf15aa3d9..9742cec1f5 100644 --- a/public/language/sc/modules.json +++ b/public/language/sc/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chat with", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/sc/notifications.json b/public/language/sc/notifications.json index a4111545d1..88dde2325d 100644 --- a/public/language/sc/notifications.json +++ b/public/language/sc/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "New message from %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "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.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 has moved your post to %2", "moved_your_topic": "%1 has moved %2", "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", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 has posted a reply to: %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_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 has posted a new topic: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 started following you.", "user_started_following_you_dual": "%1 and %2 started following you.", - "user_started_following_you_multiple": "%1 and %2 others started following you.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 sent a registration request.", "new_register_multiple": "There are %1 registration requests awaiting review.", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/sk/admin/settings/reputation.json b/public/language/sk/admin/settings/reputation.json index d590f7eda3..8567fdf8f4 100644 --- a/public/language/sk/admin/settings/reputation.json +++ b/public/language/sk/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimálna reputácia pre označenie príspevku", "min-rep-website": "Minimálna reputácia pre pridanie „Webovej stránky” do používateľského profilu", "min-rep-aboutme": "Minimálna reputácia pre pridanie „O mne” do používateľského profilu", diff --git a/public/language/sk/email.json b/public/language/sk/email.json index 416a278a74..d86c08e4ea 100644 --- a/public/language/sk/email.json +++ b/public/language/sk/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Máte novú správu od %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Kliknite sem pre pokračovanie v konverzácii", "notif.chat.unsub.info": "Túto správu konverzácie ste prijali na základe Vašich nastavení odoberania.", "notif.post.unsub.info": "Toto oznámenie o príspevkoch ste prijali na základe Vašich nastavení účtu.", diff --git a/public/language/sk/error.json b/public/language/sk/error.json index 647f3d03d2..afb12c5a08 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/sk/modules.json b/public/language/sk/modules.json index e214558f6f..9dd4aec22b 100644 --- a/public/language/sk/modules.json +++ b/public/language/sk/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Konverzácia s", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json index 593325926a..925bca09d9 100644 --- a/public/language/sk/notifications.json +++ b/public/language/sk/notifications.json @@ -15,31 +15,41 @@ "replies": "Odpovede", "chat": "Konverzácie", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Nasledovatelia", "upvote": "Súhlasy", "new-flags": "Nové označenia", "my-flags": "Označenia priradené mne", "bans": "Zablokované", "new_message_from": "Nova spáva od %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 dal hlas Vášmu príspevku v %2.", "upvoted_your_post_in_dual": "%1 a %2 dali hlas Vášmu príspevku v %3.", - "upvoted_your_post_in_multiple": "%1 a %2 ďalší dali hlas Vášmu príspevku v %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 presunul Váš príspevok do %2", "moved_your_topic": "%1 presunul %2", "user_flagged_post_in": "%1 pridal značku na príspevok %2", "user_flagged_post_in_dual": "%1 a %2 pridali značky na príspevok %3", - "user_flagged_post_in_multiple": "%1 a %2 ďalší pridali značku na príspevok:%3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 označil profil používateľa (%2)", "user_flagged_user_dual": "%1 a %2 označil profil používateľa (%3)", - "user_flagged_user_multiple": "%1 a %2 ďalší označili profil používateľa (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 odpovedal: %2", "user_posted_to_dual": "%1 a %2 uverejnili odpoveď na:%3", - "user_posted_to_multiple": "%1 a %2 ďalší uverejnili odpovede na:%3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 pridal novú tému: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 Vás začal sledovať.", "user_started_following_you_dual": "%1 a %2 Vás začali sledovať.", - "user_started_following_you_multiple": "%1 a %2 ďalší Vás začali sledovať.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 odoslal žiadosť o registráciu.", "new_register_multiple": "Nachádzajú sa %1 registrácie čakajúce na preskúmanie.", "flag_assigned_to_you": "Príznak %1 vám bol priradený ", @@ -66,6 +76,7 @@ "notificationType_follow": "Ak Vás začne niekto sledovať", "notificationType_new-chat": "Ak obdržíte novú správu konverzácie", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Ak obdržíte pozvanie do skupiny", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/sl/admin/admin.json b/public/language/sl/admin/admin.json index 9c98de272f..339c72cb34 100644 --- a/public/language/sl/admin/admin.json +++ b/public/language/sl/admin/admin.json @@ -4,9 +4,9 @@ "acp-title": "%1 | NodeBB skrbniška nadzorna plošča", "settings-header-contents": "Vsebine", - "changes-saved": "Changes Saved", + "changes-saved": "Spremembe so shranjene", "changes-saved-message": "Your changes to the NodeBB configuration have been saved.", - "changes-not-saved": "Changes Not Saved", + "changes-not-saved": "Spremembe niso shranjene", "changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)", "save-changes": "Save changes", "min": "Min:", diff --git a/public/language/sl/admin/settings/reputation.json b/public/language/sl/admin/settings/reputation.json index e298ccc665..cd2c9c7eec 100644 --- a/public/language/sl/admin/settings/reputation.json +++ b/public/language/sl/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Glasovi proti na dan (nastavljeno na 0 za neomejeno število glasov proti)", "downvotes-per-user-per-day": "Glasovi proti na uporabnika na dan (nastavljeno na 0 za neomejeno število glasov proti)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Najmanjši ugled za označevanje objav z zastavico", "min-rep-website": "Najmanjši ugled za dodajanje \"Spletna stran\" v uporabniški profil", "min-rep-aboutme": "Najmanjši ugled za dodajanje \"O meni\" v uporabniški profil", diff --git a/public/language/sl/email.json b/public/language/sl/email.json index bcf7936a0d..5415db3acd 100644 --- a/public/language/sl/email.json +++ b/public/language/sl/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Uporabnik %1 vam je poslal novo sporočilo za klepet.", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Kliknite tu za nadaljevanje pogovora.", "notif.chat.unsub.info": "Obvestilo o klepetu vam je bilo poslano zaradi nastavitev vaše naročnine.", "notif.post.unsub.info": "Obvestilo o objavi vam je bilo poslano zaradi nastavitev vaše naročnine.", diff --git a/public/language/sl/error.json b/public/language/sl/error.json index 8841ddfcae..11867e7aea 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/sl/modules.json b/public/language/sl/modules.json index ae36dac325..ad2b2a303e 100644 --- a/public/language/sl/modules.json +++ b/public/language/sl/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Klepetajte z", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/sl/notifications.json b/public/language/sl/notifications.json index 2a216af4bc..455df5c9fa 100644 --- a/public/language/sl/notifications.json +++ b/public/language/sl/notifications.json @@ -15,31 +15,41 @@ "replies": "Replies", "chat": "Chats", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Follows", "upvote": "Upvotes", "new-flags": "New Flags", "my-flags": "Flags assigned to me", "bans": "Bans", "new_message_from": "Novo obvestilo od %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 je glasoval/-a za vašo objavo v %2.", "upvoted_your_post_in_dual": "%1 in %2 sta glasovala/-i za vašo objavo v %3.", - "upvoted_your_post_in_multiple": "%1 in %2 drugih je glasovalo za vašo objavo v %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 je premaknil/-a vašo objavo v %2.", "moved_your_topic": "%1 je premaknil/-a %2.", "user_flagged_post_in": "%1je označil/-a vašo objavo v %2.", "user_flagged_post_in_dual": "%1 in %2 sta označila/-a vašo objavo v %3.", - "user_flagged_post_in_multiple": "%1 and %2 drugih je označilo vašo objavo v %3.", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flagged a user profile (%2)", "user_flagged_user_dual": "%1 and %2 flagged a user profile (%3)", - "user_flagged_user_multiple": "%1 and %2 others flagged a user profile (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 je objavil/-a odgovor na: %2.", "user_posted_to_dual": "%1 in %2 sta objavila/-i odgovor na: %3.", - "user_posted_to_multiple": "%1 in %2 drugih je objavilo odgovor na: %3.", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 je odprl/-a novo temo: %2.", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 te je začel/-a spremljati.", "user_started_following_you_dual": "%1 in %2 sta te začela/-i spremljati.", - "user_started_following_you_multiple": "%1 in %2 drugih te je začelo spremljati.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 je poslal/-a zahtevo za registracijo.", "new_register_multiple": "Število registracijskih zahtev, ki čakajo na pregled: %1", "flag_assigned_to_you": "Flag %1 has been assigned to you", @@ -66,6 +76,7 @@ "notificationType_follow": "When someone starts following you", "notificationType_new-chat": "When you receive a chat message", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "When you receive a group invite", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/sl/topic.json b/public/language/sl/topic.json index c70112203d..1901db10db 100644 --- a/public/language/sl/topic.json +++ b/public/language/sl/topic.json @@ -12,7 +12,7 @@ "notify_me": "Bodi obveščen o novih odgovorih na to temo", "quote": "Citiraj", "reply": "Odgovori", - "replies_to_this_post": "Št. odogvorov: %1", + "replies_to_this_post": "Št. odgovorov: %1", "one_reply_to_this_post": "1 odgovor", "last_reply_time": "Zadnji odgovor", "reply-as-topic": "Odgovori s temo", diff --git a/public/language/sq-AL/admin/settings/reputation.json b/public/language/sq-AL/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/sq-AL/admin/settings/reputation.json +++ b/public/language/sq-AL/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/sq-AL/email.json b/public/language/sq-AL/email.json index 991fbbe5cf..490831b03c 100644 --- a/public/language/sq-AL/email.json +++ b/public/language/sq-AL/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Përmbledhja juaj e përjavshme", "digest.title.month": "Përmbledhja juaj mujore", "notif.chat.subject": "Një mesazh i ri nga %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klikoni këtu për të vazhduar bisedën", "notif.chat.unsub.info": "Ky njoftim për bisedën ju është dërguar për shkak të abonimit tuaj.", "notif.post.unsub.info": "Ky njoftim i postimit ju është dërguar për shkak të abonimit tuaj.", diff --git a/public/language/sq-AL/error.json b/public/language/sq-AL/error.json index 757a28b5a1..92dbf45e49 100644 --- a/public/language/sq-AL/error.json +++ b/public/language/sq-AL/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Ju nevojitet %1 reputacion për të biseduar", "not-enough-reputation-to-upvote": "Ju nevojitet %1 reputacion për të votuar pro", "not-enough-reputation-to-downvote": "Ju nevojitet %1 reputacion për të votuar kundër", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Ju nevojitet %1 reputacion për të raportuar postimin", "not-enough-reputation-min-rep-website": "Ju nevojitet %1 reputacion për të shtuar një faqe interneti", "not-enough-reputation-min-rep-aboutme": "Ju nevojitet %1 reputacion për të shtuar një seksion 'Rreth Meje'", diff --git a/public/language/sq-AL/modules.json b/public/language/sq-AL/modules.json index ba73c8990f..1080b2c706 100644 --- a/public/language/sq-AL/modules.json +++ b/public/language/sq-AL/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Bisedo me", "chat.placeholder": "Shkruani mesazhin e bisedës këtu, tërhiqni dhe lëshoni imazhet, shtypni enter për t'i dërguar", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/sq-AL/notifications.json b/public/language/sq-AL/notifications.json index 86c2433106..9e85bb7f52 100644 --- a/public/language/sq-AL/notifications.json +++ b/public/language/sq-AL/notifications.json @@ -15,31 +15,41 @@ "replies": "Përgjigjet", "chat": "Bisedat", "group-chat": "Bisedat në Grup", + "public-chat": "Public Chats", "follows": "Ndjek", "upvote": "Votat pro", "new-flags": "Raportim i ri", "my-flags": "Raportimet u kaluan tek unë", "bans": "Të bllokuar", "new_message_from": "Mesazh i ri nga%1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1ka votuar në postin tënd në %2.", "upvoted_your_post_in_dual": "%1 dhe % 2 kanë votuar për postimin tuaj në %3.", - "upvoted_your_post_in_multiple": "%1 dhe %2 të tjerë kanë votuar për postimin tuaj në %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 e ka zhvendosur postimin tuaj në %2", "moved_your_topic": "%1 1 ka lëvizur %2", "user_flagged_post_in": "%1 ka raportuar një postim në %2", "user_flagged_post_in_dual": "%1 dhe %2 raportuam një postim në %3", - "user_flagged_post_in_multiple": "%1 dhe %2 dhe disa të tjerë raportuan një postim në %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 ka raportuar një profil përdoruesi (%2)", "user_flagged_user_dual": "%1 dhe %2 kane raportuar një profil përdoruesi (%3)", - "user_flagged_user_multiple": "%1 dhe %2 dhe disa të tjerë kanë raportuar një profil përdoruesi (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 ka postuar një përgjigje në: %2", "user_posted_to_dual": "%1 dhe %2 kanë postuar përgjigje në: %3", - "user_posted_to_multiple": "%1 dhe %2 të tjerë kanë postuar përgjigje në: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 ka postuar një temë të re: %2", "user_edited_post": "%1 ka redaktuar një postim në %2", "user_started_following_you": "%1 filloi t'ju ndjekë.", "user_started_following_you_dual": "% 1 dhe %2 filluan t'ju ndjekin.", - "user_started_following_you_multiple": "%1 dhe %2 të tjerë filluan t'ju ndjekin.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 dërgoi një kërkesë për regjistrim.", "new_register_multiple": "Ka %1 kërkesa regjistrimi në pritje për shqyrtimit.", "flag_assigned_to_you": " Raportimi %1 ju është ngarkuar juve", @@ -66,6 +76,7 @@ "notificationType_follow": "Kur dikush fillon të të ndjekë", "notificationType_new-chat": "Kur merrni një mesazh", "notificationType_new-group-chat": "Kur merrni një mesazh bisede në grup", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Kur merrni një ftesë në grup", "notificationType_group-leave": "Kur një përdorues largohet nga grupi juaj", "notificationType_group-request-membership": "Kur dikush kërkon t'i bashkohet një grupi që ju zotëroni", diff --git a/public/language/sr/admin/settings/reputation.json b/public/language/sr/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/sr/admin/settings/reputation.json +++ b/public/language/sr/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/sr/email.json b/public/language/sr/email.json index ebb6c7e76f..044165196f 100644 --- a/public/language/sr/email.json +++ b/public/language/sr/email.json @@ -22,8 +22,8 @@ "reset.notify.subject": "Лозика је успешно змењена", "reset.notify.text1": "Обавештавамо вас да вам је лозинка на %1 успешно ресетована.", "reset.notify.text2": "Уколико нисте ви ово одобрили, молимо одмах контактирајте администратора.", - "digest.unread-rooms": "Unread rooms", - "digest.room-name-unreadcount": "%1 (%2 unread)", + "digest.unread-rooms": "Непрочитане собе", + "digest.room-name-unreadcount": "%1 (%2 непрочитано)", "digest.latest_topics": "Недавне теме од %1", "digest.top-topics": "Најбоље теме од %1", "digest.popular-topics": "Популарне теме од %1", @@ -37,6 +37,7 @@ "digest.title.week": "Ваш седмични сажетак", "digest.title.month": "Ваш месечни сажетак", "notif.chat.subject": "Примљена је нова порука ћаскања од %1", + "notif.chat.public-chat-subject": "Нова порука од %1 у соби %2", "notif.chat.cta": "Кликните овде да наставите са разговором", "notif.chat.unsub.info": "Ова обавештење о ћаскању вам је послато услед вашег подешавања претплате.", "notif.post.unsub.info": "Ово обавештење вам је послато услед вашег подешавања претплате.", diff --git a/public/language/sr/error.json b/public/language/sr/error.json index 6e39994dec..9706db0961 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -55,7 +55,7 @@ "user-banned-reason-until": "Овај налог је забрањен до %1 (Разлог: %2)", "user-too-new": "Жао нам је, морате сачекати %1 секунде/и пре него што објавите прву поруку", "blacklisted-ip": "Жао нам је, ваша IP је забрањена у овој заједници. Ако мислите да је ово грешка, контактирајте администратора.", - "cant-blacklist-self-ip": "You can't blacklist your own IP", + "cant-blacklist-self-ip": "Не можете ставити сопствену IP адресу на црну листу", "ban-expiry-missing": "Наведите крајњи датум за ову забрану", "no-category": "Категорија не постоји", "no-topic": "Тема не постоји", @@ -165,13 +165,14 @@ "chat-room-does-not-exist": "Соба за ћаскање не постоји.", "cant-add-users-to-chat-room": "Не могу се додати корисници у собу за ћаскање.", "cant-remove-users-from-chat-room": "Не могу се уклонити корисници из собе за ћаскање.", - "chat-room-name-too-long": "Chat room name too long. Names can't be longer than %1 characters.", + "chat-room-name-too-long": "Име собе за ћаскање је предугачко. Имена не могу бити дужа од %1 знакова.", "already-voting-for-this-post": "Већ сте гласали за ову поруку.", "reputation-system-disabled": "Угледи су онемогућени.", "downvoting-disabled": "Негативно гласање је онемогућено", "not-enough-reputation-to-chat": "Потребно репутација: %1 за ћаскање", "not-enough-reputation-to-upvote": "Потребно репутација: %1 за гласање", "not-enough-reputation-to-downvote": "Потребно репутација: %1 за негативно гласање", + "not-enough-reputation-to-post-links": "Потребно репутација: %1 за објављивање веза", "not-enough-reputation-to-flag": "Потребно репутација: %1 да бисте заставицом означили ову поруку", "not-enough-reputation-min-rep-website": "Потребно репутација: %1 за додавање веб сајта", "not-enough-reputation-min-rep-aboutme": "Потребно репутација: %1 за додавање информација о себи", diff --git a/public/language/sr/global.json b/public/language/sr/global.json index eb51b15955..814e53ef2c 100644 --- a/public/language/sr/global.json +++ b/public/language/sr/global.json @@ -51,8 +51,8 @@ "nextpage": "Следећа страна", "alert.success": "Успешно", "alert.error": "Грешка", - "alert.warning": "Warning", - "alert.info": "Info", + "alert.warning": "Упозорење", + "alert.info": "Информације", "alert.banned": "Забрањен", "alert.banned.message": "Управо сте добили забрану, ваш приступ је сада ограничен.", "alert.unbanned": "Укинута забрана", diff --git a/public/language/sr/modules.json b/public/language/sr/modules.json index 1bc9404283..72d5d24ca8 100644 --- a/public/language/sr/modules.json +++ b/public/language/sr/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Соба %1", "chat.chatting_with": "Ћаскај са", "chat.placeholder": "Куцајте поруку ћаскања овде, превуците и отпустите слике, притисните enter за слање", "chat.placeholder.mobile": "Куцајте поруку овде", @@ -10,7 +11,7 @@ "chat.no_active": "Нема активних ћаскања.", "chat.user_typing": "%1 куца ...", "chat.user_has_messaged_you": "%1 вам је послао поруку.", - "chat.replying-to": "Replying to %1", + "chat.replying-to": "Одговарање кориснику %1", "chat.see_all": "Сва ћаскања", "chat.mark_all_read": "Означи све као прочитано", "chat.no-messages": "Изаберите примаоца да бисте видели историју ћаскања", @@ -62,9 +63,9 @@ "chat.show-ip": "Прикажи IP", "chat.owner": "Власник собе", "chat.grant-rescind-ownership": "Додели/поништи власништво", - "chat.system.user-join": "%1 has joined the room ", - "chat.system.user-leave": "%1 has left the room ", - "chat.system.room-rename": "%2 has renamed this room to \"%1\" ", + "chat.system.user-join": "%1 се придружио соби ", + "chat.system.user-leave": "%1 је напустио собу ", + "chat.system.room-rename": "%2 је преименовао собу у „%1” ", "composer.compose": "Писање поруке", "composer.show_preview": "Прикажи преглед", "composer.hide_preview": "Сакриј преглед", diff --git a/public/language/sr/notifications.json b/public/language/sr/notifications.json index fe330c996b..6f8e83146d 100644 --- a/public/language/sr/notifications.json +++ b/public/language/sr/notifications.json @@ -15,31 +15,41 @@ "replies": "Одговори", "chat": "Ћаскања", "group-chat": "Групна ћаскања", + "public-chat": "Јавна ћаскања", "follows": "Праћења", "upvote": "Гласови", "new-flags": "Нове заставице", "my-flags": "Заставице додељене мени", "bans": "Забране", "new_message_from": "Нова порука од %1", + "user_posted_in_public_room": "%1 је написао у %3", + "user_posted_in_public_room_dual": "%1 и %2 су написали у %4", + "user_posted_in_public_room_triple": "%1, %2 и %3 су написали у %5", + "user_posted_in_public_room_multiple": "%1, %2 и осталих %3 су написали у %5", "upvoted_your_post_in": "%1 је гласао за вашу поруку у %2", "upvoted_your_post_in_dual": "%1 и %2 осталих су гласали за вашу поруку у %3.", - "upvoted_your_post_in_multiple": "%1 и %2 осталих су гласали за вашу поруку у %3.", + "upvoted_your_post_in_triple": "%1, %2 и %3 су гласали за вашу објаву у %4.", + "upvoted_your_post_in_multiple": "%1, %2 и осталих %3 су гласали за вашу објаву у %4.", "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_post_in_triple": "%1, %2 и %3 су означили заставицом објаву у %4", + "user_flagged_post_in_multiple": "%1, %2 и осталих %3 су означили заставицом објаву у %4", "user_flagged_user": "%1 је означио заставицом кориснички профил (%2)", "user_flagged_user_dual": "%1 и %2 су означили заставицом кориснички профил (%3)", - "user_flagged_user_multiple": "%1 и %2 осталих су означили заставицом кориснички профил (%3)", + "user_flagged_user_triple": "%1, %2 и %3 су означили заставицом кориснички профил (%4)", + "user_flagged_user_multiple": "%1, %2 и осталих %3 су означили заставицом кориснички профил (%4)", "user_posted_to": "%1 је послао нови одговор на: %2", "user_posted_to_dual": "%1 и %2 су одговорили на: %3", - "user_posted_to_multiple": "%1 и %2 других су одговорили на: %3", + "user_posted_to_triple": "%1, %2 и %3 су објавили одговор: %4", + "user_posted_to_multiple": "%1, %2 и осталих %3 су објавили одговор: %4", "user_posted_topic": "%1 је поставио нову тему: %2", "user_edited_post": "%1 је уредио поруку у %2", "user_started_following_you": "%1 је почео да вас прати.", "user_started_following_you_dual": "%1 и %2 су почели да вас прате.", - "user_started_following_you_multiple": "%1 и %2 других су почели да вас прате.", + "user_started_following_you_triple": "%1, %2 и %3 су вас запратили.", + "user_started_following_you_multiple": "%1, %2 и осталих %3 су вас запратили.", "new_register": "%1 вам је послао захтев за регистрацију.", "new_register_multiple": "Постоје %1 захтева за регистрацију који чекају преглед.", "flag_assigned_to_you": "Заставица %1 је додељена вама", @@ -66,6 +76,7 @@ "notificationType_follow": "Када неко почне да вас прати", "notificationType_new-chat": "Када примите поруку ћаскања", "notificationType_new-group-chat": "Када примите поруку ћаскања у групи", + "notificationType_new-public-chat": "Када примите јавну групну поруку за ћаскање", "notificationType_group-invite": "Када примите позивницу за групу", "notificationType_group-leave": "Када корисник напусти вашу групу", "notificationType_group-request-membership": "Када неко затражи да се придружи групи коју поседујете", diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index 3448e4f2f0..2e288b23d6 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -43,7 +43,7 @@ "wrote-ago": "написао ", "wrote-on": "написао ", "replied-to-user-ago": "одговорио кориснику %3 ", - "replied-to-user-on": "replied to %3 on ", + "replied-to-user-on": "одговорио кориснику %3 ", "user-locked-topic-ago": "%1 је закључао ову тему %2", "user-locked-topic-on": "%1 је закључао ову тему %2", "user-unlocked-topic-ago": "%1 је откључао ову тему %2", diff --git a/public/language/sv/admin/settings/reputation.json b/public/language/sv/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/sv/admin/settings/reputation.json +++ b/public/language/sv/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/sv/email.json b/public/language/sv/email.json index 087ab72f79..44439586f5 100644 --- a/public/language/sv/email.json +++ b/public/language/sv/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "Nytt meddelande från %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Klicka här för att fortsätta konversationen", "notif.chat.unsub.info": "Denna notifikation skickades till dig på grund av dina inställningar för prenumerationer.", "notif.post.unsub.info": "Det här meddelandet fick du på grund av dina inställningar för prenumeration. ", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 713e3c1c3b..7fcf700ee7 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index 3ddf315fae..c15ec5b6b1 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Chatta med", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json index 577a204de9..8fc30c595a 100644 --- a/public/language/sv/notifications.json +++ b/public/language/sv/notifications.json @@ -15,31 +15,41 @@ "replies": "Svar", "chat": "Chattar", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Följningar", "upvote": "Uppröster", "new-flags": "Nya flaggor", "my-flags": "Mina tilldelade flaggor", "bans": "Bannlysningar", "new_message_from": "Nytt medelande från %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 har röstat upp ditt inlägg i %2", "upvoted_your_post_in_dual": "%1 och %2 har röstat upp ditt inlägg i %3.", - "upvoted_your_post_in_multiple": "%1 och %2 andra har röstat upp ditt inlägg i %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 har flyttat ditt inlägg till %2", "moved_your_topic": "%1 har flyttat %2", "user_flagged_post_in": "%1 flaggade ett inlägg i %2", "user_flagged_post_in_dual": "%1 och %2 rapporterade ett inlägg i %3", - "user_flagged_post_in_multiple": "%1 och %2 andra rapporterade ett inlägg i %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 flaggade en användarprofil (%2)", "user_flagged_user_dual": "%1 och %2 flaggade en användarprofil (%3)", - "user_flagged_user_multiple": "%1 och %2 andra flaggade en användarprofil (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 har skrivit ett svar på: %2", "user_posted_to_dual": "%1 och %2 har svarat på: %3", - "user_posted_to_multiple": "%1 och %2 andra har svarat på: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 har skapat ett nytt ämne: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 började följa dig.", "user_started_following_you_dual": "%1 och %2 började följa dig.", - "user_started_following_you_multiple": "%1 och %2 andra började följa dig.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 skickade en registreringsförfrågan.", "new_register_multiple": "Det finns %1 förfrågningar om registrering som inväntar granskning.", "flag_assigned_to_you": "Flaggan %1 har tillskrivits dig", @@ -66,6 +76,7 @@ "notificationType_follow": "När någon börjar följa dig", "notificationType_new-chat": "När du får ett chattmeddelande", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "När du får en gruppinbjudan", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "När någon ber om att få gå med i en grupp du äger", diff --git a/public/language/th/admin/settings/reputation.json b/public/language/th/admin/settings/reputation.json index 293aa5b440..53801c6662 100644 --- a/public/language/th/admin/settings/reputation.json +++ b/public/language/th/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Minimum reputation to flag posts", "min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", diff --git a/public/language/th/email.json b/public/language/th/email.json index d3245240c4..599b3c6c46 100644 --- a/public/language/th/email.json +++ b/public/language/th/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Your Weekly Digest", "digest.title.month": "Your Monthly Digest", "notif.chat.subject": "ได้รับข้อความแชทใหม่จาก %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "กดตรงนี้เพื่อกลับไปยังบทสนทนา", "notif.chat.unsub.info": "การแจ้งเตือนแชทนี้ถูกส่งไปหาคุณเนื่องจากการตั้งค่าสมาชิกของคุณ", "notif.post.unsub.info": "การแจ้งเตือนกระทู้นี้ถูกส่งไปยังคุณเนื่องการตั้งค่าสมาชิกของคุณ", diff --git a/public/language/th/error.json b/public/language/th/error.json index 7e396d380f..153baeb610 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/th/modules.json b/public/language/th/modules.json index aac0f60788..5874791d58 100644 --- a/public/language/th/modules.json +++ b/public/language/th/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "คุยกับ", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/th/notifications.json b/public/language/th/notifications.json index 96809e48cb..b8ee428dcf 100644 --- a/public/language/th/notifications.json +++ b/public/language/th/notifications.json @@ -15,31 +15,41 @@ "replies": "คำตอบ", "chat": "แชท", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "ติดตาม", "upvote": "โหวตขึ้น", "new-flags": "ปักธงใหม่", "my-flags": "ธงที่ถูกปักให้ฉัน", "bans": "แบน", "new_message_from": "ข้อความใหม่จาก %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 ได้โหวตโพสต์ของคุณขึ้นใน %2", "upvoted_your_post_in_dual": "%1 และ %2ได้โหวตโพสต์ของคุณขึ้นใน %3 ", - "upvoted_your_post_in_multiple": "%1 และคืนอื่นๆอีก %2 คน ได้โหวตโพสต์ของคุณขึ้นใน %3", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 ได้ปักธงโปรไฟล์ผู้ใช้ (%2)", "user_flagged_user_dual": "%1และ%2ได้ปักธงโปรไฟล์ผู้ใช้ (%3)", - "user_flagged_user_multiple": "%1และคืนอื่นๆอีก %2 ได้ปักธงโปรไฟล์ผู้ใช้ (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 ได้โพสต์คำตอบไปยัง : %2", "user_posted_to_dual": "%1และ %2ได้โพสต์คำตอบไปยัง : %3 ", - "user_posted_to_multiple": "%1และคนอื่นๆอีก %2 ได้โพสต์คำตอบไปยัง : %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1ได้โพสต์กระทู้ใหม่ : %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 ได้เริ่มติดตามคุณ", "user_started_following_you_dual": "%1และ%2ได้เริ่มติดตามคุณ", - "user_started_following_you_multiple": "%1และคืนอื่นๆอีก %2  คนได้เริ่มติดตามคุณ", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1ได้ส่งคำขอสมัครสมาชิก", "new_register_multiple": "มี%1คำขอสมัครสมาชิกที่รอการรีวิว", "flag_assigned_to_you": "ปักธง %1ได้ถูกปักธงให้คุณ", @@ -66,6 +76,7 @@ "notificationType_follow": "เมื่อมีคนติดตามคุณ", "notificationType_new-chat": "เมื่อคุณได้รับข้อความใหม่", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "เมื่อคุณได้รับเชิญเข้ากลุ่ม", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "When someone requests to join a group you own", diff --git a/public/language/tr/admin/settings/reputation.json b/public/language/tr/admin/settings/reputation.json index a3025c42b7..7ca49a3fb9 100644 --- a/public/language/tr/admin/settings/reputation.json +++ b/public/language/tr/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Eksi oy günlük limiti (sınırsız eksi oy için 0 giriniz)", "downvotes-per-user-per-day": "Aynı kişiye verilecek eksi oy günlük limiti (sınırsız eksi oy için 0 giriniz)", "min-rep-chat": "Özel sohbet edebilmek için gerekli minimum itibar", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "İletileri şikayet etmek için gerekli minimum itibar", "min-rep-website": "Kullanıcı profiline \"Web Sitesi\" eklemek için gerekli minimum itibar", "min-rep-aboutme": "Kullanıcı profiline \"Hakkımda\" eklemek için gereken minimum itibar", diff --git a/public/language/tr/email.json b/public/language/tr/email.json index 6698f65f45..326d0c01a7 100644 --- a/public/language/tr/email.json +++ b/public/language/tr/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Haftalık Özet", "digest.title.month": "Aylık Özet", "notif.chat.subject": "%1 kullanıcısından yeni bir mesaj aldınız!", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Sohbete devam etmek için buraya tıklayın", "notif.chat.unsub.info": "Bu bildirim, seçtiğiniz ayarlar nedeniyle gönderilmiştir.", "notif.post.unsub.info": "Bu yazı bildirimi size abonelik ayarlarınız nedeniyle gönderilmiştir.", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index 761441ed6b..26d2053d7c 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Özel Sohbet için en az %1 saygınlık puanına sahip olmalısınız.", "not-enough-reputation-to-upvote": "Artı oy verebilmek için en az %1 saygınlık puanına sahip olmalısınız.", "not-enough-reputation-to-downvote": "Eksi oy verebilmek için en az %1 saygınlık puanına sahip olmalısınız.", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Bu iletiyi şikayet etmek için en az %1 saygınlık puanına sahip olmalısınız.", "not-enough-reputation-min-rep-website": "Websitesi ekleyebilmek için en az %1 saygınlık puanına sahip olmalısınız.", "not-enough-reputation-min-rep-aboutme": "Hakkınızda bilgi ekleyebilmek için en az %1 saygınlık puanına sahip olmalısınız.", diff --git a/public/language/tr/modules.json b/public/language/tr/modules.json index bd7988f3db..0cc525688c 100644 --- a/public/language/tr/modules.json +++ b/public/language/tr/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Sohbet", "chat.placeholder": "Mesajı yazın veya resim sürükleyip bırakın", "chat.placeholder.mobile": "Sohbet içeriğini buraya giriniz", diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index 5e793dacb0..7e467314cd 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -15,31 +15,41 @@ "replies": "Yanıtlar", "chat": "Sohbetler", "group-chat": "Grup Sohbetleri", + "public-chat": "Public Chats", "follows": "Takip Edilenler", "upvote": "Artı Oylananlar", "new-flags": "Yeni Şikayetler", "my-flags": "Vekil olarak atandığım şikayetler", "bans": "Yasaklamalar", "new_message_from": "%1 size bir mesaj gönderdi", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 şu konudaki iletinizi beğendi: %2.", "upvoted_your_post_in_dual": "%1 ve %2 şu konudaki iletinizi beğendi: %3", - "upvoted_your_post_in_multiple": "%1 ve %2 kişi daha şu konudaki iletinizi beğendi: %3 ", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1, iletinizi şuraya taşıdı: %2 ", "moved_your_topic": "%1 şuraya taşındı: %2", "user_flagged_post_in": "%1 şu konudaki bir iletiyi şikayet etti: %2", "user_flagged_post_in_dual": " %1 ve %2 şu konudaki bir iletiyi şikayet etti: %3", - "user_flagged_post_in_multiple": "%1 ve %2 kişi daha şu konudaki iletiyi şikayet etti: %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 şu kullanıcının profilini şikayet etti: (%2)", "user_flagged_user_dual": "%1 ve %2 şu kullanıcının profilini şikayet etti: (%3)", - "user_flagged_user_multiple": "%1 ve %2 kişi daha şu kullanıcının profilini şikayet etti: (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 şu konuya bir ileti yazdı: %2 ", "user_posted_to_dual": "%1 ve %2 şu konuya ileti yazdılar: %3", - "user_posted_to_multiple": "%1 ve %2 kişi daha şu konuya ileti yazdılar: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 şu yeni konuyu oluşturdu: %2", "user_edited_post": "%1 şu konudaki bir iletiyi değiştirdi: %2", "user_started_following_you": "%1 sizi takip etmeye başladı.", "user_started_following_you_dual": "%1 ve %2 sizi takip etmeye başladı.", - "user_started_following_you_multiple": "%1 ve %2 kişi daha sizi takip etmeye başladı.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 kayıt olma isteği gönderdi.", "new_register_multiple": "Beklemede %1 kayıt olma isteği bulunmaktadır.", "flag_assigned_to_you": "Şikayet %1 size devredildi", @@ -66,6 +76,7 @@ "notificationType_follow": "Biri sizi takip etmeye başlayınca", "notificationType_new-chat": "Bir sohbet mesajı aldığınızda", "notificationType_new-group-chat": "Grup sohbet mesajı aldığınızda", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Bir gruba katılım davetiyesi aldığınızda", "notificationType_group-leave": "Biri grubunuzu terk ettiğinde", "notificationType_group-request-membership": "Biri size ait bir gruba üye olmak istediğinde", diff --git a/public/language/uk/admin/settings/reputation.json b/public/language/uk/admin/settings/reputation.json index c399b0c4d8..1b0696b844 100644 --- a/public/language/uk/admin/settings/reputation.json +++ b/public/language/uk/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Мінімальна репутація для подання скарг на пости", "min-rep-website": "Мінімальна репутація для додавання \"Веб-сайту\" до профілю користувача", "min-rep-aboutme": "Мінімальна репутація для додавання \"Про мене\" до профілю користувача", diff --git a/public/language/uk/email.json b/public/language/uk/email.json index d337e16249..540d4cff61 100644 --- a/public/language/uk/email.json +++ b/public/language/uk/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Ваш тижневий дайджест", "digest.title.month": "Ваш місячний дайджест", "notif.chat.subject": "Отримане нове повідомлення чату від %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Натисніть тут, щоб продовжити розмову", "notif.chat.unsub.info": "Це повідомлення чату було вислано вам, згідно ваших налаштувань підписки", "notif.post.unsub.info": "Це поштове повідомлення було вислано вам, згідно ваших налаштувань підписки", diff --git a/public/language/uk/error.json b/public/language/uk/error.json index 664c7cc75e..6e4157f525 100644 --- a/public/language/uk/error.json +++ b/public/language/uk/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/uk/modules.json b/public/language/uk/modules.json index 1ef15ebb33..0f85afee28 100644 --- a/public/language/uk/modules.json +++ b/public/language/uk/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Чат з", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json index 1033805812..437e01b04f 100644 --- a/public/language/uk/notifications.json +++ b/public/language/uk/notifications.json @@ -15,31 +15,41 @@ "replies": "Відповіді", "chat": "Чати", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "Вістежування", "upvote": "Схвалення", "new-flags": "Нові Скарги", "my-flags": "Скарги, подані на мене", "bans": "Бани", "new_message_from": "Нове повідомлення від %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 проголосував за ваш пост в %2.", "upvoted_your_post_in_dual": "%1 та %2 проголосували за ваш пост в %3.", - "upvoted_your_post_in_multiple": "%1 та %2 інших проголосували за ваш пост в %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 поскаржився на профіль користувача (%2)", "user_flagged_user_dual": "%1 та %2 поскаржились на профіль користувача (%3)", - "user_flagged_user_multiple": "%1 та %2 інших поскаржились на профіль користувача (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 запостив відповідь на: %2", "user_posted_to_dual": "%1 та %2 запостили відповіді до: %3", - "user_posted_to_multiple": "%1 та %2 інших запостили відповіді до: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 запостив нову тему: %2", "user_edited_post": "%1 has edited a post in %2", "user_started_following_you": "%1 почав стежити за вами.", "user_started_following_you_dual": "%1 та %2 почали стежити за вами.", - "user_started_following_you_multiple": "%1 та %2 інших почали стежити за вами.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 надіслав запит на реєстрацію.", "new_register_multiple": "%1 запити на реєстрацію очікують розгляду.", "flag_assigned_to_you": "На вас була подана скарга %1", @@ -66,6 +76,7 @@ "notificationType_follow": "Коли хтось починає слідкувати за вами", "notificationType_new-chat": "Коли ви отримуєте повідомлення чату", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Коли ви отримуєте запрошення до групи", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "Коли хтось подає запит на приєднання до групи, якою ви володієте", diff --git a/public/language/vi/admin/settings/reputation.json b/public/language/vi/admin/settings/reputation.json index 3f1c0a489c..9f28bf90c3 100644 --- a/public/language/vi/admin/settings/reputation.json +++ b/public/language/vi/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Số phản đối mỗi ngày (đặt là 0 không giới hạn phản đối)", "downvotes-per-user-per-day": "Số phản đối mỗi người dùng mỗi ngày (đặt là 0 không giới hạn số phản đối)", "min-rep-chat": "Uy tín tối thiểu để gửi tin nhắn trò chuyện", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "Uy tín tối thiểu để gắn cờ bài đăng", "min-rep-website": "Uy tín tối thiểu để thêm \"Trang web\" vào hồ sơ người dùng", "min-rep-aboutme": "Uy tín tối thiểu để thêm \"Giới thiệu bản thân\" vào hồ sơ người dùng", diff --git a/public/language/vi/email.json b/public/language/vi/email.json index f92942ae98..0e0d59d6bb 100644 --- a/public/language/vi/email.json +++ b/public/language/vi/email.json @@ -37,6 +37,7 @@ "digest.title.week": "Thông Báo Hàng Tuần Của Bạn", "digest.title.month": "Thông Báo Hàng Tháng Của Bạn", "notif.chat.subject": "Tin nhắn trò chuyện mới nhận được từ %1", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "Nhấn vào đây để tiếp tục cuộc hội thoại", "notif.chat.unsub.info": "Thông báo trò chuyện này đã được gửi cho bạn dựa theo cài đặt đăng ký của bạn.", "notif.post.unsub.info": "Thông báo bài viết này được gửi cho bạn dựa tên thiết lập nhận thông báo của bạn", diff --git a/public/language/vi/error.json b/public/language/vi/error.json index ae643c3466..c716125470 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "Bạn cần %1 uy tín để trò chuyện", "not-enough-reputation-to-upvote": "Bạn cần %1 uy tín để ủng hộ", "not-enough-reputation-to-downvote": "Bạn cần %1 uy tín để phản đối", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "Bạn cần %1 uy tín để gắn cờ bài đăng này", "not-enough-reputation-min-rep-website": "Bạn cần %1 uy tín để thêm một trang web", "not-enough-reputation-min-rep-aboutme": "Bạn cần %1 uy tín để thêm thông tin bản thân", diff --git a/public/language/vi/modules.json b/public/language/vi/modules.json index c40cf10b7b..634e64a1b2 100644 --- a/public/language/vi/modules.json +++ b/public/language/vi/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "Trò chuyện với", "chat.placeholder": "Nhập tin nhắn trò chuyện tại đây, kéo và thả hình ảnh, nhấn enter để gửi", "chat.placeholder.mobile": "Nhập tin nhắn trò chuyện tại đây", diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json index 89c5b89675..bfab07fa58 100644 --- a/public/language/vi/notifications.json +++ b/public/language/vi/notifications.json @@ -15,31 +15,41 @@ "replies": "Phản hồi", "chat": "Trò Chuyện", "group-chat": "Trò Chuyện Nhóm", + "public-chat": "Public Chats", "follows": "Lượt theo dõi", "upvote": "Ủng hộ", "new-flags": "Cảnh báo mới", "my-flags": "Cảnh báo dành cho tôi", "bans": "Cấm", "new_message_from": "Tin nhắn mới từ %1", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1 đã bình chọn bài của bạn trong %2.", "upvoted_your_post_in_dual": "%1%2 đã tán thành với bài viết của bạn trong %3.", - "upvoted_your_post_in_multiple": "%1 và %2 others đã tán thành với bài viết của bạn trong %3.", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "moved_your_post": "%1 đã chuyển bài viết của bạn tới %2", "moved_your_topic": "%1 đã chuyển %2", "user_flagged_post_in": "%1 gắn cờ 1 bài trong %2", "user_flagged_post_in_dual": "%1%2 đã gắn cờ một bài viết trong %3", - "user_flagged_post_in_multiple": "%1 và %2 người khác đã gắn cờ bài viết của bạn trong %3", + "user_flagged_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 đã gắn cờ một hồ sơ người dùng (%2)", "user_flagged_user_dual": "%1%2 đã gắn cờ một hồ sơ người dùng (%3)", - "user_flagged_user_multiple": "%1 và %2 người khác đã gắn cờ một hồ sơ người dùng (%3)", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 đã đăng một trả lời cho: %2", "user_posted_to_dual": "%1%2 đã đăng trả lời cho: %3", - "user_posted_to_multiple": "%1 và %2 người khác đã đăng trả lời cho: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 đã đăng một chủ đề mới: %2", "user_edited_post": "%1 đã chỉnh sửa một bài đăng trong %2", "user_started_following_you": "%1 đã theo dõi bạn.", "user_started_following_you_dual": "%1%2 đã bắt đầu theo dõi bạn.", - "user_started_following_you_multiple": "%1 và %2 người khác đã bắt đầu theo dõi bạn.", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 đã gửi một yêu cầu tham gia.", "new_register_multiple": "Có %1 đơn đăng ký đang chờ xem xét.", "flag_assigned_to_you": "Cờ %1 đã được giao cho bạn", @@ -66,6 +76,7 @@ "notificationType_follow": "Khi ai đó bắt đầu theo dõi bạn", "notificationType_new-chat": "Khi bạn nhận được một tin nhắn trò chuyện", "notificationType_new-group-chat": "Khi bạn nhận được một tin nhắn trò chuyện nhóm", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "Khi bạn nhận một lời mời nhóm", "notificationType_group-leave": "Khi người dùng rời khỏi nhóm của bạn", "notificationType_group-request-membership": "Khi ai đó yêu cầu tham gia một nhóm bạn sở hữu", diff --git a/public/language/zh-CN/admin/admin.json b/public/language/zh-CN/admin/admin.json index 218a77c3b5..4514e8cabd 100644 --- a/public/language/zh-CN/admin/admin.json +++ b/public/language/zh-CN/admin/admin.json @@ -14,5 +14,5 @@ "view": "浏览", "edit": "编辑", "add": "添加", - "select-icon": "Select Icon" + "select-icon": "选择图标" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/dashboard.json b/public/language/zh-CN/admin/dashboard.json index 990e68e257..4d16469c1c 100644 --- a/public/language/zh-CN/admin/dashboard.json +++ b/public/language/zh-CN/admin/dashboard.json @@ -48,7 +48,7 @@ "restart-disabled": "重建和重新启动NodeBB已被禁用,因为您似乎没有通过适当的守护进程运行它。", "maintenance-mode": "维护模式", "maintenance-mode-title": "点击此处设置 NodeBB 的维护模式", - "dark-mode": "Dark Mode", + "dark-mode": "暗黑模式", "realtime-chart-updates": "实时图表更新", "active-users": "活跃用户", @@ -91,8 +91,8 @@ "start": "开始", "end": "结束", "filter": "过滤器", - "view-as-json": "View as JSON", - "expand-analytics": "Expand analytics", - "clear-search-history": "Clear Search History", - "clear-search-history-confirm": "Are you sure you want to clear entire search history?" + "view-as-json": "以JSON格式查看", + "expand-analytics": "展开统计数据", + "clear-search-history": "清空搜索历史", + "clear-search-history-confirm": "您确定您要删除搜索历史吗?" } diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json index 94e8dd4cd6..2f66737c83 100644 --- a/public/language/zh-CN/admin/manage/users.json +++ b/public/language/zh-CN/admin/manage/users.json @@ -18,7 +18,7 @@ "purge": "删除用户和内容", "download-csv": "下载CSV", "manage-groups": "管理用户组", - "set-reputation": "Set Reputation", + "set-reputation": "设置声望", "add-group": "添加至群组", "create": "创建用户", "invite": "通过邮件邀请", diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index b3a78239cf..9afd1ea191 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -14,7 +14,7 @@ "manage/users": "用户", "manage/admins-mods": "权限分配", "manage/registration": "注册申请", - "manage/flagged-content": "Flagged Content", + "manage/flagged-content": "标记内容", "manage/post-queue": "发帖队列", "manage/groups": "群组", "manage/ip-blacklist": "IP 黑名单", diff --git a/public/language/zh-CN/admin/settings/chat.json b/public/language/zh-CN/admin/settings/chat.json index 85fc21ca23..acfcdf8cae 100644 --- a/public/language/zh-CN/admin/settings/chat.json +++ b/public/language/zh-CN/admin/settings/chat.json @@ -4,7 +4,7 @@ "disable-editing": "禁止编辑/删除聊天消息", "disable-editing-help": "管理员和超级管理员不受此限制", "max-length": "聊天信息的最大长度", - "max-chat-room-name-length": "Maximum length of chat room names", + "max-chat-room-name-length": "聊天室名称最大长度", "max-room-size": "聊天室的最多用户数", "delay": "聊天信息间的毫秒数", "notification-delay": "聊天信息的通知延迟(0 为即时)", diff --git a/public/language/zh-CN/admin/settings/guest.json b/public/language/zh-CN/admin/settings/guest.json index acf4410aab..c9ebe43739 100644 --- a/public/language/zh-CN/admin/settings/guest.json +++ b/public/language/zh-CN/admin/settings/guest.json @@ -1,6 +1,6 @@ { "settings": "设置", - "guest-settings": "Guest Settings", + "guest-settings": "访客设置", "handles.enabled": "允许游客用户名", "handles.enabled-help": "这个选项将允许游客使用一个额外的输入框来设置发帖时的用户名,如果被禁用,仅会统一显示为“游客”", "topic-views.enabled": "将来自游客的浏览记入帖子的浏览数", diff --git a/public/language/zh-CN/admin/settings/reputation.json b/public/language/zh-CN/admin/settings/reputation.json index 0212a58aec..1318a0dc09 100644 --- a/public/language/zh-CN/admin/settings/reputation.json +++ b/public/language/zh-CN/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "每天踩的次数(设置为0则表示无限制)", "downvotes-per-user-per-day": "每位用户每天踩的次数(设置为0则表示无限制)", "min-rep-chat": "发送聊天消息 需要的最低声望", + "min-rep-post-links": "发布链接的最低声望", "min-rep-flag": "举报帖子需要的最低声望", "min-rep-website": "添加“网站”到用户资料需要的最低声望", "min-rep-aboutme": "添加“关于我”到用户资料需要的最低声望", diff --git a/public/language/zh-CN/email.json b/public/language/zh-CN/email.json index 30fff5787f..9635ec000e 100644 --- a/public/language/zh-CN/email.json +++ b/public/language/zh-CN/email.json @@ -22,8 +22,8 @@ "reset.notify.subject": "更改密码成功", "reset.notify.text1": "您在 %1 上的密码已经成功修改。", "reset.notify.text2": "如果您没有授权此操作,请立即联系管理员。", - "digest.unread-rooms": "Unread rooms", - "digest.room-name-unreadcount": "%1 (%2 unread)", + "digest.unread-rooms": "未读房间", + "digest.room-name-unreadcount": "%1 (%2 未读)", "digest.latest_topics": "来自 %1 的最新主题", "digest.top-topics": "来自 %1 的关注主题", "digest.popular-topics": "来自 %1 的热门主题 ", @@ -37,6 +37,7 @@ "digest.title.week": "您的每周摘要", "digest.title.month": "您的每月摘要", "notif.chat.subject": "收到来自 %1 的新聊天消息", + "notif.chat.public-chat-subject": "房间 %2 中 %1 的新消息", "notif.chat.cta": "点击这里继续会话", "notif.chat.unsub.info": "根据您的订阅设置,为您发送此聊天提醒。", "notif.post.unsub.info": "根据您的订阅设置,为您发送此回帖提醒。", diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index 81a756b102..602e1e8483 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -55,7 +55,7 @@ "user-banned-reason-until": "抱歉,此账号已被封禁,直到 %1(原因:%2)", "user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!", "blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。", - "cant-blacklist-self-ip": "You can't blacklist your own IP", + "cant-blacklist-self-ip": "您不能禁用您自己的 IP", "ban-expiry-missing": "请提供此次禁言结束日期", "no-category": "版块不存在", "no-topic": "主题不存在", @@ -165,13 +165,14 @@ "chat-room-does-not-exist": "聊天室不存在。", "cant-add-users-to-chat-room": "无法添加用户到聊天室。", "cant-remove-users-from-chat-room": "无法从聊天室删除用户。", - "chat-room-name-too-long": "Chat room name too long. Names can't be longer than %1 characters.", + "chat-room-name-too-long": "聊天房间名字太长。名字不能超过 %1 个字符。", "already-voting-for-this-post": "您已为此帖回复投过票了。", "reputation-system-disabled": "声望系统已禁用。", "downvoting-disabled": "踩已被禁用", "not-enough-reputation-to-chat": "您需要 %1 声望才能进行聊天", "not-enough-reputation-to-upvote": "您需要 %1 声望以顶贴", "not-enough-reputation-to-downvote": "您需要 %1 声望以进行踩操作", + "not-enough-reputation-to-post-links": "您需要 %1 声望以发布帖子", "not-enough-reputation-to-flag": "您需要 %1 声望才能举报此帖子", "not-enough-reputation-min-rep-website": "您需要 %1 声望以添加网站", "not-enough-reputation-min-rep-aboutme": "您需要 %1 声望以设置关于我", @@ -200,7 +201,7 @@ "not-in-room": "用户已不在聊天室中", "cant-kick-self": "您不能把自己踢出群组", "no-users-selected": "尚未选择用户", - "no-groups-selected": "No group(s) selected", + "no-groups-selected": "没有用户组被选中", "invalid-home-page-route": "无效的首页路径", "invalid-session": "无效的会话", "invalid-session-text": "您的登录会话似乎不再处于活动状态。请刷新此页面。", diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json index 077e4061ff..c4b514ce0a 100644 --- a/public/language/zh-CN/global.json +++ b/public/language/zh-CN/global.json @@ -51,8 +51,8 @@ "nextpage": "下一页", "alert.success": "成功", "alert.error": "错误", - "alert.warning": "Warning", - "alert.info": "Info", + "alert.warning": "警告", + "alert.info": "信息", "alert.banned": "已封禁", "alert.banned.message": "您已被禁止,您当前的访问受到限制。", "alert.unbanned": "已解封", diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index 78c10e8929..2147897c22 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "房间 %1", "chat.chatting_with": "与聊天", "chat.placeholder": "在此输入聊天消息,或者拖入图片,按下回车键以发送", "chat.placeholder.mobile": "在此输入聊天信息", @@ -10,7 +11,7 @@ "chat.no_active": "暂无聊天", "chat.user_typing": "%1 正在输入……", "chat.user_has_messaged_you": "%1 向您发送了消息。", - "chat.replying-to": "Replying to %1", + "chat.replying-to": "回复 %1", "chat.see_all": "全部对话", "chat.mark_all_read": "标记全部已读", "chat.no-messages": "请选择接收人,以查看聊天消息历史", @@ -28,43 +29,43 @@ "chat.three_months": "3个月", "chat.delete_message_confirm": "您确定您要删除此消息吗?", "chat.retrieving-users": "查找用户", - "chat.view-users-list": "View users list", - "chat.public-rooms": "Public Rooms (%1)", - "chat.private-rooms": "Private Rooms (%1)", - "chat.create-room": "Create Chat Room", - "chat.private.option": "Private (Only visible to users added to room)", - "chat.public.option": "Public (Visible to every user in selected groups)", - "chat.public.groups-help": "To create a chat room that is visible to all users select registered-users from the group list.", + "chat.view-users-list": "查看用户列表", + "chat.public-rooms": "公开房间(1%)", + "chat.private-rooms": "私有房间(1%)", + "chat.create-room": "创建聊天室", + "chat.private.option": "私有(仅已加入房间用户可见)", + "chat.public.option": "公开(对选中组里的所有用户可见)", + "chat.public.groups-help": "要创建对所有用户可见的聊天房间,在用户组中选择 registered-users。", "chat.manage-room": "管理聊天室", - "chat.add-user": "Add User", - "chat.notification-settings": "Notification Settings", - "chat.default-notification-setting": "Default Notification Setting", - "chat.notification-setting-room-default": "Room Default", - "chat.notification-setting-none": "No notifications", - "chat.notification-setting-at-mention-only": "@mention only", - "chat.notification-setting-all-messages": "All messages", - "chat.select-groups": "Select Groups", + "chat.add-user": "添加用户", + "chat.notification-settings": "通知设置", + "chat.default-notification-setting": "默认通知设置", + "chat.notification-setting-room-default": "默认房间", + "chat.notification-setting-none": "无通知", + "chat.notification-setting-at-mention-only": "仅@提及", + "chat.notification-setting-all-messages": "所有信息", + "chat.select-groups": "选择用户组", "chat.add-user-help": "在这里查找更多用户。被选中的用户会被添加到聊天中。新用户不能他们被加入对话前的聊天消息。只有聊天室所有者()可以从聊天室中移除用户。", "chat.confirm-chat-with-dnd-user": "该用户已将其状态设置为 DnD(请勿打扰)。 您仍希望与其聊天吗?", - "chat.room-name-optional": "Room Name (Optional)", + "chat.room-name-optional": "房间名称(可选)", "chat.rename-room": "重命名房间", "chat.rename-placeholder": "在这里输入房间名字", "chat.rename-help": "这里设置的房间名字能够被房间内所有人都看到。", - "chat.leave": "Leave", - "chat.leave-room": "Leave Room", + "chat.leave": "离开", + "chat.leave-room": "离开房间", "chat.leave-prompt": "您确定您要离开聊天室?", "chat.leave-help": "离开此聊天会切断您和此聊天以后的联系。如果您未来重新加入了,您将不能看到您重新加入之前的聊天记录。", - "chat.delete": "Delete", - "chat.delete-room": "Delete Room", - "chat.delete-prompt": "Are you sure you wish to delete this chat room?", + "chat.delete": "删除", + "chat.delete-room": "删除房间", + "chat.delete-prompt": "您确定要删除此聊天室?", "chat.in-room": "在此房间", "chat.kick": "踢出", "chat.show-ip": "显示 IP", "chat.owner": "房间所有者", - "chat.grant-rescind-ownership": "Grant/Rescind Ownership", - "chat.system.user-join": "%1 has joined the room ", - "chat.system.user-leave": "%1 has left the room ", - "chat.system.room-rename": "%2 has renamed this room to \"%1\" ", + "chat.grant-rescind-ownership": "给予/撤销所有权", + "chat.system.user-join": "%1 加入了房间", + "chat.system.user-leave": "%1 离开了房间", + "chat.system.room-rename": "%2 已将房间重命名为 \"%1\"", "composer.compose": "编写帮助", "composer.show_preview": "显示预览", "composer.hide_preview": "隐藏预览", diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index da5a0c31a7..4d8a7d6732 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -15,31 +15,41 @@ "replies": "回复", "chat": "聊天", "group-chat": "群聊", + "public-chat": "Public Chats", "follows": "关注", "upvote": "顶", "new-flags": "新举报", "my-flags": "指派举报给我", "bans": "封禁", "new_message_from": "来自 %1 的新消息", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1%2 点赞了您的帖子。", "upvoted_your_post_in_dual": "%1%2%3 赞了您的帖子。", - "upvoted_your_post_in_multiple": "%1 和 %2 个其他人在 %3 赞了您的帖子。", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 举报了 (%2) 的用户资料", "user_flagged_user_dual": "%1%2 举报了 (%3) 的用户资料", - "user_flagged_user_multiple": "%1 和其他 %2 人举报了 (%3) 的用户资料", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 回复了:%2", "user_posted_to_dual": "%1%2 回复了: %3", - "user_posted_to_multiple": "%1 和 %2 个其他人回复了: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 发表了新主题:%2", "user_edited_post": "%1%2 编辑了一个帖子", "user_started_following_you": "%1关注了您。", "user_started_following_you_dual": "%1%2 关注了您。", - "user_started_following_you_multiple": "%1 和 %2 个其他人关注了您。", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 发出了注册请求", "new_register_multiple": "有 %1 条注册申请等待批准。", "flag_assigned_to_you": "举报 %1 已经被指派给您", @@ -66,6 +76,7 @@ "notificationType_follow": "当有人关注您时", "notificationType_new-chat": "当您收到聊天消息时", "notificationType_new-group-chat": "当您收到群聊消息时", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "当您收到用户组邀请时", "notificationType_group-leave": "当用户离开您的用户组时", "notificationType_group-request-membership": "当有人请求加入您拥有的用户组时", diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index 0f7bd5397e..48f4e4ed99 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -43,7 +43,7 @@ "wrote-ago": "编写", "wrote-on": "写于", "replied-to-user-ago": "回复了%3 ", - "replied-to-user-on": "replied to %3 on ", + "replied-to-user-on": "在 中回复了 %3", "user-locked-topic-ago": "%1 锁定了该主题 %2", "user-locked-topic-on": "%1 在 %2 中锁定了该主题", "user-unlocked-topic-ago": "%1 解锁了该主题 %2", diff --git a/public/language/zh-TW/admin/settings/reputation.json b/public/language/zh-TW/admin/settings/reputation.json index a8786fef2d..3a02406522 100644 --- a/public/language/zh-TW/admin/settings/reputation.json +++ b/public/language/zh-TW/admin/settings/reputation.json @@ -11,6 +11,7 @@ "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "min-rep-chat": "Minimum reputation to send chat messages", + "min-rep-post-links": "Minimum reputation to post links", "min-rep-flag": "舉報貼文 需要的最低聲望", "min-rep-website": "加入 個人網站 需要的最低聲望", "min-rep-aboutme": "加入 個人 “關於我”頁 需要的最低聲望", diff --git a/public/language/zh-TW/email.json b/public/language/zh-TW/email.json index f97f57a397..270b0eb84a 100644 --- a/public/language/zh-TW/email.json +++ b/public/language/zh-TW/email.json @@ -37,6 +37,7 @@ "digest.title.week": "您的每週摘要", "digest.title.month": "您的每月摘要", "notif.chat.subject": "收到來自 %1 的新聊天訊息", + "notif.chat.public-chat-subject": "New message from %1 in room %2", "notif.chat.cta": "點擊這裡繼續聊天", "notif.chat.unsub.info": "根據您的訂閱設定,為您發送此聊天提醒。", "notif.post.unsub.info": "根據您的訂閱設定,為您發送此回覆提醒。", diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json index 3dec8cadab..2134f0acdf 100644 --- a/public/language/zh-TW/error.json +++ b/public/language/zh-TW/error.json @@ -172,6 +172,7 @@ "not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote", + "not-enough-reputation-to-post-links": "You need %1 reputation to post links", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", diff --git a/public/language/zh-TW/modules.json b/public/language/zh-TW/modules.json index 0f209c2cb1..3ed8cfdaa9 100644 --- a/public/language/zh-TW/modules.json +++ b/public/language/zh-TW/modules.json @@ -1,4 +1,5 @@ { + "chat.room-id": "Room %1", "chat.chatting_with": "與聊天", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder.mobile": "Type chat message here", diff --git a/public/language/zh-TW/notifications.json b/public/language/zh-TW/notifications.json index e4274312ae..2e4da932df 100644 --- a/public/language/zh-TW/notifications.json +++ b/public/language/zh-TW/notifications.json @@ -15,31 +15,41 @@ "replies": "回覆", "chat": "聊天", "group-chat": "Group Chats", + "public-chat": "Public Chats", "follows": "關注", "upvote": "點讚", "new-flags": "新舉報", "my-flags": "指派舉報給我", "bans": "停權", "new_message_from": "來自 %1 的新訊息", + "user_posted_in_public_room": "%1 wrote in %3", + "user_posted_in_public_room_dual": "%1 and %2 wrote in %4", + "user_posted_in_public_room_triple": "%1, %2 and %3 wrote in %5", + "user_posted_in_public_room_multiple": "%1, %2 and %3 others wrote in %5", "upvoted_your_post_in": "%1%2 點讚了您的貼文。", "upvoted_your_post_in_dual": "%1%2%3 點讚了您的貼文。", - "upvoted_your_post_in_multiple": "%1 和 %2 個其他人在 %3 點讚了您的貼文。", + "upvoted_your_post_in_triple": "%1, %2 and %3 have upvoted your post in %4.", + "upvoted_your_post_in_multiple": "%1, %2 and %3 others have upvoted your post in %4.", "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_post_in_triple": "%1, %2 and %3 flagged a post in %4", + "user_flagged_post_in_multiple": "%1, %2 and %3 others flagged a post in %4", "user_flagged_user": "%1 舉報了 (%2) 的使用者資料", "user_flagged_user_dual": "%1%2 舉報了 (%3) 的使用者資料", - "user_flagged_user_multiple": "%1 和其他 %2 人舉報了 (%3) 的使用者資料", + "user_flagged_user_triple": "%1, %2 and %3 flagged a user profile (%4)", + "user_flagged_user_multiple": "%1, %2 and %3 others flagged a user profile (%4)", "user_posted_to": "%1 回覆了:%2", "user_posted_to_dual": "%1%2 回覆了: %3", - "user_posted_to_multiple": "%1 和 %2 個其他人回覆了: %3", + "user_posted_to_triple": "%1, %2 and %3 have posted replies to: %4", + "user_posted_to_multiple": "%1, %2 and %3 others have posted replies to: %4", "user_posted_topic": "%1 發表了新主題:%2", "user_edited_post": "%1%2編輯了一則貼文", "user_started_following_you": "%1追隨了您。", "user_started_following_you_dual": "%1%2 追隨了您。", - "user_started_following_you_multiple": "%1 和 %2 個其他人追隨了您。", + "user_started_following_you_triple": "%1, %2 and %3 started following you.", + "user_started_following_you_multiple": "%1, %2 and %3 others started following you.", "new_register": "%1 發出了註冊請求", "new_register_multiple": "有 %1 個註冊申請等待批准。", "flag_assigned_to_you": "舉報 %1 已經被指派給您", @@ -66,6 +76,7 @@ "notificationType_follow": "當有人追隨您時", "notificationType_new-chat": "當您收到聊天訊息時", "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-public-chat": "When you receive a public group chat message", "notificationType_group-invite": "當您收到群組邀請時", "notificationType_group-leave": "When a user leaves your group", "notificationType_group-request-membership": "當有人請求加入您擁有的群組時", diff --git a/public/openapi/components/schemas/Chats.yaml b/public/openapi/components/schemas/Chats.yaml index 36404313ff..be0dfb681b 100644 --- a/public/openapi/components/schemas/Chats.yaml +++ b/public/openapi/components/schemas/Chats.yaml @@ -50,6 +50,8 @@ MessageObject: type: number messageId: type: number + isOwner: + type: boolean fromUser: type: object properties: diff --git a/public/openapi/components/schemas/SettingsObj.yaml b/public/openapi/components/schemas/SettingsObj.yaml index eb2362bd63..3adba108b0 100644 --- a/public/openapi/components/schemas/SettingsObj.yaml +++ b/public/openapi/components/schemas/SettingsObj.yaml @@ -61,6 +61,9 @@ Settings: notificationType_new-group-chat: type: string description: Notification type for new group chat messages + notificationType_new-public-chat: + type: string + description: Notification type for new public group chat messages notificationType_new-reply: type: string description: Notification type for new topic replies diff --git a/public/openapi/read/config.yaml b/public/openapi/read/config.yaml index 795ef2f2d0..ceb99c0d58 100644 --- a/public/openapi/read/config.yaml +++ b/public/openapi/read/config.yaml @@ -29,6 +29,8 @@ get: type: boolean maintenanceMode: type: boolean + postQueue: + type: number minimumTitleLength: type: number maximumTitleLength: diff --git a/public/openapi/write.yaml b/public/openapi/write.yaml index e12e1ce2db..a9a546e779 100644 --- a/public/openapi/write.yaml +++ b/public/openapi/write.yaml @@ -184,6 +184,8 @@ paths: $ref: 'write/chats/roomId/messages.yaml' /chats/{roomId}/messages/{mid}: $ref: 'write/chats/roomId/messages/mid.yaml' + /chats/{roomId}/messages/{mid}/pin: + $ref: 'write/chats/roomId/messages/mid/pin.yaml' /flags/: $ref: 'write/flags.yaml' /flags/{flagId}: diff --git a/public/openapi/write/chats/roomId/messages/mid/pin.yaml b/public/openapi/write/chats/roomId/messages/mid/pin.yaml new file mode 100644 index 0000000000..56a85c0d73 --- /dev/null +++ b/public/openapi/write/chats/roomId/messages/mid/pin.yaml @@ -0,0 +1,66 @@ +put: + tags: + - chats + summary: pin a chat message + description: This operation pins an existing chat message in a chat room + parameters: + - in: path + name: roomId + schema: + type: string + required: true + description: a valid chat room id + example: 1 + - in: path + name: mid + schema: + type: string + required: true + description: a valid chat message id + example: 1 + responses: + '200': + description: Chat message successfully pinned + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - chats + summary: unpin a chat message + description: This operation unpins a chat message in a room + parameters: + - in: path + name: roomId + schema: + type: string + required: true + description: a valid chat room id + example: 1 + - in: path + name: mid + schema: + type: string + required: true + description: a valid chat message id + example: 1 + responses: + '200': + description: Chat message successfully unpinned + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} \ No newline at end of file diff --git a/public/openapi/write/users/uid/emails.yaml b/public/openapi/write/users/uid/emails.yaml index c6b67acf9e..3c046a0dee 100644 --- a/public/openapi/write/users/uid/emails.yaml +++ b/public/openapi/write/users/uid/emails.yaml @@ -81,4 +81,6 @@ post: type: array items: type: string - description: An email address \ No newline at end of file + description: An email address + '400': + description: error occured (aka email taken) diff --git a/public/scss/admin/admin.scss b/public/scss/admin/admin.scss index d74d386cf4..2cf8d3b4bf 100644 --- a/public/scss/admin/admin.scss +++ b/public/scss/admin/admin.scss @@ -26,6 +26,12 @@ body { overflow-y: scroll; } +[data-bs-theme="dark"] { + .admin .card:not([data-container-html]) { + box-shadow: 0px 1px 3px 0px rgba(var(--bs-black-rgb), 0.5); + } +} + .admin { .acp-page-container { max-width: 800px; @@ -171,11 +177,6 @@ body { th { font-size: 10px; } - - img { - max-width: 24px; - max-height: 24px; - } } * > .checkbox:first-child { diff --git a/public/scss/admin/common.scss b/public/scss/admin/common.scss index b94eddd2da..b99da61b94 100644 --- a/public/scss/admin/common.scss +++ b/public/scss/admin/common.scss @@ -64,18 +64,16 @@ } @include color-mode(dark) { - #content { - .btn-light { - @extend .btn-dark; - } - .text-bg-light { - @extend .text-bg-dark; - } - .btn-ghost, .btn-ghost-sm, .btn-outline, .btn-outline-sm { - color: $btn-ghost-color-dark; - &:hover, &.active { - background-color: $btn-ghost-hover-color-dark; - } + .btn-light { + @extend .btn-dark; + } + .text-bg-light { + @extend .text-bg-dark; + } + .btn-ghost, .btn-ghost-sm, .btn-outline, .btn-outline-sm { + color: $btn-ghost-color-dark; + &:hover, &.active { + background-color: $btn-ghost-hover-color-dark; } } } diff --git a/public/scss/admin/overrides.scss b/public/scss/admin/overrides.scss index 90f71d908f..bf8403063b 100644 --- a/public/scss/admin/overrides.scss +++ b/public/scss/admin/overrides.scss @@ -16,10 +16,10 @@ $yellow: #ffc107 !default; $green: #198754 !default; $cyan: #0dcaf0 !default; -$light: $gray-100 !default; -$dark: $gray-900 !default; +$light: $gray-100 !default; +$dark: $gray-800 !default; -$body-color: $gray-800; +$body-color: $gray-800 !default; $text-muted: $gray-600 !default; $btn-ghost-color: rgb(73, 80, 87); diff --git a/public/src/admin/appearance/skins.js b/public/src/admin/appearance/skins.js index 6e1d7d892e..17cb426d6e 100644 --- a/public/src/admin/appearance/skins.js +++ b/public/src/admin/appearance/skins.js @@ -2,8 +2,8 @@ define('admin/appearance/skins', [ - 'translator', 'alerts', 'settings', 'hooks', -], function (translator, alerts, settings, hooks) { + 'translator', 'alerts', 'settings', 'hooks', 'slugify', +], function (translator, alerts, settings, hooks, slugify) { const Skins = {}; Skins.init = function () { @@ -14,9 +14,9 @@ define('admin/appearance/skins', [ }).done((bsData) => { hooks.on('action:settings.sorted-list.loaded', (data) => { if (data.hash === 'custom-skins') { - // lower case all custom-skin ids after load + // slugify all custom-skin ids after load $('.custom-skin-settings [data-type="list"] [data-theme]').each((i, el) => { - $(el).attr('data-theme', $(el).attr('data-theme').toLowerCase()); + $(el).attr('data-theme', slugify($(el).attr('data-theme'))); }); highlightSelectedTheme(app.config.bootswatchSkin); } diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js index d24830f5b4..818177754a 100644 --- a/public/src/admin/extend/plugins.js +++ b/public/src/admin/extend/plugins.js @@ -309,8 +309,16 @@ define('admin/extend/plugins', [ btn.removeAttr('disabled'); return alerts.error(err); } - - ajaxify.refresh(); + function removeAndUpdateBadge(section) { + $(`${section} [data-plugin-id="${pluginID}"]`).remove(); + const count = $(`${section} [data-plugin-id]`).length; + $(`[data-bs-target="${section}"] .badge`).text(count); + } + if (!pluginData.installed) { + ['#installed', '#active', '#deactive', '#upgrade'].forEach(removeAndUpdateBadge); + } else { + ajaxify.refresh(); + } alerts.alert({ alert_id: 'plugin_toggled', diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js index 613389d9f9..d2ac9d20c1 100644 --- a/public/src/admin/manage/users.js +++ b/public/src/admin/manage/users.js @@ -1,8 +1,8 @@ 'use strict'; define('admin/manage/users', [ - 'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'alerts', 'accounts/invite', 'helpers', -], function (translator, Benchpress, autocomplete, api, slugify, bootbox, alerts, AccountInvite, helpers) { + 'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'alerts', 'accounts/invite', 'helpers', 'admin/modules/change-email', +], function (translator, Benchpress, autocomplete, api, slugify, bootbox, alerts, AccountInvite, helpers, changeEmail) { const Users = {}; Users.init = function () { @@ -273,6 +273,26 @@ define('admin/manage/users', [ socket.emit('admin.user.resetLockouts', uids, done('[[admin/manage/users:alerts.lockout-reset-success]]')); }); + $('.change-email').on('click', function () { + const uids = getSelectedUids(); + if (uids.length !== 1) { + return alerts.error('[[admin/manage/users:alerts.select-a-single-user-to-change-email]]'); + } + changeEmail.init({ + uid: uids[0], + onSuccess: function (newEmail) { + update('.notvalidated', false); + update('.pending', false); + update('.expired', false); + update('.validated', false); + update('.validated-by-admin', !!newEmail); + update('.no-email', !newEmail); + $('.users-table [component="user/select/single"]:checked').parents('.user-row').find('.validated-by-admin .email').text(newEmail); + // $('.users-table [component="user/select/single"]:checked').parents('.user-row').find('.no-email'). + }, + }); + }); + $('.validate-email').on('click', function () { const uids = getSelectedUids(); if (!uids.length) { @@ -311,6 +331,51 @@ define('admin/manage/users', [ }); }); + $('.change-password').on('click', async function () { + const uids = getSelectedUids(); + if (!uids.length) { + return; + } + async function changePassword(modal) { + const newPassword = modal.find('#newPassword').val(); + const confirmPassword = modal.find('#confirmPassword').val(); + if (newPassword !== confirmPassword) { + throw new Error('[[[user:change_password_error_match]]'); + } + await Promise.all(uids.map(uid => api.put('/users/' + uid + '/password', { + currentPassword: '', + newPassword: newPassword, + }))); + } + + const modal = bootbox.dialog({ + message: `
+ + + + +
`, + title: '[[admin/manage/users:change-password]]', + onEscape: true, + buttons: { + cancel: { + label: '[[admin/manage/users:alerts.button-cancel]]', + className: 'btn-link', + }, + change: { + label: '[[admin/manage/users:alerts.button-change]]', + className: 'btn-primary', + callback: function () { + changePassword(modal).then(() => { + modal.modal('hide'); + }).catch(alerts.error); + return false; + }, + }, + }, + }); + }); + $('.password-reset-email').on('click', function () { const uids = getSelectedUids(); if (!uids.length) { diff --git a/public/src/admin/modules/change-email.js b/public/src/admin/modules/change-email.js new file mode 100644 index 0000000000..f237792854 --- /dev/null +++ b/public/src/admin/modules/change-email.js @@ -0,0 +1,41 @@ +'use strict'; + +define('admin/modules/change-email', [ + 'api', 'bootbox', 'alerts', +], function (api, bootbox, alerts) { + const ChangeEmail = {}; + + ChangeEmail.init = function (params) { + const modal = bootbox.dialog({ + message: ` + + + `, + title: '[[admin/manage/users:change-email]]', + onEscape: true, + buttons: { + cancel: { + label: '[[admin/manage/users:alerts.button-cancel]]', + className: 'btn-link', + }, + change: { + label: '[[admin/manage/users:alerts.button-change]]', + className: 'btn-primary', + callback: function () { + const newEmail = modal.find('#newEmail').val(); + api.post('/users/' + params.uid + '/emails', { + skipConfirmation: true, + email: newEmail, + }).then(() => { + modal.modal('hide'); + params.onSuccess(newEmail); + }).catch(alerts.error); + return false; + }, + }, + }, + }); + }; + + return ChangeEmail; +}); diff --git a/public/src/admin/settings/general.js b/public/src/admin/settings/general.js index 65f1f0bce4..019cbcdeca 100644 --- a/public/src/admin/settings/general.js +++ b/public/src/admin/settings/general.js @@ -18,7 +18,7 @@ define('admin/settings/general', ['admin/settings'], function () { $('input[data-field="brand:maskableIcon"]').val(''); }); $('button[data-action="removeOgImage"]').on('click', function () { - $('input[data-field="removeOgImage"]').val(''); + $('input[data-field="og:image"]').val(''); }); $('[data-field="homePageRoute"]').on('change', toggleCustomRoute); diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index 929767bb4a..587b4055ab 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -8,7 +8,8 @@ define('forum/account/edit', [ 'hooks', 'bootbox', 'alerts', -], function (header, picture, translator, api, hooks, bootbox, alerts) { + 'admin/modules/change-email', +], function (header, picture, translator, api, hooks, bootbox, alerts, changeEmail) { const AccountEdit = {}; AccountEdit.init = function () { @@ -25,6 +26,19 @@ define('forum/account/edit', [ updateSignature(); updateAboutMe(); handleGroupSort(); + + if (!ajaxify.data.isSelf && app.user.isAdmin) { + $(`a[href="${config.relative_path}/user/${ajaxify.data.userslug}/edit/email"]`).on('click', () => { + changeEmail.init({ + uid: ajaxify.data.uid, + email: ajaxify.data.email, + onSuccess: function () { + alerts.success('[[user:email-updated]]'); + }, + }); + return false; + }); + } }; function updateProfile() { diff --git a/public/src/client/account/profile.js b/public/src/client/account/profile.js index 03a91066e1..dc2885e80e 100644 --- a/public/src/client/account/profile.js +++ b/public/src/client/account/profile.js @@ -15,7 +15,10 @@ define('forum/account/profile', [ processPage(); if (parseInt(ajaxify.data.emailChanged, 10) === 1) { - bootbox.alert('[[user:emailUpdate.change-instructions]]'); + bootbox.alert({ + message: '[[user:emailUpdate.change-instructions]]', + closeButton: false, + }); } socket.removeListener('event:user_status_change', onUserStatusChange); diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 997092b53e..cc8e3d7133 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -10,6 +10,7 @@ define('forum/chats', [ 'forum/chats/messages', 'forum/chats/user-list', 'forum/chats/message-search', + 'forum/chats/pinned-messages', 'composer/autocomplete', 'hooks', 'bootbox', @@ -19,8 +20,9 @@ define('forum/chats', [ 'uploadHelpers', ], function ( components, mousetrap, recentChats, create, - manage, messages, userList, messageSearch, autocomplete, - hooks, bootbox, alerts, chatModule, api, uploadHelpers + manage, messages, userList, messageSearch, pinnedMessages, + autocomplete, hooks, bootbox, alerts, chatModule, api, + uploadHelpers ) { const Chats = { initialised: false, @@ -43,7 +45,12 @@ define('forum/chats', [ }); Chats.init = function () { - $('.chats-full [data-bs-toggle="tooltip"]').tooltip(); + if (!utils.isMobile()) { + $('.chats-full [data-bs-toggle="tooltip"]').tooltip({ + trigger: 'hover', + container: '#content', + }); + } socket.emit('modules.chats.enterPublic', ajaxify.data.publicRooms.map(r => r.roomId)); const env = utils.findBootstrapEnvironment(); chatNavWrapper = $('[component="chat/nav-wrapper"]'); @@ -77,16 +84,17 @@ define('forum/chats', [ const chatControls = components.get('chat/controls'); Chats.addSendHandlers(roomId, $('.chat-input'), $('.expanded-chat button[data-action="send"]')); Chats.addPopoutHandler(); - Chats.addActionHandlers(components.get('chat/messages'), roomId); + Chats.addActionHandlers(components.get('chat/message/window'), roomId); Chats.addManageHandler(roomId, chatControls.find('[data-action="manage"]')); Chats.addRenameHandler(roomId, chatControls.find('[data-action="rename"]')); Chats.addLeaveHandler(roomId, chatControls.find('[data-action="leave"]')); Chats.addDeleteHandler(roomId, chatControls.find('[data-action="delete"]')); Chats.addScrollHandler(roomId, ajaxify.data.uid, chatMessageContent); Chats.addScrollBottomHandler(chatMessageContent); - Chats.addParentHandler(chatMessageContent); + Chats.addParentHandler(mainWrapper); Chats.addCharactersLeftHandler(mainWrapper); Chats.addTextareaResizeHandler(mainWrapper); + Chats.addTypingHandler(mainWrapper, roomId); Chats.addIPHandler(mainWrapper); Chats.createAutoComplete(roomId, $('[component="chat/input"]')); Chats.addUploadHandler({ @@ -104,7 +112,8 @@ define('forum/chats', [ Chats.addNotificationSettingHandler(roomId, mainWrapper); messageSearch.init(roomId, mainWrapper); Chats.addPublicRoomSortHandler(); - Chats.addTooltipHandler(); + Chats.addTooltipHandler(mainWrapper); + pinnedMessages.init(mainWrapper); }; Chats.addPublicRoomSortHandler = function () { @@ -128,8 +137,12 @@ define('forum/chats', [ } }; - Chats.addTooltipHandler = function () { - $('[data-manual-tooltip]').tooltip({ + Chats.addTooltipHandler = function (containerEl) { + if (utils.isMobile()) { + return; + } + + containerEl.find('[data-manual-tooltip]').tooltip({ trigger: 'manual', animation: false, placement: 'bottom', @@ -142,6 +155,14 @@ define('forum/chats', [ }).on('click mouseleave', function () { $(this).tooltip('hide'); }); + + containerEl.tooltip({ + selector: '[component="chat/message/controls"] button', + placement: 'top', + container: '#content', + animation: false, + trigger: 'hover', + }); }; Chats.addNotificationSettingHandler = function (roomId, containerEl) { @@ -158,16 +179,19 @@ define('forum/chats', [ }); }); }; - Chats.addParentHandler = function (chatContent) { - chatContent.on('click', '[component="chat/message/parent"]', function () { - const parentEl = $(this); - parentEl.find('[component="chat/message/parent/content"]').toggleClass('line-clamp-1'); - parentEl.find('.chat-timestamp').toggleClass('hidden'); - parentEl.toggleClass('flex-column').toggleClass('flex-row'); - if (chatContent.length && messages.isAtBottom(chatContent)) { - messages.scrollToBottom(chatContent); - } - }); + + Chats.addParentHandler = function (mainWrapper) { + mainWrapper.off('click', '[component="chat/message/parent"]') + .on('click', '[component="chat/message/parent"]', function () { + const parentEl = $(this); + parentEl.find('[component="chat/message/parent/content"]').toggleClass('line-clamp-1'); + parentEl.find('.chat-timestamp').toggleClass('hidden'); + parentEl.toggleClass('flex-column').toggleClass('flex-row'); + const chatContent = parentEl.parents('[component="chat/message/content"]'); + if (chatContent.length && messages.isAtBottom(chatContent)) { + messages.scrollToBottom(chatContent); + } + }); }; @@ -190,19 +214,20 @@ define('forum/chats', [ }; Chats.addIPHandler = function (container) { - container.on('click', '.chat-ip-button', async function () { - const ipEl = $(this); - let ip = ipEl.attr('data-ip'); - if (ip) { - navigator.clipboard.writeText(ip); - ipEl.translateText('[[global:copied]]'); - setTimeout(() => ipEl.text(ip), 2000); - return; - } - const mid = ipEl.parents('[data-mid]').attr('data-mid'); - ip = await socket.emit('modules.chats.getIP', mid); - ipEl.text(ip).attr('data-ip', ip); - }); + container.off('click', '.chat-ip-button') + .on('click', '.chat-ip-button', async function () { + const ipEl = $(this); + let ip = ipEl.attr('data-ip'); + if (ip) { + navigator.clipboard.writeText(ip); + ipEl.translateText('[[global:copied]]'); + setTimeout(() => ipEl.text(ip), 2000); + return; + } + const mid = ipEl.parents('[data-mid]').attr('data-mid'); + ip = await socket.emit('modules.chats.getIP', mid); + ipEl.text(ip).attr('data-ip', ip); + }); }; Chats.addPopoutHandler = function () { @@ -266,7 +291,7 @@ define('forum/chats', [ }; Chats.addScrollBottomHandler = function (chatContent) { - chatContent.parent() + chatContent.parents('[component="chat/message/window"]') .find('[component="chat/messages/scroll-up-alert"]') .off('click').on('click', function () { messages.scrollToBottom(chatContent); @@ -294,15 +319,32 @@ define('forum/chats', [ }); }; + Chats.addTypingHandler = function (parent, roomId) { + const textarea = parent.find('[component="chat/input"]'); + function emitTyping(typing) { + socket.emit('modules.chats.typing', { + roomId: roomId, + typing: typing, + username: app.user.username, + }); + } + + textarea.on('focus', () => textarea.val() && emitTyping(true)); + textarea.on('blur', () => emitTyping(false)); + textarea.on('input', utils.throttle(function () { + emitTyping(!!textarea.val()); + }, 2500, true)); + }; + Chats.addActionHandlers = function (element, roomId) { element.on('click', '[data-mid] [data-action]', function () { const msgEl = $(this).parents('[data-mid]'); const messageId = msgEl.attr('data-mid'); const action = this.getAttribute('data-action'); - + $(this).tooltip('dispose'); switch (action) { case 'reply': - messages.prepReplyTo(msgEl, roomId); + messages.prepReplyTo(msgEl, element); break; case 'edit': messages.prepEdit(msgEl, messageId, roomId); @@ -313,6 +355,12 @@ define('forum/chats', [ case 'restore': messages.restore(messageId, roomId); break; + case 'pin': + pinnedMessages.pin(messageId, roomId); + break; + case 'unpin': + pinnedMessages.unpin(messageId, roomId); + break; } }); }; @@ -519,12 +567,13 @@ define('forum/chats', [ const html = await app.parseAndTranslate('partials/chats/message-window', payload); const mainWrapper = components.get('chat/main-wrapper'); mainWrapper.html(html); + mainWrapper.attr('data-roomid', roomId); chatNavWrapper = $('[component="chat/nav-wrapper"]'); html.find('.timeago').timeago(); ajaxify.data = { ...ajaxify.data, ...payload, roomId: roomId }; ajaxify.updateTitle(ajaxify.data.title); $('body').toggleClass('chat-loaded', !!roomId); - mainWrapper.find('[data-bs-toggle="tooltip"]').tooltip(); + mainWrapper.find('[data-bs-toggle="tooltip"]').tooltip({ trigger: 'hover', container: '#content' }); Chats.setActive(roomId); Chats.addEventListeners(); hooks.fire('action:chat.loaded', $('.chats-full')); @@ -611,6 +660,13 @@ define('forum/chats', [ } }); }); + + socket.on('event:chats.typing', async (data) => { + if (chatModule.isFromBlockedUser(data.uid)) { + return; + } + chatModule.updateTypingUserList($(`[component="chat/main-wrapper"][data-roomid="${data.roomId}"]`), data); + }); }; Chats.markChatPageElUnread = function (data) { diff --git a/public/src/client/chats/messages.js b/public/src/client/chats/messages.js index f8adbeae5e..88e03bf4bc 100644 --- a/public/src/client/chats/messages.js +++ b/public/src/client/chats/messages.js @@ -149,7 +149,7 @@ define('forum/chats/messages', [ messages.scrollToBottom = function (containerEl) { if (containerEl && containerEl.length) { containerEl.scrollTop(containerEl[0].scrollHeight - containerEl.height()); - containerEl.parent() + containerEl.parents('[component="chat/message/window"]') .find('[component="chat/messages/scroll-up-alert"]') .addClass('hidden'); } @@ -163,15 +163,14 @@ define('forum/chats/messages', [ messages.toggleScrollUpAlert = function (containerEl) { const isAtBottom = messages.isAtBottom(containerEl, 300); - containerEl.parent() + containerEl.parents('[component="chat/message/window"]') .find('[component="chat/messages/scroll-up-alert"]') .toggleClass('hidden', isAtBottom); }; - messages.prepReplyTo = async function (msgEl, roomId) { - const chatMessages = msgEl.parents(`[component="chat/messages"][data-roomid="${roomId}"]`); - const chatContent = chatMessages.find('[component="chat/message/content"]'); - const composerEl = chatMessages.find('[component="chat/composer"]'); + messages.prepReplyTo = async function (msgEl, chatMessageWindow) { + const chatContent = chatMessageWindow.find('[component="chat/message/content"]'); + const composerEl = chatMessageWindow.find('[component="chat/composer"]'); const mid = msgEl.attr('data-mid'); const replyToEl = composerEl.find('[component="chat/composer/replying-to"]'); replyToEl.attr('data-tomid', mid) diff --git a/public/src/client/chats/pinned-messages.js b/public/src/client/chats/pinned-messages.js new file mode 100644 index 0000000000..931dcb9508 --- /dev/null +++ b/public/src/client/chats/pinned-messages.js @@ -0,0 +1,86 @@ +'use strict'; + + +define('forum/chats/pinned-messages', ['api', 'alerts'], function (api, alerts) { + const pinnedMessages = {}; + let container; + pinnedMessages.init = function (_container) { + container = _container; + $('[component="chat/pinned/messages/btn"]').on('click', async () => { + const pinnedMessagesContainer = container.find('[component="chat/messages/pinned/container"]'); + if (!pinnedMessagesContainer.hasClass('hidden')) { + return pinnedMessagesContainer.addClass('hidden'); + } + const userListEl = container.find('[component="chat/user/list"]'); + userListEl.addClass('hidden'); + await pinnedMessages.refreshList(); + pinnedMessagesContainer.removeClass('hidden'); + }); + + handleInfiniteScroll(container); + }; + + function handleInfiniteScroll(container) { + const listEl = container.find('[component="chat/messages/pinned"]'); + listEl.on('scroll', utils.debounce(async () => { + const bottom = (listEl[0].scrollHeight - listEl.height()) * 0.85; + if (listEl.scrollTop() > bottom) { + const lastIndex = listEl.find('[data-index]').last().attr('data-index'); + const data = await loadData(parseInt(lastIndex, 10) + 1); + if (data && data.length) { + const html = await parseMessages(data); + container.find('[component="chat/messages/pinned"]').append(html); + } + } + }, 200)); + } + + pinnedMessages.refreshList = async function () { + const data = await loadData(0); + + if (!data.length) { + container.find('[component="chat/messages/pinned/empty"]').removeClass('hidden'); + container.find('[component="chat/messages/pinned"]').html(''); + return; + } + container.find('[component="chat/messages/pinned/empty"]').addClass('hidden'); + const html = await parseMessages(data); + container.find('[component="chat/messages/pinned"]').html(html); + html.find('.timeago').timeago(); + }; + + async function parseMessages(data) { + return await app.parseAndTranslate('partials/chats/pinned-messages-list', 'messages', { + isOwner: ajaxify.data.isOwner, + isAdminOrGlobalMod: ajaxify.data.isAdminOrGlobalMod, + messages: data, + }); + } + + async function loadData(start) { + const data = await socket.emit('modules.chats.loadPinnedMessages', { + roomId: ajaxify.data.roomId, + start: start, + }); + return data; + } + + pinnedMessages.pin = function (mid, roomId) { + api.put(`/chats/${roomId}/messages/${mid}/pin`, {}).then(() => { + $(`[component="chat/message"][data-mid="${mid}"]`).toggleClass('pinned', true); + pinnedMessages.refreshList(); + }).catch(alerts.error); + }; + + pinnedMessages.unpin = function (mid, roomId) { + api.del(`/chats/${roomId}/messages/${mid}/pin`, {}).then(() => { + $(`[component="chat/message"][data-mid="${mid}"]`).toggleClass('pinned', false); + container.find(`[component="chat/messages/pinned"] [data-mid="${mid}"]`).remove(); + if (!container.find(`[component="chat/messages/pinned"] [data-mid]`).length) { + container.find('[component="chat/messages/pinned/empty"]').removeClass('hidden'); + } + }).catch(alerts.error); + }; + + return pinnedMessages; +}); diff --git a/public/src/client/chats/user-list.js b/public/src/client/chats/user-list.js index 2b936c0698..a4bd77cf65 100644 --- a/public/src/client/chats/user-list.js +++ b/public/src/client/chats/user-list.js @@ -11,11 +11,13 @@ define('forum/chats/user-list', ['api'], function (api) { if (!userListEl.length) { return; } + const pinnedMessageListEl = container.find('[component="chat/messages/pinned/container"]'); container.find('[component="chat/user/list/btn"]').on('click', () => { userListEl.toggleClass('hidden'); if (userListEl.hasClass('hidden')) { stopUpdating(); } else { + pinnedMessageListEl.addClass('hidden'); startUpdating(roomId, userListEl); } }); @@ -29,6 +31,9 @@ define('forum/chats/user-list', ['api'], function (api) { }; function startUpdating(roomId, userListEl) { + if (updateInterval) { + clearInterval(updateInterval); + } updateInterval = setInterval(() => { updateUserList(roomId, userListEl); }, 5000); diff --git a/public/src/client/header/chat.js b/public/src/client/header/chat.js index e384291945..44f9cf4a53 100644 --- a/public/src/client/header/chat.js +++ b/public/src/client/header/chat.js @@ -25,8 +25,8 @@ define('forum/header/chat', [ socket.removeListener('event:chats.receive', onChatMessageReceived); socket.on('event:chats.receive', onChatMessageReceived); - socket.removeListener('event:user_status_change', onUserStatusChange); - socket.on('event:user_status_change', onUserStatusChange); + socket.removeListener('event:chats.typing', onUserTyping); + socket.on('event:chats.typing', onUserTyping); socket.removeListener('event:chats.roomRename', onRoomRename); socket.on('event:chats.roomRename', onRoomRename); @@ -63,8 +63,8 @@ define('forum/header/chat', [ requireAndCall('onChatMessageReceived', data); } - function onUserStatusChange(data) { - requireAndCall('onUserStatusChange', data); + function onUserTyping(data) { + requireAndCall('onUserTyping', data); } function onRoomRename(data) { diff --git a/public/src/client/login.js b/public/src/client/login.js index 1a09f09e25..d569202160 100644 --- a/public/src/client/login.js +++ b/public/src/client/login.js @@ -11,10 +11,11 @@ define('forum/login', ['hooks', 'translator', 'jquery-form'], function (hooks, t const submitEl = $('#login'); const formEl = $('#login-form'); - submitEl.on('click', function (e) { + submitEl.on('click', async function (e) { e.preventDefault(); - - if (!$('#username').val() || !$('#password').val()) { + const username = $('#username').val(); + const password = $('#password').val(); + if (!username || !password) { errorEl.find('p').translateText('[[error:invalid-username-or-password]]'); errorEl.show(); } else { @@ -26,6 +27,23 @@ define('forum/login', ['hooks', 'translator', 'jquery-form'], function (hooks, t submitEl.addClass('disabled'); + try { + const hookData = await hooks.fire('filter:app.login', { + username, + password, + cancel: false, + }); + if (hookData.cancel) { + submitEl.removeClass('disabled'); + return; + } + } catch (err) { + errorEl.find('p').translateText(err.message); + errorEl.show(); + submitEl.removeClass('disabled'); + return; + } + hooks.fire('action:app.login'); formEl.ajaxSubmit({ headers: { diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 30d58e25c6..cf456a1271 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -49,7 +49,7 @@ define('forum/topic', [ posts.signaturesShown = {}; } await posts.onTopicPageLoad(components.get('post')); - navigator.init('[component="post"]', ajaxify.data.postcount, Topic.toTop, Topic.toBottom, Topic.navigatorCallback); + navigator.init('[component="topic"]>[component="post"]', ajaxify.data.postcount, Topic.toTop, Topic.toBottom, Topic.navigatorCallback); postTools.init(tid); threadTools.init(tid, $('.topic')); @@ -64,7 +64,6 @@ define('forum/topic', [ addBlockQuoteHandler(); addCodeBlockHandler(); addParentHandler(); - addDropupHandler(); addRepliesHandler(); addPostsPreviewHandler(); setupQuickReply(); @@ -163,7 +162,7 @@ define('forum/topic', [ timeout: 15000, type: 'info', clickfn: function () { - navigator.scrollToIndex(parseInt(bookmark, 10), true); + navigator.scrollToIndex(Math.max(0, parseInt(bookmark, 10) - 1), true); }, closefn: function () { storage.removeItem('topic:' + tid + ':bookmark'); @@ -226,10 +225,8 @@ define('forum/topic', [ setTimeout(() => btn.find('i').removeClass('fa-check').addClass('fa-copy'), 2000); const codeEl = btn.parent().find('code'); if (codeEl.attr('data-lines')) { - let codeText = ''; - codeEl.find('.hljs-ln-code[data-line-number]') - .each((index, el) => { codeText += $(el).text() + '\n'; }); - return codeText; + return codeEl.find('.hljs-ln-code[data-line-number]') + .map((i, e) => e.textContent).get().join('\n'); } return codeEl.text(); }, @@ -278,37 +275,6 @@ define('forum/topic', [ }); } - Topic.applyDropup = function () { - const containerRect = this.getBoundingClientRect(); - const dropdownEl = this.querySelector('.dropdown-menu'); - const dropdownStyle = window.getComputedStyle(dropdownEl); - const dropdownHeight = dropdownStyle.getPropertyValue('height').slice(0, -2); - const offset = document.documentElement.style.getPropertyValue('--panel-offset').slice(0, -2); - - // Toggler position (including its height, since the menu spawns above it), - // minus the dropdown's height and navbar offset - const dropUp = (containerRect.top + containerRect.height - dropdownHeight - offset) > 0; - this.classList.toggle('dropup', dropUp); - }; - - function addDropupHandler() { - // Locate all dropdowns - const topicEl = components.get('topic'); - const target = topicEl.find('.dropdown-menu').parent(); - $(target).on('shown.bs.dropdown', function () { - const dropdownEl = this.querySelector('.dropdown-menu'); - if (dropdownEl.innerHTML) { - Topic.applyDropup.call(this); - } - }); - hooks.onPage('action:topic.tools.load', ({ element }) => { - Topic.applyDropup.call(element.get(0).parentNode); - }); - hooks.onPage('action:post.tools.load', ({ element }) => { - Topic.applyDropup.call(element.get(0).parentNode); - }); - } - function addRepliesHandler() { $('[component="topic"]').on('click', '[component="post/reply-count"]', function () { const btn = $(this); diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index 5cf95d9374..e8b6b17970 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -39,6 +39,9 @@ define('forum/topic/postTools', [ $('[component="topic"]').on('show.bs.dropdown', '.moderator-tools', function () { const $this = $(this); const dropdownMenu = $this.find('.dropdown-menu'); + const { top } = this.getBoundingClientRect(); + $this.toggleClass('dropup', top > window.innerHeight / 2); + if (dropdownMenu.attr('data-loaded')) { return; } diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index d9ce0c613b..3c2e009cde 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -189,7 +189,7 @@ define('forum/topic/posts', [ } data.posts = data.posts.filter(function (post) { - return post.index === -1 || $('[component="post"][data-pid="' + post.pid + '"]').length === 0; + return post.allowDupe || $('[component="post"][data-pid="' + post.pid + '"]').length === 0; }); } @@ -214,9 +214,9 @@ define('forum/topic/posts', [ html = html.filter(function () { const $this = $(this); const pid = $this.attr('data-pid'); - const index = parseInt($this.attr('data-index'), 10); + const allowDupe = $this.attr('data-allow-dupe'); const isPost = $this.is('[component="post"]'); - return !isPost || index === -1 || (pid && $('[component="post"][data-pid="' + pid + '"]').length === 0); + return !isPost || allowDupe || (pid && $('[component="post"][data-pid="' + pid + '"]').length === 0); }); const removedEls = infinitescroll.removeExtra($('[component="post"]'), direction, Math.max(20, config.postsPerPage * 2)); @@ -295,25 +295,30 @@ define('forum/topic/posts', [ await addNecroPostMessage(); }; - Posts.addTopicEvents = function (events) { + Posts.addTopicEvents = async function (events) { if (config.topicPostSort === 'most_votes') { return; } - const event = events[0]; - app.parseAndTranslate('partials/topic/event', event).then(function (translated) { - if (config.topicPostSort === 'oldest_to_newest') { - $('[component="topic"]').append(translated); - } else if (config.topicPostSort === 'newest_to_oldest') { - const mainPost = $('[component="topic"] [component="post"][data-index="0"]'); - if (mainPost.length) { - $(translated).insertAfter(mainPost); - } else { - $('[component="topic"]').prepend(translated); - } + + const translated = await Promise.all( + events.map(event => app.parseAndTranslate( + 'partials/topic/event', + { ...event, privileges: ajaxify.data.privileges } + )) + ); + + if (config.topicPostSort === 'oldest_to_newest') { + $('[component="topic"]').append(translated); + } else if (config.topicPostSort === 'newest_to_oldest') { + const mainPost = $('[component="topic"] [component="post"][data-index="0"]'); + if (mainPost.length) { + mainPost.after(translated.reverse()); + } else { + $('[component="topic"]').prepend(translated.reverse()); } + } - $('[component="topic/event"] .timeago').timeago(); - }); + $('[component="topic/event"] .timeago').timeago(); }; async function addNecroPostMessage() { diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index da37ddb17c..4fc648e247 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -200,31 +200,22 @@ define('forum/topic/threadTools', [ }; function renderMenu(container) { - container = container.get(0); if (!container) { return; } - - container.querySelectorAll('.thread-tools').forEach((toolsEl) => { - toolsEl.addEventListener('show.bs.dropdown', (e) => { - const dropdownMenu = e.target.nextElementSibling; - if (!dropdownMenu) { - return; - } - - socket.emit('topics.loadTopicTools', { tid: ajaxify.data.tid, cid: ajaxify.data.cid }, function (err, data) { - if (err) { - return alerts.error(err); - } - app.parseAndTranslate('partials/topic/topic-menu-list', data, function (html) { - $(dropdownMenu).html(html); - hooks.fire('action:topic.tools.load', { - element: $(dropdownMenu), - }); - }); - }); - }, { - once: true, + container.on('show.bs.dropdown', '.thread-tools', async function () { + const $this = $(this); + const dropdownMenu = $this.find('.dropdown-menu'); + const { top } = this.getBoundingClientRect(); + $this.toggleClass('dropup', top > window.innerHeight / 2); + if (dropdownMenu.attr('data-loaded')) { + return; + } + const data = await socket.emit('topics.loadTopicTools', { tid: ajaxify.data.tid, cid: ajaxify.data.cid }); + const html = await app.parseAndTranslate('partials/topic/topic-menu-list', data); + $(dropdownMenu).attr('data-loaded', 'true').html(html); + hooks.fire('action:topic.tools.load', { + element: $(dropdownMenu), }); }); } diff --git a/public/src/modules/alerts.js b/public/src/modules/alerts.js index ae30c6c6b3..725772f5a3 100644 --- a/public/src/modules/alerts.js +++ b/public/src/modules/alerts.js @@ -90,8 +90,8 @@ function updateAlert(alert, params) { .on('click', function (e) { if (!$(e.target).is('.btn-close')) { params.clickfn(); + close(alert); } - close(alert); }); } } @@ -128,8 +128,8 @@ function createNew(params) { .on('click', function (e) { if (!$(e.target).is('.btn-close')) { params.clickfn(alert, params); + close(alert); } - close(alert); }); } diff --git a/public/src/modules/api.js b/public/src/modules/api.js index bfda975662..db8e0fb1b0 100644 --- a/public/src/modules/api.js +++ b/public/src/modules/api.js @@ -69,18 +69,23 @@ async function xhr(options, cb) { const isJSON = contentType && contentType.startsWith('application/json'); let response; - if (isJSON) { - response = await res.json(); - } else { - response = await res.text(); + if (options.method !== 'head') { + if (isJSON) { + response = await res.json(); + } else { + response = await res.text(); + } } if (!res.ok) { - return cb(new Error(isJSON ? response.status.message : response)); + if (response) { + return cb(new Error(isJSON ? response.status.message : response)); + } + return cb(new Error(res.statusText)); } cb(null, ( - isJSON && response.hasOwnProperty('status') && response.hasOwnProperty('response') ? + isJSON && response && response.hasOwnProperty('status') && response.hasOwnProperty('response') ? response.response : response )); diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 23e0b67f6b..0f734c908e 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -226,11 +226,6 @@ define('chat', [ }); } - module.onUserStatusChange = function (data) { - const modal = module.getModal(data.uid); - app.updateUserStatus(modal.find('[component="user/status"]'), data.status); - }; - module.onRoomRename = function (data) { const modal = module.getModal(data.roomId); const titleEl = modal.find('[component="chat/room/name"]'); @@ -252,6 +247,44 @@ define('chat', [ })); }; + module.onUserTyping = function (data) { + if (module.isFromBlockedUser(data.uid)) { + return; + } + const modal = module.getModal(data.roomId); + if (modal.length) { + module.updateTypingUserList(modal, data); + } + }; + + module.updateTypingUserList = async function (container, { uid, username, typing }) { + const typingEl = container.find(`[component="chat/composer/typing"]`); + const typingUsersList = typingEl.find('[component="chat/composer/typing/users"]'); + const userEl = typingUsersList.find(`[data-uid="${uid}"]`); + + if (typing && !userEl.length) { + $(`
`).attr('data-uid', uid) + .text(username) + .appendTo(typingUsersList); + } else if (!typing && userEl.length) { + userEl.remove(); + } + + const usernames = []; + typingUsersList.children().each((i, el) => { + usernames.push($(el).text()); + }); + + const typingTextEl = typingEl.find('[component="chat/composer/typing/text"]'); + const count = usernames.length > 3 ? 'n' : usernames.length; + if (count) { + const key = `modules:chat.user_typing_${count}`; + const compiled = translator.compile.apply(null, [key, ...usernames]); + typingTextEl.html(await translator.translate(compiled)); + } + typingTextEl.toggleClass('hidden', !usernames.length); + }; + module.getModal = function (roomId) { return $('#chat-modal-' + roomId); }; @@ -280,6 +313,7 @@ define('chat', [ chatModal.css('position', 'fixed'); chatModal.appendTo($('body')); chatModal.find('.timeago').timeago(); + chatModal.find('[data-bs-toggle="tooltip"]').tooltip({ trigger: 'hover', container: '#content' }); ChatsMessages.wrapImagesInLinks(chatModal.find('[component="chat/messages"] .chat-content')); module.center(chatModal); @@ -355,7 +389,7 @@ define('chat', [ } }); - Chats.addActionHandlers(chatModal.find('[component="chat/messages"]'), roomId); + Chats.addActionHandlers(chatModal.find('[component="chat/message/window"]'), roomId); Chats.addRenameHandler(roomId, chatModal.find('[data-action="rename"]')); Chats.addLeaveHandler(roomId, chatModal.find('[data-action="leave"]')); Chats.addDeleteHandler(roomId, chatModal.find('[data-action="delete"]')); @@ -369,8 +403,9 @@ define('chat', [ Chats.addParentHandler(chatModal.find('[component="chat/message/content"]')); Chats.addCharactersLeftHandler(chatModal); Chats.addTextareaResizeHandler(chatModal); + Chats.addTypingHandler(chatModal, roomId); Chats.addIPHandler(chatModal); - + Chats.addTooltipHandler(chatModal); Chats.addUploadHandler({ dragDropAreaEl: chatModal.find('.modal-content'), pasteEl: chatModal, diff --git a/public/src/modules/helpers.common.js b/public/src/modules/helpers.common.js index 8121ad171d..d8ab1025fe 100644 --- a/public/src/modules/helpers.common.js +++ b/public/src/modules/helpers.common.js @@ -324,7 +324,7 @@ module.exports = function (utils, Benchpress, relative_path) { } function increment(value, inc) { - return value + parseInt(inc, 10); + return String(value + parseInt(inc, 10)); } function generateRepliedTo(post, timeagoCutoff) { diff --git a/public/src/modules/hooks.js b/public/src/modules/hooks.js index dbd0af9698..ced19da46b 100644 --- a/public/src/modules/hooks.js +++ b/public/src/modules/hooks.js @@ -106,14 +106,10 @@ define('hooks', [], () => { const listeners = Array.from(Hooks.loaded[hookName]); return listeners.reduce((promise, listener) => promise.then((data) => { - try { - const result = listener(data); - return utils.isPromise(result) ? - result.then(data => Promise.resolve(data)).catch(e => _onHookError(e, listener, data)) : - result; - } catch (e) { - return _onHookError(e, listener, data); - } + const result = listener(data); + return utils.isPromise(result) ? + result.then(data => Promise.resolve(data)) : + result; }), Promise.resolve(data)); }; diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 98c0752312..b0e75ec8e9 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -478,7 +478,7 @@ define('navigator', [ navigator.update = function () { let newIndex = index; - const els = $(navigator.selector); + const els = $(navigator.selector).filter((i, el) => !el.getAttribute('data-navigator-ignore')); if (els.length) { newIndex = parseInt(els.first().attr('data-index'), 10) + 1; } @@ -585,7 +585,7 @@ define('navigator', [ }; navigator.scrollTop = function (index) { - if ($(navigator.selector + '[data-index="' + index + '"]').length) { + if ($(`${navigator.selector}[data-index="${index}"]:not([data-navigator-ignore])`).length) { navigator.scrollToIndex(index, true); } else { ajaxify.go(generateUrl()); @@ -597,7 +597,7 @@ define('navigator', [ return; } - if ($(navigator.selector + '[data-index="' + index + '"]').length) { + if ($(`${navigator.selector}[data-index="${index}"]:not([data-navigator-ignore])`).length) { navigator.scrollToIndex(index, true); } else { index = parseInt(index, 10) + 1; @@ -654,7 +654,7 @@ define('navigator', [ }; navigator.scrollToPostIndex = function (postIndex, highlight, duration) { - const scrollTo = components.get('post', 'index', postIndex); + const scrollTo = $(`[component="post"][data-index="${postIndex}"]:not([data-navigator-ignore])`); navigator.scrollToElement(scrollTo, highlight, duration, postIndex); }; diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js index b749c2e068..a983519183 100644 --- a/public/src/modules/notifications.js +++ b/public/src/modules/notifications.js @@ -90,6 +90,9 @@ define('notifications', [ if (ajaxify.currentPage === 'notifications') { ajaxify.refresh(); } + if (ajaxify.data.template.chats && parseInt(ajaxify.data.roomId, 10) === parseInt(notifData.roomId, 10)) { + return; + } socket.emit('notifications.getCount', function (err, count) { if (err) { diff --git a/public/src/modules/quickreply.js b/public/src/modules/quickreply.js index b63dabcacb..d4f59bea51 100644 --- a/public/src/modules/quickreply.js +++ b/public/src/modules/quickreply.js @@ -115,7 +115,7 @@ define('quickreply', [ composer.newReply({ tid: ajaxify.data.tid, title: ajaxify.data.title, - body: utils.escapeHTML(textEl.val()), + body: textEl.val(), }); textEl.val(''); }); diff --git a/public/src/utils.common.js b/public/src/utils.common.js index 5773fa1675..dd01af95c2 100644 --- a/public/src/utils.common.js +++ b/public/src/utils.common.js @@ -707,9 +707,7 @@ const utils = { const args = arguments; const later = function () { timeout = null; - if (!immediate) { - func.apply(context, args); - } + func.apply(context, args); }; const callNow = immediate && !timeout; if (!timeout) { diff --git a/src/api/chats.js b/src/api/chats.js index cf7bc6c7ee..281109f514 100644 --- a/src/api/chats.js +++ b/src/api/chats.js @@ -6,6 +6,7 @@ const db = require('../database'); const user = require('../user'); const meta = require('../meta'); const messaging = require('../messaging'); +const notifications = require('../notifications'); const plugins = require('../plugins'); const privileges = require('../privileges'); @@ -156,6 +157,9 @@ chatsAPI.mark = async (caller, data) => { } else { await messaging.markRead(caller.uid, roomId); socketHelpers.emitToUids('event:chats.markedAsRead', { roomId: roomId }, [caller.uid]); + const nids = await user.notifications.getUnreadByField(caller.uid, 'roomId', [roomId]); + await notifications.markReadMultiple(nids, caller.uid); + user.notifications.pushCount(caller.uid); } socketHelpers.emitToUids('event:chats.mark', { roomId, state }, [caller.uid]); @@ -268,3 +272,13 @@ chatsAPI.restoreMessage = async (caller, { mid }) => { await messaging.canDelete(mid, caller.uid); await messaging.restoreMessage(mid, caller.uid); }; + +chatsAPI.pinMessage = async (caller, { roomId, mid }) => { + await messaging.canPin(roomId, caller.uid); + await messaging.pinMessage(mid, roomId); +}; + +chatsAPI.unpinMessage = async (caller, { roomId, mid }) => { + await messaging.canPin(roomId, caller.uid); + await messaging.unpinMessage(mid, roomId); +}; diff --git a/src/api/posts.js b/src/api/posts.js index cb2621ec81..8a8e53ec3a 100644 --- a/src/api/posts.js +++ b/src/api/posts.js @@ -99,6 +99,8 @@ postsAPI.edit = async function (caller, data) { throw new Error(`[[error:content-too-short, ${meta.config.minimumPostLength}]]`); } else if (contentLen > meta.config.maximumPostLength) { throw new Error(`[[error:content-too-long, ${meta.config.maximumPostLength}]]`); + } else if (!await posts.canUserPostContentWithLinks(caller.uid, data.content)) { + throw new Error(`[[error:not-enough-reputation-to-post-links, ${meta.config['min:rep:post-links']}]]`); } data.uid = caller.uid; diff --git a/src/api/users.js b/src/api/users.js index 84fe4b2b3b..d4456128d1 100644 --- a/src/api/users.js +++ b/src/api/users.js @@ -417,8 +417,15 @@ usersAPI.addEmail = async (caller, { email, skipConfirmation, uid }) => { skipConfirmation = canManageUsers && skipConfirmation; if (skipConfirmation) { - await user.setUserField(uid, 'email', email); - await user.email.confirmByUid(uid); + if (!email.length) { + await user.email.remove(uid); + } else { + if (!await user.email.available(email)) { + throw new Error('[[error:email-taken]]'); + } + await user.setUserField(uid, 'email', email); + await user.email.confirmByUid(uid); + } } else { await usersAPI.update(caller, { uid, email }); } diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js index 221e1f5fae..5bee1f65a6 100644 --- a/src/controllers/accounts/chats.js +++ b/src/controllers/accounts/chats.js @@ -20,7 +20,7 @@ chatsController.get = async function (req, res, next) { } const canChat = await privileges.global.can('chat', req.uid); if (!canChat) { - return next(new Error('[[error:no-privileges]]')); + return helpers.notAllowed(req, res); } const payload = { diff --git a/src/controllers/accounts/edit.js b/src/controllers/accounts/edit.js index 8560f043e8..f3b8ce58ec 100644 --- a/src/controllers/accounts/edit.js +++ b/src/controllers/accounts/edit.js @@ -90,16 +90,7 @@ editController.username = async function (req, res, next) { editController.email = async function (req, res, next) { const targetUid = await user.getUidByUserslug(req.params.userslug); - if (!targetUid) { - return next(); - } - - const [isAdminOrGlobalMod, canEdit] = await Promise.all([ - user.isAdminOrGlobalMod(req.uid), - privileges.users.canEdit(req.uid, targetUid), - ]); - - if (!isAdminOrGlobalMod && !canEdit) { + if (!targetUid || req.uid !== parseInt(targetUid, 10)) { return next(); } diff --git a/src/controllers/accounts/notifications.js b/src/controllers/accounts/notifications.js index c059aa4283..ff9a21a550 100644 --- a/src/controllers/accounts/notifications.js +++ b/src/controllers/accounts/notifications.js @@ -14,6 +14,7 @@ notificationsController.get = async function (req, res, next) { { name: '[[notifications:replies]]', filter: 'new-reply' }, { name: '[[notifications:chat]]', filter: 'new-chat' }, { name: '[[notifications:group-chat]]', filter: 'new-group-chat' }, + { name: '[[notifications:public-chat]]', filter: 'new-public-chat' }, { name: '[[notifications:follows]]', filter: 'follow' }, { name: '[[notifications:upvote]]', filter: 'upvote' }, ]; diff --git a/src/controllers/api.js b/src/controllers/api.js index 7aebe9c3e3..17f846b018 100644 --- a/src/controllers/api.js +++ b/src/controllers/api.js @@ -35,6 +35,7 @@ apiController.loadConfig = async function (req) { titleLayout: (meta.config.titleLayout || '{pageTitle} | {browserTitle}').replace(/{/g, '{').replace(/}/g, '}'), showSiteTitle: meta.config.showSiteTitle === 1, maintenanceMode: meta.config.maintenanceMode === 1, + postQueue: meta.config.postQueue, minimumTitleLength: meta.config.minimumTitleLength, maximumTitleLength: meta.config.maximumTitleLength, minimumPostLength: meta.config.minimumPostLength, diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index 0f6b5b4a34..fb228cbfb7 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -475,8 +475,8 @@ helpers.formatApiResponse = async (statusCode, res, payload) => { status: { code, message }, response: payload || {}, }); - } else if (payload instanceof Error) { - const { message } = payload; + } else if (payload instanceof Error || typeof payload === 'string') { + const message = payload instanceof Error ? payload.message : payload; const response = {}; // Update status code based on some common error codes @@ -512,9 +512,10 @@ helpers.formatApiResponse = async (statusCode, res, payload) => { process.stdout.write(payload.stack); } res.status(statusCode).json(returnPayload); - } else if (!payload) { + } else { // Non-2xx statusCode, generate predefined error - const returnPayload = await helpers.generateError(statusCode, null, res); + const message = payload ? String(payload) : null; + const returnPayload = await helpers.generateError(statusCode, message, res); res.status(statusCode).json(returnPayload); } }; diff --git a/src/controllers/posts.js b/src/controllers/posts.js index 128fdc130a..7865ba0af7 100644 --- a/src/controllers/posts.js +++ b/src/controllers/posts.js @@ -26,7 +26,7 @@ postsController.redirectToPost = async function (req, res, next) { } const qs = querystring.stringify(req.query); - helpers.redirect(res, qs ? `${path}?${qs}` : path); + helpers.redirect(res, qs ? `${path}?${qs}` : path, true); }; postsController.getRecentPosts = async function (req, res) { diff --git a/src/controllers/topics.js b/src/controllers/topics.js index fd3a3b9966..05de930053 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -206,13 +206,13 @@ async function addTags(topicData, req, res, currentPage) { const postAtIndex = topicData.posts.find(p => parseInt(p.index, 10) === parseInt(Math.max(0, postIndex - 1), 10)); let description = ''; if (postAtIndex && postAtIndex.content) { - description = utils.stripHTMLTags(utils.decodeHTMLEntities(postAtIndex.content)); + description = utils.stripHTMLTags(utils.decodeHTMLEntities(postAtIndex.content)).trim(); } if (description.length > 160) { description = `${description.slice(0, 157)}...`; } - description = description.replace(/\n/g, ' '); + description = description.replace(/\n/g, ' ').trim(); let mainPost = topicData.posts.find(p => parseInt(p.index, 10) === 0); if (!mainPost) { @@ -224,18 +224,10 @@ async function addTags(topicData, req, res, currentPage) { name: 'title', content: topicData.titleRaw, }, - { - name: 'description', - content: description, - }, { property: 'og:title', content: topicData.titleRaw, }, - { - property: 'og:description', - content: description, - }, { property: 'og:type', content: 'article', @@ -254,6 +246,19 @@ async function addTags(topicData, req, res, currentPage) { }, ]; + if (description && description.length) { + res.locals.metaTags.push( + { + name: 'description', + content: description, + }, + { + property: 'og:description', + content: description, + }, + ); + } + await addOGImageTags(res, topicData, postAtIndex); const page = currentPage > 1 ? `?page=${currentPage}` : ''; diff --git a/src/controllers/write/admin.js b/src/controllers/write/admin.js index 84d25ac300..4ffeb4df54 100644 --- a/src/controllers/write/admin.js +++ b/src/controllers/write/admin.js @@ -34,10 +34,16 @@ Admin.getAnalyticsData = async (req, res) => { Admin.chats = {}; Admin.chats.deleteRoom = async (req, res) => { + const roomData = await messaging.getRoomData(req.params.roomId); + if (!roomData) { + throw new Error('[[error:no-room]]'); + } await messaging.deleteRooms([req.params.roomId]); events.log({ type: 'chat-room-deleted', + roomId: req.params.roomId, + roomName: roomData.roomName ? roomData.roomName : `No room name`, uid: req.uid, ip: req.ip, }); diff --git a/src/controllers/write/chats.js b/src/controllers/write/chats.js index f6b9378836..ce624ae30e 100644 --- a/src/controllers/write/chats.js +++ b/src/controllers/write/chats.js @@ -142,3 +142,17 @@ Chats.messages.restore = async (req, res) => { helpers.formatApiResponse(200, res); }; + +Chats.messages.pin = async (req, res) => { + const { mid, roomId } = req.params; + await api.chats.pinMessage(req, { mid, roomId }); + + helpers.formatApiResponse(200, res); +}; + +Chats.messages.unpin = async (req, res) => { + const { mid, roomId } = req.params; + await api.chats.unpinMessage(req, { mid, roomId }); + + helpers.formatApiResponse(200, res); +}; diff --git a/src/messaging/data.js b/src/messaging/data.js index 94d9c37e8c..e6466f579c 100644 --- a/src/messaging/data.js +++ b/src/messaging/data.js @@ -46,17 +46,17 @@ module.exports = function (Messaging) { Messaging.getMessagesData = async (mids, uid, roomId, isNew) => { let messages = await Messaging.getMessagesFields(mids, []); - messages = await user.blocks.filter(uid, 'fromuid', messages); messages = messages .map((msg, idx) => { if (msg) { msg.messageId = parseInt(mids[idx], 10); msg.ip = undefined; + msg.isOwner = msg.fromuid === parseInt(uid, 10); } return msg; }) .filter(Boolean); - + messages = await user.blocks.filter(uid, 'fromuid', messages); const users = await user.getUsersFields( messages.map(msg => msg && msg.fromuid), ['uid', 'username', 'userslug', 'picture', 'status', 'banned'] @@ -171,8 +171,12 @@ module.exports = function (Messaging) { } async function parseMessages(messages, uid, roomId, isNew) { - await Promise.all(messages.map(async (message) => { - message.content = await parseMessage(message, uid, roomId, isNew); + await Promise.all(messages.map(async (msg) => { + if (msg.deleted && !msg.isOwner) { + msg.content = `

[[modules:chat.message-deleted]]

`; + return; + } + msg.content = await parseMessage(msg, uid, roomId, isNew); })); } async function parseMessage(message, uid, roomId, isNew) { diff --git a/src/messaging/edit.js b/src/messaging/edit.js index 438d43685a..62cf93de3e 100644 --- a/src/messaging/edit.js +++ b/src/messaging/edit.js @@ -28,9 +28,13 @@ module.exports = function (Messaging) { // Propagate this change to users in the room const messages = await Messaging.getMessagesData([mid], uid, roomId, true); - sockets.in(`chat_room_${roomId}`).emit('event:chats.edit', { - messages: messages, - }); + if (messages[0]) { + const roomName = messages[0].deleted ? `uid_${uid}` : `chat_room_${roomId}`; + sockets.in(roomName).emit('event:chats.edit', { + messages: messages, + }); + } + plugins.hooks.fire('action:messaging.edit', { message: { ...messages[0], content: payload.content }, }); @@ -86,4 +90,16 @@ module.exports = function (Messaging) { Messaging.canEdit = async (messageId, uid) => await canEditDelete(messageId, uid, 'edit'); Messaging.canDelete = async (messageId, uid) => await canEditDelete(messageId, uid, 'delete'); + + Messaging.canPin = async (roomId, uid) => { + const [isAdmin, isGlobalMod, inRoom, isRoomOwner] = await Promise.all([ + user.isAdministrator(uid), + user.isGlobalModerator(uid), + Messaging.isUserInRoom(uid, roomId), + Messaging.isRoomOwner(uid, roomId), + ]); + if (!isAdmin && !isGlobalMod && (!inRoom || !isRoomOwner)) { + throw new Error('[[error:no-privileges]]'); + } + }; }; diff --git a/src/messaging/index.js b/src/messaging/index.js index 5199345720..c012f858bc 100644 --- a/src/messaging/index.js +++ b/src/messaging/index.js @@ -24,6 +24,7 @@ require('./edit')(Messaging); require('./rooms')(Messaging); require('./unread')(Messaging); require('./notifications')(Messaging); +require('./pins')(Messaging); Messaging.notificationSettings = Object.create(null); Messaging.notificationSettings.NONE = 1; @@ -55,10 +56,6 @@ Messaging.getMessages = async (params) => { const messageData = await Messaging.getMessagesData(mids, uid, roomId, isNew); messageData.forEach((msg) => { msg.index = indices[msg.messageId.toString()]; - msg.isOwner = msg.fromuid === parseInt(uid, 10); - if (msg.deleted && !msg.isOwner) { - msg.content = `

[[modules:chat.message-deleted]]

`; - } }); return messageData; @@ -130,11 +127,13 @@ Messaging.getPublicRooms = async (callerUid, uid) => { const allRoomIds = await Messaging.getPublicRoomIdsFromSet('chat:rooms:public:order'); const allRoomData = await Messaging.getRoomsData(allRoomIds); + const isAdmin = await privileges.users.isAdministrator(callerUid); const checks = await Promise.all( allRoomData.map( room => room && ( !Array.isArray(room.groups) || !room.groups.length || + isAdmin || groups.isMemberOfAny(uid, room && room.groups) ) ) @@ -373,11 +372,16 @@ Messaging.canMessageRoom = async (uid, roomId) => { throw new Error('[[error:chat-disabled]]'); } - const [inRoom, canChat] = await Promise.all([ + const [roomData, inRoom, canChat] = await Promise.all([ + Messaging.getRoomData(roomId), Messaging.isUserInRoom(uid, roomId), privileges.global.can('chat', uid), checkReputation(uid), + user.checkMuted(uid), ]); + if (!roomData) { + throw new Error('[[error:no-room]]'); + } if (!inRoom) { throw new Error('[[error:not-in-room]]'); diff --git a/src/messaging/notifications.js b/src/messaging/notifications.js index 2295dcd58a..ff1f98697f 100644 --- a/src/messaging/notifications.js +++ b/src/messaging/notifications.js @@ -100,7 +100,7 @@ module.exports = function (Messaging) { const [settings, roomData] = await Promise.all([ db.getObject(`chat:room:${roomId}:notification:settings`), - Messaging.getRoomData(roomId, ['notificationSetting']), + Messaging.getRoomData(roomId), ]); const roomDefault = roomData.notificationSetting; const uidsToNotify = []; @@ -121,15 +121,27 @@ module.exports = function (Messaging) { if (uidsToNotify.length) { const { displayname } = messageObj.fromUser; const isGroupChat = await Messaging.isGroupChat(roomId); - const notification = await notifications.create({ + const notifData = { type: isGroupChat ? 'new-group-chat' : 'new-chat', subject: `[[email:notif.chat.subject, ${displayname}]]`, bodyShort: `[[notifications:new_message_from, ${displayname}]]`, bodyLong: messageObj.content, nid: `chat_${roomId}_${fromUid}`, from: fromUid, + roomId: roomId, path: `/chats/${messageObj.roomId}`, - }); + }; + if (roomData.public) { + const icon = Messaging.getRoomIcon(roomData); + const roomName = roomData.roomName || `[[modules:chat.room-id, ${roomId}]]`; + notifData.type = 'new-public-chat'; + notifData.roomName = roomName; + notifData.roomIcon = icon; + notifData.subject = `[[email:notif.chat.public-chat-subject, ${displayname}, ${roomName}]]`; + notifData.bodyShort = `[[notifications:user_posted_in_public_room, ${displayname}, ${icon}, ${roomName}]]`; + notifData.mergeId = `notifications:user_posted_in_public_room|${roomId}`; + } + const notification = await notifications.create(notifData); await notifications.push(notification, uidsToNotify); } } diff --git a/src/messaging/pins.js b/src/messaging/pins.js new file mode 100644 index 0000000000..a2581487df --- /dev/null +++ b/src/messaging/pins.js @@ -0,0 +1,36 @@ +'use strict'; + +const db = require('../database'); + +module.exports = function (Messaging) { + Messaging.pinMessage = async (mid, roomId) => { + const isMessageInRoom = await db.isSortedSetMember(`chat:room:${roomId}:mids`, mid); + if (isMessageInRoom) { + await db.sortedSetAdd(`chat:room:${roomId}:mids:pinned`, Date.now(), mid); + await Messaging.setMessageFields(mid, { pinned: 1 }); + } + }; + + Messaging.unpinMessage = async (mid, roomId) => { + const isMessageInRoom = await db.isSortedSetMember(`chat:room:${roomId}:mids`, mid); + if (isMessageInRoom) { + await db.sortedSetRemove(`chat:room:${roomId}:mids:pinned`, mid); + await Messaging.setMessageFields(mid, { pinned: 0 }); + } + }; + + Messaging.getPinnedMessages = async (roomId, uid, start, stop) => { + const mids = await db.getSortedSetRevRange(`chat:room:${roomId}:mids:pinned`, start, stop); + if (!mids.length) { + return []; + } + + const messageData = await Messaging.getMessagesData(mids, uid, roomId, true); + messageData.forEach((msg, i) => { + if (msg) { + msg.index = start + i; + } + }); + return messageData; + }; +}; diff --git a/src/messaging/rooms.js b/src/messaging/rooms.js index 5428489f42..c78be73671 100644 --- a/src/messaging/rooms.js +++ b/src/messaging/rooms.js @@ -448,17 +448,17 @@ module.exports = function (Messaging) { user.isGlobalModerator(uid), ]); - if (!canChat) { - throw new Error('[[error:no-privileges]]'); - } if (!room || (!room.public && !inRoom) || (room.public && ( - Array.isArray(room.groups) && room.groups.length && !(await groups.isMemberOfAny(uid, room.groups))) + Array.isArray(room.groups) && room.groups.length && !isAdmin && !(await groups.isMemberOfAny(uid, room.groups))) ) ) { return null; } + if (!canChat) { + throw new Error('[[error:no-privileges]]'); + } // add user to public room onload if (room.public && !inRoom) { diff --git a/src/meta/css.js b/src/meta/css.js index 5b665f6d43..4b7e999383 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -260,7 +260,11 @@ CSS.getSkinSwitcherOptions = async function (uid) { CSS.getCustomSkins(), ]); - const defaultSkin = _.capitalize(meta.config.bootswatchSkin) || '[[user:no-skin]]'; + const foundCustom = customSkins.find(skin => skin.value === meta.config.bootswatchSkin); + const defaultSkin = foundCustom ? + foundCustom.name : + _.capitalize(meta.config.bootswatchSkin) || '[[user:no-skin]]'; + const defaultSkins = [ { name: `[[user:default, ${defaultSkin}]]`, value: '', selected: userSettings.bootswatchSkin === '' }, { name: '[[user:no-skin]]', value: 'noskin', selected: userSettings.bootswatchSkin === 'noskin' }, diff --git a/src/middleware/user.js b/src/middleware/user.js index c9713df9aa..710c121d52 100644 --- a/src/middleware/user.js +++ b/src/middleware/user.js @@ -206,7 +206,7 @@ module.exports = function (middleware) { } const path = req.url.replace(/^\/api/, '') .replace(`/uid/${uid}`, () => `/user/${userslug}`); - controllers.helpers.redirect(res, path); + controllers.helpers.redirect(res, path, true); }); middleware.redirectMeToUserslug = helpers.try(async (req, res) => { diff --git a/src/notifications.js b/src/notifications.js index b4a8aeff63..85fd2be0e1 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -26,6 +26,7 @@ Notifications.baseTypes = [ 'notificationType_follow', 'notificationType_new-chat', 'notificationType_new-group-chat', + 'notificationType_new-public-chat', 'notificationType_group-invite', 'notificationType_group-leave', 'notificationType_group-request-membership', @@ -365,6 +366,7 @@ Notifications.merge = async function (notifications) { 'notifications:user_posted_to', 'notifications:user_flagged_post_in', 'notifications:user_flagged_user', + 'notifications:user_posted_in_public_room', 'new_register', 'post-queue', ]; @@ -386,6 +388,14 @@ Notifications.merge = async function (notifications) { }, []); differentiators.forEach((differentiator) => { + function typeFromUsernames(usernames) { + if (usernames.length === 2) { + return 'dual'; + } else if (usernames.length === 3) { + return 'triple'; + } + return 'multiple'; + } let set; if (differentiator === 0 && differentiators.length === 1) { set = isolated; @@ -397,8 +407,19 @@ Notifications.merge = async function (notifications) { if (modifyIndex === -1 || set.length === 1) { return notifications; } - + const notifObj = notifications[modifyIndex]; switch (mergeId) { + case 'notifications:user_posted_in_public_room': { + const usernames = _.uniq(set.map(notifObj => notifObj && notifObj.user && notifObj.user.displayname)); + if (usernames.length === 2 || usernames.length === 3) { + notifObj.bodyShort = `[[${mergeId}_${typeFromUsernames(usernames)}, ${usernames.join(', ')}, ${notifObj.roomIcon}, ${notifObj.roomName}]]`; + } else if (usernames.length > 3) { + notifObj.bodyShort = `[[${mergeId}_${typeFromUsernames(usernames)}, ${usernames.slice(0, 2).join(', ')}, ${usernames.length - 2}, ${notifObj.roomIcon}, ${notifObj.roomName}]]`; + } + + notifObj.path = set[set.length - 1].path; + break; + } case 'notifications:upvoted_your_post_in': case 'notifications:user_started_following_you': case 'notifications:user_posted_to': @@ -411,10 +432,10 @@ Notifications.merge = async function (notifications) { let titleEscaped = title.replace(/%/g, '%').replace(/,/g, ','); titleEscaped = titleEscaped ? (`, ${titleEscaped}`) : ''; - if (numUsers === 2) { - notifications[modifyIndex].bodyShort = `[[${mergeId}_dual, ${usernames.join(', ')}${titleEscaped}]]`; + if (numUsers === 2 || numUsers === 3) { + notifications[modifyIndex].bodyShort = `[[${mergeId}_${typeFromUsernames(usernames)}, ${usernames.join(', ')}${titleEscaped}]]`; } else if (numUsers > 2) { - notifications[modifyIndex].bodyShort = `[[${mergeId}_multiple, ${usernames[0]}, ${numUsers - 1}${titleEscaped}]]`; + notifications[modifyIndex].bodyShort = `[[${mergeId}_${typeFromUsernames(usernames)}, ${usernames.slice(0, 2).join(', ')}, ${numUsers - 2}${titleEscaped}]]`; } notifications[modifyIndex].path = set[set.length - 1].path; diff --git a/src/posts/queue.js b/src/posts/queue.js index 2c485fb11e..7891dd4407 100644 --- a/src/posts/queue.js +++ b/src/posts/queue.js @@ -85,16 +85,44 @@ module.exports = function (Posts) { postData.data.content = result.postData.content; } - Posts.shouldQueue = async function (uid, data) { - const [userData, isMemberOfExempt, categoryQueueEnabled] = await Promise.all([ - user.getUserFields(uid, ['uid', 'reputation', 'postcount']), - groups.isMemberOfAny(uid, meta.config.groupsExemptFromPostQueue), - isCategoryQueueEnabled(data), + Posts.canUserPostContentWithLinks = async function (uid, content) { + if (!content) { + return true; + } + const [reputation, isPrivileged] = await Promise.all([ + user.getUserField(uid, 'reputation'), + user.isPrivileged(uid), ]); - const shouldQueue = meta.config.postQueue && categoryQueueEnabled && - !isMemberOfExempt && - (!userData.uid || userData.reputation < meta.config.postQueueReputationThreshold || userData.postcount <= 0); + if (!isPrivileged && reputation < meta.config['min:rep:post-links']) { + const parsed = await plugins.hooks.fire('filter:parse.raw', String(content)); + if (parsed.match(/]*>([^<]+)<\/a>/g)) { + return false; + } + } + return true; + }; + + Posts.shouldQueue = async function (uid, data) { + let shouldQueue = meta.config.postQueue; + if (shouldQueue) { + const [userData, isPrivileged, isMemberOfExempt, categoryQueueEnabled] = await Promise.all([ + user.getUserFields(uid, ['uid', 'reputation', 'postcount']), + user.isPrivileged(uid), + groups.isMemberOfAny(uid, meta.config.groupsExemptFromPostQueue), + isCategoryQueueEnabled(data), + ]); + shouldQueue = categoryQueueEnabled && + !isPrivileged && + !isMemberOfExempt && + ( + !userData.uid || + userData.reputation < meta.config.postQueueReputationThreshold || + userData.postcount <= 0 || + !await Posts.canUserPostContentWithLinks(uid, data.content) + ); + } + const result = await plugins.hooks.fire('filter:post.shouldQueue', { shouldQueue: !!shouldQueue, uid: uid, @@ -107,7 +135,7 @@ module.exports = function (Posts) { const type = getType(data); const cid = await getCid(type, data); if (!cid) { - throw new Error('[[error:invalid-cid]]'); + return true; } return await categories.getCategoryField(cid, 'postQueue'); } diff --git a/src/posts/topics.js b/src/posts/topics.js index 9c17d33ba9..8e94db3017 100644 --- a/src/posts/topics.js +++ b/src/posts/topics.js @@ -44,7 +44,8 @@ module.exports = function (Posts) { const postIndex = utils.isNumber(indices[index]) ? parseInt(indices[index], 10) + 1 : null; if (slug && postIndex) { - return `/topic/${slug}/${postIndex}`; + const index = postIndex === 1 ? '' : `/${postIndex}`; + return `/topic/${slug}${index}`; } return null; }); diff --git a/src/routes/authentication.js b/src/routes/authentication.js index e24ff064b9..9d89df90e1 100644 --- a/src/routes/authentication.js +++ b/src/routes/authentication.js @@ -97,6 +97,9 @@ Auth.reloadRoutes = async function (params) { req.session.ssoState = generateToken(req, true); opts.state = req.session.ssoState; } + if (req.query.next) { + req.session.next = req.query.next; + } // Allow SSO plugins to override/append options (for use in passport prototype authorizationParams) ({ opts } = await plugins.hooks.fire('filter:auth.options', { req, res, opts })); @@ -116,7 +119,7 @@ Auth.reloadRoutes = async function (params) { req.session.registration = req.session.registration || {}; // save returnTo for later usage in /register/complete // passport seems to remove `req.session.returnTo` after it redirects - req.session.registration.returnTo = req.session.returnTo; + req.session.registration.returnTo = req.session.next || req.session.returnTo; passport.authenticate(strategy.name, (err, user) => { if (err) { diff --git a/src/routes/write/chats.js b/src/routes/write/chats.js index 3334cb377f..8bcaef83b4 100644 --- a/src/routes/write/chats.js +++ b/src/routes/write/chats.js @@ -32,5 +32,8 @@ module.exports = function () { setupApiRoute(router, 'post', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.restore); setupApiRoute(router, 'delete', '/:roomId/messages/:mid', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.delete); + setupApiRoute(router, 'put', '/:roomId/messages/:mid/pin', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.pin); + setupApiRoute(router, 'delete', '/:roomId/messages/:mid/pin', [...middlewares, middleware.assert.room, middleware.assert.message], controllers.write.chats.messages.unpin); + return router; }; diff --git a/src/socket.io/index.js b/src/socket.io/index.js index c128cc414c..6db0719380 100644 --- a/src/socket.io/index.js +++ b/src/socket.io/index.js @@ -1,5 +1,6 @@ 'use strict'; +const _ = require('lodash'); const os = require('os'); const nconf = require('nconf'); const winston = require('winston'); @@ -76,6 +77,7 @@ Sockets.init = async function (server) { function onConnection(socket) { socket.uid = socket.request.uid; + socket.data.uid = socket.uid; // socket.data is shared between nodes via fetchSockets socket.ip = ( socket.request.headers['x-forwarded-for'] || socket.request.connection.remoteAddress || '' @@ -95,6 +97,19 @@ function onConnection(socket) { }, onMessage, socket, payload); }); + socket.on('disconnecting', () => { + for (const room of socket.rooms) { + if (room && room.match(/^chat_room_\d+$/)) { + Sockets.server.in(room).emit('event:chats.typing', { + roomId: room.split('_').pop(), + uid: socket.uid, + username: '', + typing: false, + }); + } + } + }); + socket.on('disconnect', () => { onDisconnect(socket); }); @@ -300,18 +315,16 @@ Sockets.getUidsInRoom = async function (room) { return []; } const ioRoom = Sockets.server.in(room); - const uids = {}; + const uids = []; if (ioRoom) { const sockets = await ioRoom.fetchSockets(); for (const s of sockets) { - for (const r of s.rooms) { - if (r.startsWith('uid_')) { - uids[r.split('_').pop()] = 1; - } + if (s && s.data && s.data.uid > 0) { + uids.push(s.data.uid); } } } - return Object.keys(uids); + return _.uniq(uids); }; Sockets.warnDeprecated = (socket, replacement) => { diff --git a/src/socket.io/modules.js b/src/socket.io/modules.js index 0595e1b59f..c58c137961 100644 --- a/src/socket.io/modules.js +++ b/src/socket.io/modules.js @@ -1,6 +1,7 @@ 'use strict'; const _ = require('lodash'); +const validator = require('validator'); const db = require('../database'); const Messaging = require('../messaging'); @@ -251,4 +252,34 @@ SocketModules.chats.searchMessages = async (socket, data) => { return messageData.filter(msg => msg && !msg.deleted && msg.timestamp > userjoinTimestamp); }; +SocketModules.chats.loadPinnedMessages = async (socket, data) => { + if (!data || !data.roomId || !utils.isNumber(data.start)) { + throw new Error('[[error:invalid-data]]'); + } + const isInRoom = await Messaging.isUserInRoom(socket.uid, data.roomId); + if (!isInRoom) { + throw new Error('[[error:no-privileges]]'); + } + const start = parseInt(data.start, 10) || 0; + const pinnedMsgs = await Messaging.getPinnedMessages(data.roomId, socket.uid, start, start + 49); + return pinnedMsgs; +}; + +SocketModules.chats.typing = async (socket, data) => { + if (!data || !utils.isNumber(data.roomId) || typeof data.typing !== 'boolean') { + throw new Error('[[error:invalid-data]]'); + } + const isInRoom = await Messaging.isUserInRoom(socket.uid, data.roomId); + if (!isInRoom) { + throw new Error('[[error:no-privileges]]'); + } + socket.to(`chat_room_${data.roomId}`).emit('event:chats.typing', { + uid: socket.uid, + roomId: data.roomId, + typing: data.typing, + username: validator.escape(String(data.username)), + }); +}; + + require('../promisify')(SocketModules); diff --git a/src/topics/create.js b/src/topics/create.js index f962b21ddf..44755ec7ee 100644 --- a/src/topics/create.js +++ b/src/topics/create.js @@ -98,6 +98,9 @@ module.exports = function (Topics) { data.tags = await Topics.filterTags(data.tags, data.cid); if (!data.fromQueue && !isAdmin) { Topics.checkContent(data.content); + if (!await posts.canUserPostContentWithLinks(uid, data.content)) { + throw new Error(`[[error:not-enough-reputation-to-post-links, ${meta.config['min:rep:post-links']}]]`); + } } if (!categoryExists) { @@ -177,6 +180,9 @@ module.exports = function (Topics) { if (!data.fromQueue && !isAdmin) { await user.isReadyToPost(uid, data.cid); Topics.checkContent(data.content); + if (!await posts.canUserPostContentWithLinks(uid, data.content)) { + throw new Error(`[[error:not-enough-reputation-to-post-links, ${meta.config['min:rep:post-links']}]]`); + } } // For replies to scheduled topics, don't have a timestamp older than topic's itself diff --git a/src/user/email.js b/src/user/email.js index c5d025cb15..c54a986828 100644 --- a/src/user/email.js +++ b/src/user/email.js @@ -40,7 +40,12 @@ UserEmail.remove = async function (uid, sessionId) { db.sortedSetRemove('email:sorted', `${email.toLowerCase()}:${uid}`), user.email.expireValidation(uid), sessionId ? user.auth.revokeAllSessions(uid, sessionId) : Promise.resolve(), - events.log({ type: 'email-change', email, newEmail: '' }), + events.log({ + targetUid: uid, + type: 'email-change', + email, + newEmail: '', + }), ]); }; @@ -199,7 +204,12 @@ UserEmail.confirmByCode = async function (code, sessionId) { await Promise.all([ UserEmail.confirmByUid(confirmObj.uid), db.delete(`confirm:${code}`), - events.log({ type: 'email-change', oldEmail, newEmail: confirmObj.email }), + events.log({ + type: 'email-change', + oldEmail, + newEmail: confirmObj.email, + targetUid: confirmObj.uid, + }), ]); }; diff --git a/src/user/interstitials.js b/src/user/interstitials.js index fbdb63f9ab..c16cb48ff0 100644 --- a/src/user/interstitials.js +++ b/src/user/interstitials.js @@ -28,8 +28,7 @@ Interstitials.email = async (data) => { return data; } - const [canManageUsers, hasPassword, hasPending] = await Promise.all([ - privileges.admin.can('admin:users', data.req.uid), + const [hasPassword, hasPending] = await Promise.all([ user.hasPassword(data.userData.uid), user.email.isValidationPending(data.userData.uid), ]); @@ -44,12 +43,7 @@ Interstitials.email = async (data) => { data: { email, requireEmailAddress: meta.config.requireEmailAddress, - issuePasswordChallenge: - hasPassword && - ( - (canManageUsers && data.userData.uid === data.req.uid) || // admin changing own email - (!canManageUsers && !!data.userData.uid) // non-admins changing own email - ), + issuePasswordChallenge: hasPassword, hasPending, }, callback: async (userData, formData) => { @@ -73,7 +67,7 @@ Interstitials.email = async (data) => { }), ]); - if (!canManageUsers && !isPasswordCorrect) { + if (!isPasswordCorrect) { await sleep(2000); } @@ -92,14 +86,7 @@ Interstitials.email = async (data) => { } // Admins editing will auto-confirm, unless editing their own email - if (canManageUsers && userData.uid !== data.req.uid) { - if (!await user.email.available(formData.email)) { - throw new Error('[[error:email-taken]]'); - } - await user.email.remove(userData.uid); - await user.setUserField(userData.uid, 'email', formData.email); - await user.email.confirmByUid(userData.uid); - } else if (canEdit) { + if (canEdit) { if (hasPassword && !isPasswordCorrect) { throw new Error('[[error:invalid-password]]'); } @@ -120,8 +107,8 @@ Interstitials.email = async (data) => { throw new Error('[[error:invalid-email]]'); } - if (current.length && (!hasPassword || (hasPassword && isPasswordCorrect) || canManageUsers)) { - // User or admin explicitly clearing their email + if (current.length && (!hasPassword || (hasPassword && isPasswordCorrect))) { + // User explicitly clearing their email await user.email.remove(userData.uid, isSelf ? data.req.session.id : null); } } diff --git a/src/user/posts.js b/src/user/posts.js index 9ca31cd6e7..26b0f348bf 100644 --- a/src/user/posts.js +++ b/src/user/posts.js @@ -13,6 +13,20 @@ module.exports = function (User) { await isReady(uid, cid, 'lastqueuetime'); }; + User.checkMuted = async function (uid) { + const now = Date.now(); + const mutedUntil = await User.getUserField(uid, 'mutedUntil'); + if (mutedUntil > now) { + let muteLeft = ((mutedUntil - now) / (1000 * 60)); + if (muteLeft > 60) { + muteLeft = (muteLeft / 60).toFixed(0); + throw new Error(`[[error:user-muted-for-hours, ${muteLeft}]]`); + } else { + throw new Error(`[[error:user-muted-for-minutes, ${muteLeft.toFixed(0)}]]`); + } + } + }; + async function isReady(uid, cid, field) { if (parseInt(uid, 10) === 0) { return; @@ -30,17 +44,9 @@ module.exports = function (User) { return; } - const now = Date.now(); - if (userData.mutedUntil > now) { - let muteLeft = ((userData.mutedUntil - now) / (1000 * 60)); - if (muteLeft > 60) { - muteLeft = (muteLeft / 60).toFixed(0); - throw new Error(`[[error:user-muted-for-hours, ${muteLeft}]]`); - } else { - throw new Error(`[[error:user-muted-for-minutes, ${muteLeft.toFixed(0)}]]`); - } - } + await User.checkMuted(uid); + const now = Date.now(); if (now - userData.joindate < meta.config.initialPostDelay * 1000) { throw new Error(`[[error:user-too-new, ${meta.config.initialPostDelay}]]`); } diff --git a/src/user/settings.js b/src/user/settings.js index 6f560e58f7..9d8c92fdc3 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -10,11 +10,16 @@ const notifications = require('../notifications'); const languages = require('../languages'); module.exports = function (User) { + const spiderDefaultSettings = { + usePagination: 1, + topicPostSort: 'oldest_to_newest', + postsPerPage: 20, + topicsPerPage: 20, + }; User.getSettings = async function (uid) { if (parseInt(uid, 10) <= 0) { - return await onSettingsLoaded(uid, { - usePagination: parseInt(uid, 10) === -1 ? 1 : undefined, // force spiders to use pagination - }); + const isSpider = parseInt(uid, 10) === -1; + return await onSettingsLoaded(uid, isSpider ? spiderDefaultSettings : {}); } let settings = await db.getObject(`user:${uid}:settings`); settings = settings || {}; diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl index 23127a9876..5c76ac94cc 100644 --- a/src/views/admin/manage/users.tpl +++ b/src/views/admin/manage/users.tpl @@ -39,22 +39,40 @@
-
@@ -105,36 +123,34 @@ {users.username} - +
- {{{ if (!./email && !./emailToConfirm) }}} - [[admin/manage/users:users.no-email]] - {{{ else }}} + [[admin/manage/users:users.no-email]] + - {{{ if ./email }}}{./email}{{{ end }}} + - + - {./emailToConfirm} + - + - {./emailToConfirm} + - + - {./emailToConfirm} + - {{{ end }}}
diff --git a/src/views/admin/partials/mobile-footer.tpl b/src/views/admin/partials/mobile-footer.tpl index faa2e547c3..f2baba36e3 100644 --- a/src/views/admin/partials/mobile-footer.tpl +++ b/src/views/admin/partials/mobile-footer.tpl @@ -1,5 +1,5 @@
-
+
diff --git a/src/views/admin/partials/offcanvas.tpl b/src/views/admin/partials/offcanvas.tpl index 20688bd1ab..f4651a74e6 100644 --- a/src/views/admin/partials/offcanvas.tpl +++ b/src/views/admin/partials/offcanvas.tpl @@ -1,4 +1,4 @@ -
+
diff --git a/src/views/admin/partials/sidebar-left.tpl b/src/views/admin/partials/sidebar-left.tpl index 3a336101a6..d56029d806 100644 --- a/src/views/admin/partials/sidebar-left.tpl +++ b/src/views/admin/partials/sidebar-left.tpl @@ -1,4 +1,4 @@ -