From eeca887b03a29e2d272c2b314c1bc74bf78ddd0b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 4 Feb 2023 22:32:01 -0500 Subject: [PATCH 01/25] chore(deps): update dependency eslint to v8.33.0 (#11243) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 8ccf83606d..18b626c2a8 100644 --- a/install/package.json +++ b/install/package.json @@ -152,7 +152,7 @@ "@commitlint/cli": "17.4.2", "@commitlint/config-angular": "17.4.2", "coveralls": "3.1.1", - "eslint": "8.32.0", + "eslint": "8.33.0", "eslint-config-nodebb": "0.2.1", "eslint-plugin-import": "2.27.5", "grunt": "1.5.3", From 7cdbf77d951361648d7e0fdba85d0af07bc4fdfb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Feb 2023 19:16:44 -0500 Subject: [PATCH 02/25] fix(deps): update dependency validator to v13.9.0 (#11262) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 18b626c2a8..601de6a017 100644 --- a/install/package.json +++ b/install/package.json @@ -138,7 +138,7 @@ "tinycon": "0.6.8", "toobusy-js": "0.5.1", "uglify-es": "3.3.9", - "validator": "13.7.0", + "validator": "13.9.0", "webpack": "5.75.0", "webpack-merge": "5.8.0", "winston": "3.8.2", From 0e9cfcad5448d5363357bee4e818cce496151482 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 5 Feb 2023 19:17:02 -0500 Subject: [PATCH 03/25] fix(deps): update dependency sanitize-html to v2.9.0 (#11261) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 601de6a017..81bd4c5967 100644 --- a/install/package.json +++ b/install/package.json @@ -119,7 +119,7 @@ "request-promise-native": "1.0.9", "rimraf": "3.0.2", "rss": "1.2.2", - "sanitize-html": "2.8.1", + "sanitize-html": "2.9.0", "semver": "7.3.8", "serve-favicon": "2.5.0", "sharp": "0.31.3", From 845c8013b6442ef31fa0476f1c8e2447c643f58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 6 Feb 2023 10:45:01 -0500 Subject: [PATCH 04/25] fix: #11259, clean old emails when updating via admin (#11260) when admin is changing users emails check if its avaiable and remove old email of user first upgrade script to cleanup email:uid, email:sorted, will remove entries if user doesn't exist or doesn't have email or if entry in user hash doesn't match entry in email:uid fix missing ! in email interstitial fix missing await in canSendValidation, fix broken tests dont pass sessionId to email.remove if admin is changing/removing email --- src/upgrades/2.8.7/fix-email-sorted-sets.js | 46 +++++++++++++++++++++ src/user/email.js | 18 +++++++- src/user/interstitials.js | 11 +++-- test/user/emails.js | 4 +- 4 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 src/upgrades/2.8.7/fix-email-sorted-sets.js diff --git a/src/upgrades/2.8.7/fix-email-sorted-sets.js b/src/upgrades/2.8.7/fix-email-sorted-sets.js new file mode 100644 index 0000000000..fcab69a8f4 --- /dev/null +++ b/src/upgrades/2.8.7/fix-email-sorted-sets.js @@ -0,0 +1,46 @@ +'use strict'; + + +const db = require('../../database'); +const batch = require('../../batch'); + + +module.exports = { + name: 'Fix user email sorted sets', + timestamp: Date.UTC(2023, 1, 4), + method: async function () { + const { progress } = this; + const bulkRemove = []; + await batch.processSortedSet('email:uid', async (data) => { + progress.incr(data.length); + const usersData = await db.getObjects(data.map(d => `user:${d.score}`)); + data.forEach((emailData, index) => { + const { score: uid, value: email } = emailData; + const userData = usersData[index]; + // user no longer exists or doesn't have email set in user hash + // remove the email/uid pair from email:uid, email:sorted + if (!userData || !userData.email) { + bulkRemove.push(['email:uid', email]); + bulkRemove.push(['email:sorted', `${email.toLowerCase()}:${uid}`]); + return; + } + + // user has email but doesn't match whats stored in user hash, gh#11259 + if (userData.email && userData.email.toLowerCase() !== email.toLowerCase()) { + bulkRemove.push(['email:uid', email]); + bulkRemove.push(['email:sorted', `${email.toLowerCase()}:${uid}`]); + } + }); + }, { + batch: 500, + withScores: true, + progress: progress, + }); + + await batch.processArray(bulkRemove, async (bulk) => { + await db.sortedSetRemoveBulk(bulk); + }, { + batch: 500, + }); + }, +}; diff --git a/src/user/email.js b/src/user/email.js index 1ea8bd551e..c6fc3274d4 100644 --- a/src/user/email.js +++ b/src/user/email.js @@ -39,7 +39,7 @@ UserEmail.remove = async function (uid, sessionId) { db.sortedSetRemove('email:uid', email.toLowerCase()), db.sortedSetRemove('email:sorted', `${email.toLowerCase()}:${uid}`), user.email.expireValidation(uid), - user.auth.revokeAllSessions(uid, sessionId), + sessionId ? user.auth.revokeAllSessions(uid, sessionId) : Promise.resolve(), events.log({ type: 'email-change', email, newEmail: '' }), ]); }; @@ -69,7 +69,7 @@ UserEmail.expireValidation = async (uid) => { }; UserEmail.canSendValidation = async (uid, email) => { - const pending = UserEmail.isValidationPending(uid, email); + const pending = await UserEmail.isValidationPending(uid, email); if (!pending) { return true; } @@ -196,6 +196,20 @@ UserEmail.confirmByUid = async function (uid) { throw new Error('[[error:invalid-email]]'); } + // If another uid has the same email throw error + const oldUid = await db.sortedSetScore('email:uid', currentEmail.toLowerCase()); + if (oldUid && oldUid !== parseInt(uid, 10)) { + throw new Error('[[error:email-taken]]'); + } + + const confirmedEmails = await db.getSortedSetRangeByScore(`email:uid`, 0, -1, uid, uid); + if (confirmedEmails.length) { + // remove old email of user by uid + await db.sortedSetsRemoveRangeByScore([`email:uid`], uid, uid); + await db.sortedSetRemoveBulk( + confirmedEmails.map(email => [`email:sorted`, `${email.toLowerCase()}:${uid}`]) + ); + } await Promise.all([ db.sortedSetAddBulk([ ['email:uid', uid, currentEmail.toLowerCase()], diff --git a/src/user/interstitials.js b/src/user/interstitials.js index 2a662785f9..aa70e8098f 100644 --- a/src/user/interstitials.js +++ b/src/user/interstitials.js @@ -42,6 +42,7 @@ Interstitials.email = async (data) => { callback: async (userData, formData) => { // Validate and send email confirmation if (userData.uid) { + const isSelf = parseInt(userData.uid, 10) === parseInt(data.req.uid, 10); const [isPasswordCorrect, canEdit, { email: current, 'email:confirmed': confirmed }, { allowed, error }] = await Promise.all([ user.isPasswordCorrect(userData.uid, formData.password, data.req.ip), privileges.users.canEdit(data.req.uid, userData.uid), @@ -68,13 +69,17 @@ Interstitials.email = async (data) => { if (formData.email === current) { if (confirmed) { throw new Error('[[error:email-nochange]]'); - } else if (await user.email.canSendValidation(userData.uid, current)) { + } else if (!await user.email.canSendValidation(userData.uid, current)) { throw new Error(`[[error:confirm-email-already-sent, ${meta.config.emailConfirmInterval}]]`); } } // Admins editing will auto-confirm, unless editing their own email if (isAdminOrGlobalMod && 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) { @@ -99,8 +104,8 @@ Interstitials.email = async (data) => { } if (current.length && (!hasPassword || (hasPassword && isPasswordCorrect) || isAdminOrGlobalMod)) { - // User explicitly clearing their email - await user.email.remove(userData.uid, data.req.session.id); + // User or admin explicitly clearing their email + await user.email.remove(userData.uid, isSelf ? data.req.session.id : null); } } } else { diff --git a/test/user/emails.js b/test/user/emails.js index f413a51283..47d3fcb6d0 100644 --- a/test/user/emails.js +++ b/test/user/emails.js @@ -120,7 +120,7 @@ describe('email confirmation (library methods)', () => { await user.email.sendValidationEmail(uid, { email, }); - const ok = await user.email.canSendValidation(uid, 'test@example.com'); + const ok = await user.email.canSendValidation(uid, email); assert.strictEqual(ok, false); }); @@ -131,7 +131,7 @@ describe('email confirmation (library methods)', () => { email, }); await db.pexpire(`confirm:byUid:${uid}`, 1000); - const ok = await user.email.canSendValidation(uid, 'test@example.com'); + const ok = await user.email.canSendValidation(uid, email); assert(ok); }); From 9f0c352ebd91cdf2e7483bfa735329e3f2abbdbd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 6 Feb 2023 10:45:15 -0500 Subject: [PATCH 05/25] chore(deps): update dependency grunt to v1.6.1 (#11244) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 81bd4c5967..f516122e1a 100644 --- a/install/package.json +++ b/install/package.json @@ -155,7 +155,7 @@ "eslint": "8.33.0", "eslint-config-nodebb": "0.2.1", "eslint-plugin-import": "2.27.5", - "grunt": "1.5.3", + "grunt": "1.6.1", "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "21.1.0", From 53fbe2a7a1a3bc836c166ca476c4e753ea62d93d Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Tue, 7 Feb 2023 09:18:08 +0000 Subject: [PATCH 06/25] Latest translations and fallbacks --- public/language/zh-CN/error.json | 32 ++++++++++++------------ public/language/zh-CN/notifications.json | 12 ++++----- public/language/zh-CN/pages.json | 6 ++--- public/language/zh-CN/topic.json | 26 +++++++++---------- public/language/zh-CN/user.json | 12 ++++----- 5 files changed, 44 insertions(+), 44 deletions(-) diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index 520524781f..b187eba154 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -25,7 +25,7 @@ "invalid-username-or-password": "请确认用户名和密码", "invalid-search-term": "无效的搜索关键字", "invalid-url": "无效的 URL", - "invalid-event": "Invalid event: %1", + "invalid-event": "无效的事件:%1", "local-login-disabled": "已禁用非管理账户的本地登录。", "csrf-invalid": "可能是由于会话过期,登录失败。请重试。", "invalid-path": "无效的路径", @@ -62,7 +62,7 @@ "no-user": "用户不存在", "no-teaser": "主题预览不存在", "no-flag": "Flag does not exist", - "no-chat-room": "Chat room does not exist", + "no-chat-room": "聊天室不存在", "no-privileges": "您没有权限执行此操作。", "category-disabled": "版块已禁用", "topic-locked": "主题已锁定", @@ -102,7 +102,7 @@ "cors-error": "由于CORS配置错误,无法上传图片。", "upload-ratelimit-reached": "您在短时间内上传了过多的文件,请稍后再试", "scheduling-to-past": "请选择一个未来的日期。", - "invalid-schedule-date": "Please enter a valid date and time.", + "invalid-schedule-date": "请输入正确的日期", "cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.", "cant-merge-scheduled": "Scheduled topics cannot be merged.", "cant-move-posts-to-scheduled": "Can't move posts to a scheduled topic.", @@ -157,31 +157,31 @@ "chat-deleted-already": "聊天消息已经被删除", "chat-restored-already": "此聊天消息已经恢复。\n", "chat-room-does-not-exist": "聊天室不存在。", - "cant-add-users-to-chat-room": "Can't add users to chat room.", - "cant-remove-users-from-chat-room": "Can't remove users from chat room.", - "chat-room-name-too-long": "Chat room name too long.", + "cant-add-users-to-chat-room": "无法添加用户到聊天室。", + "cant-remove-users-from-chat-room": "无法从聊天室删除用户。", + "chat-room-name-too-long": "聊天室名过长。", "already-voting-for-this-post": "您已为此帖回复投过票了。", "reputation-system-disabled": "声望系统已禁用。", "downvoting-disabled": "踩已被禁用", - "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-chat": "您需要 %1 声望才能进行聊天", + "not-enough-reputation-to-upvote": "您需要 %1 声望以顶贴", "not-enough-reputation-to-downvote": "您需要 %1 声望以进行踩操作", "not-enough-reputation-to-flag": "您需要 %1 声望才能举报此帖子", "not-enough-reputation-min-rep-website": "您需要 %1 声望以添加网站", "not-enough-reputation-min-rep-aboutme": "您需要 %1 声望以设置关于我", "not-enough-reputation-min-rep-signature": "您需要 %1 声望以添加签名档", - "not-enough-reputation-min-rep-profile-picture": "You need %1 reputation to add a profile picture", - "not-enough-reputation-min-rep-cover-picture": "You need %1 reputation to add a cover picture", + "not-enough-reputation-min-rep-profile-picture": "您需要 %1 声望以设置头像", + "not-enough-reputation-min-rep-cover-picture": "您需要 %1 声望以设置封面图片", "post-already-flagged": "您已举报此帖", "user-already-flagged": "您已举报此用户", "post-flagged-too-many-times": "此贴已被其他用户举报", "user-flagged-too-many-times": "此用户已被其他用户举报", "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)", "self-vote": "您不能对您自己的帖子投票", - "too-many-upvotes-today": "You can only upvote %1 times a day", - "too-many-upvotes-today-user": "You can only upvote a user %1 times a day", + "too-many-upvotes-today": "您每天仅可进行 %1 次顶贴", + "too-many-upvotes-today-user": "您每天只能对一个用户点赞 %1 次", "too-many-downvotes-today": "您每天只能踩 %1 次", - "too-many-downvotes-today-user": "您每天只能对一个用户踩 %1 次", + "too-many-downvotes-today-user": "您每天只能对一个用户点踩 %1 次", "reload-failed": "刷新 NodeBB 时遇到问题: \"%1\"。NodeBB 保持给已连接的客户端服务,您应该撤销刷新前做的更改。", "registration-error": "注册错误", "parse-error": "服务器响应解析出错", @@ -197,8 +197,8 @@ "invalid-home-page-route": "无效的首页路径", "invalid-session": "无效的会话", "invalid-session-text": "您的登录会话似乎不再处于活动状态。请刷新此页面。", - "session-mismatch": "Session Mismatch", - "session-mismatch-text": "It looks like your login session no longer matches with the server. Please refresh this page.", + "session-mismatch": "会话不匹配", + "session-mismatch-text": "您的登录会话似乎与服务器不再匹配。请刷新此页面。", "no-topics-selected": "没有主题被选中!", "cant-move-to-same-topic": "无法将帖子移动到相同的主题中!", "cant-move-topic-to-same-category": "无法将主题移动到相同的版块!", @@ -208,7 +208,7 @@ "already-blocked": "此用户已被屏蔽", "already-unblocked": "此用户已被取消屏蔽", "no-connection": "您的网络连接似乎存在问题", - "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", + "socket-reconnect-failed": "目前无法连接到服务器。请点击这里重试,或稍后再试", "plugin-not-whitelisted": "无法安装插件 – 只有被NodeBB包管理器列入白名单的插件才能通过ACP安装。", "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index cfd4b7fd3d..dd9963a2e1 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -14,7 +14,7 @@ "topics": "主题", "replies": "回复", "chat": "聊天", - "group-chat": "Group Chats", + "group-chat": "群聊", "follows": "关注", "upvote": "顶", "new-flags": "新举报", @@ -48,9 +48,9 @@ "posts-exported": "%1帖子已导出,点击下载", "uploads-exported": "%1上传已导出,点击下载", "users-csv-exported": "用户列表 CSV 已导出,点击以下载", - "post-queue-accepted": "Your queued post has been accepted. Click here to see your post.", - "post-queue-rejected": "Your queued post has been rejected.", - "post-queue-notify": "Queued post received a notification:
\"%1\"", + "post-queue-accepted": "您先前提交的帖子已通过查验,点击这里查看", + "post-queue-rejected": "您先前提交的帖子已被拒绝", + "post-queue-notify": "您先前提交的帖子收到了通知:“%1”", "email-confirmed": "电子邮箱已确认", "email-confirmed-message": "感谢您验证您的电子邮箱。您的帐户现已完全激活。", "email-confirm-error-message": "验证的您电子邮箱地址时出现了问题。可能是因为验证码无效或已过期。", @@ -65,9 +65,9 @@ "notificationType_post-edit": "当您关注的主题有帖子被编辑时", "notificationType_follow": "当有人关注您时", "notificationType_new-chat": "当您收到聊天消息时", - "notificationType_new-group-chat": "When you receive a group chat message", + "notificationType_new-group-chat": "当您收到群聊消息时", "notificationType_group-invite": "当您收到群组邀请时", - "notificationType_group-leave": "When a user leaves your group", + "notificationType_group-leave": "当用户离开您的群组时", "notificationType_group-request-membership": "当有人请求加入您拥有的用户组时", "notificationType_new-register": "当有人被添加到申请队列时", "notificationType_post-queue": "当有新帖子等待审核时", diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 7799ed07a4..5829e028aa 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -49,12 +49,12 @@ "account/watched_categories": "%1 关注的版块", "account/bookmarks": "%1 收藏的帖子", "account/settings": "用户设置", - "account/watched": "主题已被 %1 关注", - "account/ignored": "主题已被 %1 忽略", + "account/watched": "%1 关注的主题", + "account/ignored": "%1 屏蔽的主题", "account/upvoted": "帖子被 %1 顶过", "account/downvoted": "帖子被 %1 踩过", "account/best": "%1 发布的最佳帖子", - "account/controversial": "Controversial posts made by %1", + "account/controversial": "%1 发布的有争议的帖子", "account/blocks": "%1 屏蔽的用户", "account/uploads": "%1 上传的文件", "account/sessions": "已登录的会话", diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index f146040c10..9a960f23c6 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -41,10 +41,10 @@ "view-history": "编辑历史", "locked-by": "锁定自", "unlocked-by": "解锁自", - "pinned-by": "Pinned by", - "unpinned-by": "Unpinned by", - "deleted-by": "Deleted by", - "restored-by": "Restored by", + "pinned-by": "置顶自", + "unpinned-by": "取消置顶自", + "deleted-by": "删除自", + "restored-by": "恢复自", "moved-from-by": "Moved from %1 by", "queued-by": "Post queued for approval →", "backlink": "Referenced by", @@ -113,7 +113,7 @@ "bookmark": "书签", "bookmarks": "书签", "bookmarks.has_no_bookmarks": "您还没有添加任何书签", - "copy-permalink": "Copy Permalink", + "copy-permalink": "复制固定链接", "loading_more_posts": "正在加载更多帖子", "move_topic": "移动主题", "move_topics": "移动主题", @@ -135,13 +135,13 @@ "merge-select-main-topic": "选择首要主题", "merge-new-title-for-topic": "主题的新标题", "topic-id": "主题 ID", - "move_posts_instruction": "Click the posts you want to move then enter a topic ID or go to the target topic", + "move_posts_instruction": "选中你想移动的帖子,然后输入一个主题ID或前往目标主题", "change_owner_instruction": "点击您想转移给其他用户的帖子", "composer.title_placeholder": "在此输入您主题的标题...", "composer.handle_placeholder": "在这里输入您的姓名/昵称", "composer.discard": "撤销", "composer.submit": "提交", - "composer.additional-options": "Additional Options", + "composer.additional-options": "附加选项", "composer.schedule": "Schedule", "composer.replying_to": "正在回复 %1", "composer.new_topic": "新主题", @@ -162,7 +162,7 @@ "newest_to_oldest": "从新到旧", "most_votes": "最多赞同", "most_posts": "回复最多", - "most_views": "Most Views", + "most_views": "最多浏览", "stale.title": "接受建议并创建新主题?", "stale.warning": "您回复的主题已经很古老了,是否发布新主题并引用此主题的内容?", "stale.create": "创建新主题", @@ -180,9 +180,9 @@ "diffs.deleted": "Revision deleted", "timeago_later": "%1 后", "timeago_earlier": "%1 前", - "first-post": "First post", - "last-post": "Last post", - "go-to-my-next-post": "Go to my next post", - "no-more-next-post": "You don't have more posts in this topic", - "post-quick-reply": "Post quick reply" + "first-post": "第一个帖子", + "last-post": "最后一个帖子", + "go-to-my-next-post": "转到我的下一个帖子", + "no-more-next-post": "您在这个主题中没有更多的帖子了", + "post-quick-reply": "发表快速回复" } \ No newline at end of file diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 904ac4a7c4..2032dbe9a6 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -38,7 +38,7 @@ "watched_categories": "已关注的版块", "change_all": "更改全部", "watched": "已关注", - "ignored": "忽略", + "ignored": "屏蔽", "default-category-watch-state": "默认版块关注状态", "followers": "粉丝", "following": "关注", @@ -97,7 +97,7 @@ "digest_off": "关闭", "digest_daily": "每天", "digest_weekly": "每周", - "digest_biweekly": "Bi-Weekly", + "digest_biweekly": "每两周", "digest_monthly": "每月", "has_no_follower": "此用户还没有粉丝 :(", "follows_no_one": "此用户尚未关注任何人 :(", @@ -105,7 +105,7 @@ "has_no_best_posts": "此用户没有任何顶过的帖子。", "has_no_topics": "此用户还未发布任何主题。", "has_no_watched_topics": "此用户还未关注任何主题。", - "has_no_ignored_topics": "此用户尚未忽略任何主题。", + "has_no_ignored_topics": "此用户尚未屏蔽任何主题。", "has_no_upvoted_posts": "此用户还未顶过任何帖子。", "has_no_downvoted_posts": "此用户还未踩过任何帖子。", "has_no_controversial_posts": "此用户没有任何踩过的帖子。", @@ -160,7 +160,7 @@ "info.mute-history": "最近禁言历史", "info.no-mute-history": "该用户从未被禁言", "info.muted-until": "禁言到 %1", - "info.muted-expiry": "Expiry", + "info.muted-expiry": "到期时间", "info.muted-no-reason": "没有原因", "info.username-history": "历史用户名", "info.email-history": "历史邮箱", @@ -192,8 +192,8 @@ "consent.export_posts": "导出帖子 (.csv)", "consent.export-posts-success": "帖子导出完成后,您将会收到一条通知。", "emailUpdate.intro": "请在下方输入您的电子邮箱地址。此论坛使用您的电子邮箱地址用于定时发送摘要和通知,以及用于忘记密码时找回账号。", - "emailUpdate.optional": "This field is optional. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", + "emailUpdate.optional": "此项为可选。您不必提供您的电子邮件地址,但如果没有一个经过验证的电子邮件地址,您将无法恢复您的账号或使用电子邮件登录。", "emailUpdate.required": "此字段为必填。", "emailUpdate.change-instructions": "将向输入的电子邮箱地址发送一封带有唯一链接的确认电子邮件。访问该链接将验证您对该电子邮箱的所有权,它将在您的账号上处于活动状态。在任何时候,您都可以在您的账号页面更新存档的电子邮箱地址。", - "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership." + "emailUpdate.password-challenge": "请输入您的密码,以验证账户所有权。" } \ No newline at end of file From ebb5d2d25cd0c8aefc4d007f839eb4ee3b85df05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 8 Feb 2023 10:56:37 -0500 Subject: [PATCH 07/25] feat: search dashboard time range --- public/language/en-GB/admin/dashboard.json | 7 +++- src/controllers/admin/dashboard.js | 48 +++++++++++++++++++++- src/controllers/search.js | 8 +++- src/views/admin/dashboard/searches.tpl | 23 ++++++++--- 4 files changed, 77 insertions(+), 9 deletions(-) diff --git a/public/language/en-GB/admin/dashboard.json b/public/language/en-GB/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/en-GB/admin/dashboard.json +++ b/public/language/en-GB/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/src/controllers/admin/dashboard.js b/src/controllers/admin/dashboard.js index ac9f4fc130..09be9fb0ad 100644 --- a/src/controllers/admin/dashboard.js +++ b/src/controllers/admin/dashboard.js @@ -337,8 +337,54 @@ dashboardController.getTopics = async (req, res) => { }; dashboardController.getSearches = async (req, res) => { - const searches = await db.getSortedSetRevRangeWithScores('searches:all', 0, 99); + let start = 0; + let end = 0; + if (req.query.start) { + start = new Date(req.query.start); + start.setHours(24, 0, 0, 0); + end = new Date(); + end.setHours(24, 0, 0, 0); + } + if (req.query.end) { + end = new Date(req.query.end); + end.setHours(24, 0, 0, 0); + } + + let searches; + if (start && end && start <= end) { + const daysArr = [start]; + const nextDay = new Date(start.getTime()); + while (nextDay < end) { + nextDay.setDate(nextDay.getDate() + 1); + nextDay.setHours(0, 0, 0, 0); + daysArr.push(new Date(nextDay.getTime())); + } + + const daysData = await Promise.all( + daysArr.map(async d => db.getSortedSetRevRangeWithScores(`searches:${d.getTime()}`, 0, -1)) + ); + + const map = {}; + daysData.forEach((d) => { + d.forEach((search) => { + if (!map[search.value]) { + map[search.value] = search.score; + } else { + map[search.value] += search.score; + } + }); + }); + + searches = Object.keys(map) + .map(key => ({ value: key, score: map[key] })) + .sort((a, b) => b.score - a.score); + } else { + searches = await db.getSortedSetRevRangeWithScores('searches:all', 0, 99); + } + res.render('admin/dashboard/searches', { searches: searches.map(s => ({ value: validator.escape(String(s.value)), score: s.score })), + startDate: validator.escape(String(req.query.start)), + endDate: validator.escape(String(req.query.end)), }); }; diff --git a/src/controllers/search.js b/src/controllers/search.js index 238c167709..013db8457f 100644 --- a/src/controllers/search.js +++ b/src/controllers/search.js @@ -2,6 +2,7 @@ 'use strict'; const validator = require('validator'); +const _ = require('lodash'); const db = require('../database'); const meta = require('../meta'); @@ -120,7 +121,12 @@ async function recordSearch(data) { q => !copy.find(query => query.startsWith(q) && query.length > q.length) ); delete searches[data.uid]; - await Promise.all(filtered.map(query => db.sortedSetIncrBy('searches:all', 1, query))); + const dayTimestamp = (new Date()); + dayTimestamp.setHours(0, 0, 0, 0); + await Promise.all(_.uniq(filtered).map(async (query) => { + await db.sortedSetIncrBy('searches:all', 1, query); + await db.sortedSetIncrBy(`searches:${dayTimestamp.getTime()}`, 1, query); + })); } }, 5000); } diff --git a/src/views/admin/dashboard/searches.tpl b/src/views/admin/dashboard/searches.tpl index baefcea306..2737f0126d 100644 --- a/src/views/admin/dashboard/searches.tpl +++ b/src/views/admin/dashboard/searches.tpl @@ -1,10 +1,23 @@
- - - [[admin/dashboard:back-to-dashboard]] - - +
+ + + [[admin/dashboard:back-to-dashboard]] + +
+
+ + +
+
+ + +
+ +
+
+
From 585523009feea8f64cdc9d5c2b5408be0ab8d34b Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Wed, 8 Feb 2023 15:57:08 +0000 Subject: [PATCH 08/25] chore(i18n): fallback strings for new resources: nodebb.admin-dashboard --- public/language/ar/admin/dashboard.json | 7 +++++-- public/language/bg/admin/dashboard.json | 7 +++++-- public/language/bn/admin/dashboard.json | 7 +++++-- public/language/cs/admin/dashboard.json | 7 +++++-- public/language/da/admin/dashboard.json | 7 +++++-- public/language/de/admin/dashboard.json | 7 +++++-- public/language/el/admin/dashboard.json | 7 +++++-- public/language/en-US/admin/dashboard.json | 7 +++++-- public/language/en-x-pirate/admin/dashboard.json | 7 +++++-- public/language/es/admin/dashboard.json | 7 +++++-- public/language/et/admin/dashboard.json | 7 +++++-- public/language/fa-IR/admin/dashboard.json | 7 +++++-- public/language/fi/admin/dashboard.json | 7 +++++-- public/language/fr/admin/dashboard.json | 7 +++++-- public/language/gl/admin/dashboard.json | 7 +++++-- public/language/he/admin/dashboard.json | 7 +++++-- public/language/hr/admin/dashboard.json | 7 +++++-- public/language/hu/admin/dashboard.json | 7 +++++-- public/language/hy/admin/dashboard.json | 7 +++++-- public/language/id/admin/dashboard.json | 7 +++++-- public/language/it/admin/dashboard.json | 7 +++++-- public/language/ja/admin/dashboard.json | 7 +++++-- public/language/ko/admin/dashboard.json | 7 +++++-- public/language/lt/admin/dashboard.json | 7 +++++-- public/language/lv/admin/dashboard.json | 7 +++++-- public/language/ms/admin/dashboard.json | 7 +++++-- public/language/nb/admin/dashboard.json | 7 +++++-- public/language/nl/admin/dashboard.json | 7 +++++-- public/language/pl/admin/dashboard.json | 7 +++++-- public/language/pt-BR/admin/dashboard.json | 7 +++++-- public/language/pt-PT/admin/dashboard.json | 7 +++++-- public/language/ro/admin/dashboard.json | 7 +++++-- public/language/ru/admin/dashboard.json | 7 +++++-- public/language/rw/admin/dashboard.json | 7 +++++-- public/language/sc/admin/dashboard.json | 7 +++++-- public/language/sk/admin/dashboard.json | 7 +++++-- public/language/sl/admin/dashboard.json | 7 +++++-- public/language/sq-AL/admin/dashboard.json | 7 +++++-- public/language/sr/admin/dashboard.json | 7 +++++-- public/language/sv/admin/dashboard.json | 7 +++++-- public/language/th/admin/dashboard.json | 7 +++++-- public/language/tr/admin/dashboard.json | 7 +++++-- public/language/uk/admin/dashboard.json | 7 +++++-- public/language/vi/admin/dashboard.json | 7 +++++-- public/language/zh-CN/admin/dashboard.json | 7 +++++-- public/language/zh-TW/admin/dashboard.json | 7 +++++-- 46 files changed, 230 insertions(+), 92 deletions(-) diff --git a/public/language/ar/admin/dashboard.json b/public/language/ar/admin/dashboard.json index a54c39d931..a7fc4c3a66 100644 --- a/public/language/ar/admin/dashboard.json +++ b/public/language/ar/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/bg/admin/dashboard.json b/public/language/bg/admin/dashboard.json index 7a9cc4416c..f75857b87a 100644 --- a/public/language/bg/admin/dashboard.json +++ b/public/language/bg/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Назад към таблото", "details.no-users": "В избрания период не са се регистрирали нови потребители", "details.no-topics": "В избрания период не са публикувани нови теми", - "details.no-searches": "Все още не са правени търсения", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "В избрания период не са отчетени вписвания", "details.logins-static": "NodeBB запазва данни за сесията в продължение на %1 дни, така че в следната таблица могат да се видят само последните активни сесии", - "details.logins-login-time": "Време на вписване" + "details.logins-login-time": "Време на вписване", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/bn/admin/dashboard.json b/public/language/bn/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/bn/admin/dashboard.json +++ b/public/language/bn/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/cs/admin/dashboard.json b/public/language/cs/admin/dashboard.json index 2ca82e2cce..e4747f72f3 100644 --- a/public/language/cs/admin/dashboard.json +++ b/public/language/cs/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/da/admin/dashboard.json b/public/language/da/admin/dashboard.json index 1d7c3df85d..483e1df266 100644 --- a/public/language/da/admin/dashboard.json +++ b/public/language/da/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/de/admin/dashboard.json b/public/language/de/admin/dashboard.json index aa25120bae..a130d5516c 100644 --- a/public/language/de/admin/dashboard.json +++ b/public/language/de/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Zurück zur Übersicht", "details.no-users": "Keine Benutzer sind im gewählten Zeitraum beigetreten", "details.no-topics": "Keine Themen wurden im gewählten Zeitraum beigetreten", - "details.no-searches": "Es wurden noch keine Suchen durchgeführt", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Keine Logins wurden im gewählten Zeitraum festgestellt", "details.logins-static": "NodeBB speichert Sitzungsdaten nur für %1 Tage, deshalb zeigt die untere Tabelle nur die neuesten, aktiven Sitzungen", - "details.logins-login-time": "Anmelde Zeit" + "details.logins-login-time": "Anmelde Zeit", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/el/admin/dashboard.json b/public/language/el/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/el/admin/dashboard.json +++ b/public/language/el/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/en-US/admin/dashboard.json b/public/language/en-US/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/en-US/admin/dashboard.json +++ b/public/language/en-US/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/en-x-pirate/admin/dashboard.json b/public/language/en-x-pirate/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/en-x-pirate/admin/dashboard.json +++ b/public/language/en-x-pirate/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/es/admin/dashboard.json b/public/language/es/admin/dashboard.json index a1d11fab48..e2bf94b664 100644 --- a/public/language/es/admin/dashboard.json +++ b/public/language/es/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/et/admin/dashboard.json b/public/language/et/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/et/admin/dashboard.json +++ b/public/language/et/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/fa-IR/admin/dashboard.json b/public/language/fa-IR/admin/dashboard.json index 7952eee216..cbc081c365 100644 --- a/public/language/fa-IR/admin/dashboard.json +++ b/public/language/fa-IR/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/fi/admin/dashboard.json b/public/language/fi/admin/dashboard.json index 2fa46e3a70..a4b404d80d 100644 --- a/public/language/fi/admin/dashboard.json +++ b/public/language/fi/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Takaisin ohjausnäkymään", "details.no-users": "Ei liittyneitä käyttäjiä valitulla aikavälillä.", "details.no-topics": "Ei luotuja aiheita valitulla aikavälillä.", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Ei sisäänkirjautumisia valitulla aikavälillä.", "details.logins-static": "NodeBB tallettaa istuntotiedot vain %1 päivän ajaksi, joten tämä kuvaaja näyttää vain viimeisimpänä aktiivisena olleet istunnot.", - "details.logins-login-time": "Sisäänkirjautumisaika" + "details.logins-login-time": "Sisäänkirjautumisaika", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/fr/admin/dashboard.json b/public/language/fr/admin/dashboard.json index 7328224f86..8f9540bb23 100644 --- a/public/language/fr/admin/dashboard.json +++ b/public/language/fr/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Retour au Tableau de bord", "details.no-users": "Aucun utilisateur ne s'est joint dans le délai sélectionné", "details.no-topics": "Aucun sujet n'a été publié dans la période sélectionnée", - "details.no-searches": "Aucune recherche n'a encore été effectuée", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Aucune connexion n'a été enregistrée dans le délai sélectionné", "details.logins-static": "NodeBB n'enregistre que les données de session pendant %1 jours, et le tableau ci-dessous n'affichera donc que les dernières sessions actives", - "details.logins-login-time": "Heure de connexion" + "details.logins-login-time": "Heure de connexion", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/gl/admin/dashboard.json b/public/language/gl/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/gl/admin/dashboard.json +++ b/public/language/gl/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/he/admin/dashboard.json b/public/language/he/admin/dashboard.json index 01837acb75..0ced9ad90e 100644 --- a/public/language/he/admin/dashboard.json +++ b/public/language/he/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "חזרה ללוח מחוונים", "details.no-users": "אין משתמש שהצטרף במסגרת הזמן שנבחרה", "details.no-topics": "לא פורסמו נושאים במסגרת הזמן שנבחרה", - "details.no-searches": "עדיין לא בוצעו חיפושים", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "לא נרשמו כניסות במסגרת הזמן שנבחרה", "details.logins-static": "NodeBB שומר נתוני הפעלה עבור %1 ימים בלבד, ולכן טבלה זו תציג רק את הכניסות הפעילות האחרונות", - "details.logins-login-time": "זמן כניסה" + "details.logins-login-time": "זמן כניסה", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/hr/admin/dashboard.json b/public/language/hr/admin/dashboard.json index 8072389569..4d0c5ebb7f 100644 --- a/public/language/hr/admin/dashboard.json +++ b/public/language/hr/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/hu/admin/dashboard.json b/public/language/hu/admin/dashboard.json index e02ccff6de..6b1d291bb5 100644 --- a/public/language/hu/admin/dashboard.json +++ b/public/language/hu/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Vissza a vezérlőpultra", "details.no-users": "Nem csatlakozott egy felhasználó sem a kiválasztott időszakban", "details.no-topics": "Nem voltak új témakörök a kiválasztott időszakban", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Nem volt bejelentkezés a kiválasztott időszakban", "details.logins-static": "A NodeBB csak %1 napig menti a munkamenet adatokat és az alábbi táblázat csak a legutóbbi aktív munkameneteket tartalmazza", - "details.logins-login-time": "Bejelentkezés ideje" + "details.logins-login-time": "Bejelentkezés ideje", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/hy/admin/dashboard.json b/public/language/hy/admin/dashboard.json index 6ea320876a..c617612f5b 100644 --- a/public/language/hy/admin/dashboard.json +++ b/public/language/hy/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Վերադառնալ կառավարման վահանակ", "details.no-users": "Ընտրված ժամկետում ոչ մի օգտատեր չի միացել", "details.no-topics": "Ընտրված ժամկետում ոչ մի թեմա չի տեղադրվել", - "details.no-searches": "Որոնումներ դեռ չեն կատարվել", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Ընտրված ժամկետում մուտքեր չեն գրանցվել", "details.logins-static": "NodeBB-ն պահում է միայն %1 օրվա սեսիայի տվյալները, և այսպիսով, ստորև բերված աղյուսակը ցույց կտա միայն վերջին ակտիվ աշխատաշրջանները", - "details.logins-login-time": "Մուտք գործելու ժամանակը" + "details.logins-login-time": "Մուտք գործելու ժամանակը", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/id/admin/dashboard.json b/public/language/id/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/id/admin/dashboard.json +++ b/public/language/id/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/it/admin/dashboard.json b/public/language/it/admin/dashboard.json index 329c11dd7c..6e26e85ea9 100644 --- a/public/language/it/admin/dashboard.json +++ b/public/language/it/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Torna alla dashboard", "details.no-users": "Nessun utente si è iscritto nell'arco di tempo selezionato", "details.no-topics": "Nessuna discussione è stata postata nell'arco di tempo selezionato", - "details.no-searches": "Nessuna ricerca è ancora stata fatta", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Non sono stati registrati accessi nell'arco di tempo selezionato", "details.logins-static": "NodeBB salva solo i dati di sessione per %1 giorni, quindi la tabella qui sotto mostrerà solo le sessioni attive più recenti", - "details.logins-login-time": "Tempo di accesso" + "details.logins-login-time": "Tempo di accesso", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/ja/admin/dashboard.json b/public/language/ja/admin/dashboard.json index b21cbb4cc2..1f4f26d5b5 100644 --- a/public/language/ja/admin/dashboard.json +++ b/public/language/ja/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/ko/admin/dashboard.json b/public/language/ko/admin/dashboard.json index aee85929ae..87ef63264a 100644 --- a/public/language/ko/admin/dashboard.json +++ b/public/language/ko/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "대시보드로 돌아가기", "details.no-users": "설정한 기간에 가입한 사용자 없음", "details.no-topics": "설정한 기간에 생성된 화제 없음", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "설정한 기간에 로그인 기록 없음", "details.logins-static": "NodeBB는 세션 정보를 %1일 동안만 저장합니다. 따라서 아래의 표는 최근 활성화된 세션 정보만을 표시합니다.", - "details.logins-login-time": "로그인 시점" + "details.logins-login-time": "로그인 시점", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/lt/admin/dashboard.json b/public/language/lt/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/lt/admin/dashboard.json +++ b/public/language/lt/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/lv/admin/dashboard.json b/public/language/lv/admin/dashboard.json index 076694b4ca..dcd2f2a3b0 100644 --- a/public/language/lv/admin/dashboard.json +++ b/public/language/lv/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/ms/admin/dashboard.json b/public/language/ms/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/ms/admin/dashboard.json +++ b/public/language/ms/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/nb/admin/dashboard.json b/public/language/nb/admin/dashboard.json index 112aa9389e..d4d9f0120c 100644 --- a/public/language/nb/admin/dashboard.json +++ b/public/language/nb/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/nl/admin/dashboard.json b/public/language/nl/admin/dashboard.json index 2acaa26a6a..92ad43f428 100644 --- a/public/language/nl/admin/dashboard.json +++ b/public/language/nl/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/pl/admin/dashboard.json b/public/language/pl/admin/dashboard.json index ba2aed1b4d..239a32d6d5 100644 --- a/public/language/pl/admin/dashboard.json +++ b/public/language/pl/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Powrót do Dashboardu", "details.no-users": "Żaden użytkownik nie dołączył w wybranym okresie", "details.no-topics": "Żadne tematy nie zostały opublikowane w wybranym okresie", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Żadne logi nie zostały zapisane w wybranym okresie", "details.logins-static": "NodeBB zapisuje dane sesji tylko na %1 dzień, dlatego tabela poniżej zawierać będzie tylko ostatnią aktywną sesję", - "details.logins-login-time": "Czas logowania" + "details.logins-login-time": "Czas logowania", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/pt-BR/admin/dashboard.json b/public/language/pt-BR/admin/dashboard.json index e59eb05ad1..4489c2538f 100644 --- a/public/language/pt-BR/admin/dashboard.json +++ b/public/language/pt-BR/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "De volta ao Painel", "details.no-users": "Nenhum usuário ingressou dentro do período de tempo selecionado", "details.no-topics": "Nenhum tópico foi postado dentro do período de tempo selecionado", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Nenhum login foi registrado dentro do período de tempo selecionado", "details.logins-static": "O NodeBB só salva os dados da sessão por %1 dias, então esta tabela abaixo mostrará apenas as sessões ativas mais recentemente", - "details.logins-login-time": "Hora de Login" + "details.logins-login-time": "Hora de Login", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/pt-PT/admin/dashboard.json b/public/language/pt-PT/admin/dashboard.json index 9f590b49c2..e06e37b01c 100644 --- a/public/language/pt-PT/admin/dashboard.json +++ b/public/language/pt-PT/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/ro/admin/dashboard.json b/public/language/ro/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/ro/admin/dashboard.json +++ b/public/language/ro/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/ru/admin/dashboard.json b/public/language/ru/admin/dashboard.json index 486da5be1c..55c55fad9e 100644 --- a/public/language/ru/admin/dashboard.json +++ b/public/language/ru/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Вернуться на Панель управления", "details.no-users": "Никто не присоединился за выбранный отрезок времени", "details.no-topics": "Сообщений за выбранный отрезок времени не было", - "details.no-searches": "Поисковых запросов еще не было", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Попыток входа за выбранный отрезок времени не было", "details.logins-static": "NodeBB хранит данные о сессиях за %1 дней, так что таблица ниже покажет только недавние активные сессии", - "details.logins-login-time": "Время входа" + "details.logins-login-time": "Время входа", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/rw/admin/dashboard.json b/public/language/rw/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/rw/admin/dashboard.json +++ b/public/language/rw/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/sc/admin/dashboard.json b/public/language/sc/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/sc/admin/dashboard.json +++ b/public/language/sc/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/sk/admin/dashboard.json b/public/language/sk/admin/dashboard.json index b1c6670e81..d6f67ae224 100644 --- a/public/language/sk/admin/dashboard.json +++ b/public/language/sk/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/sl/admin/dashboard.json b/public/language/sl/admin/dashboard.json index 7b8d329e5c..c67bd6e261 100644 --- a/public/language/sl/admin/dashboard.json +++ b/public/language/sl/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Nazaj na nadzorno ploščo", "details.no-users": "V izbranem časovnem okviru se ni pridružil noben uporabnik", "details.no-topics": "V izbranem časovnem okviru ni bila objavljena nobena tema", - "details.no-searches": "Iskanja še niso bila izvedena", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "V izbranem časovnem okviru ni bila zabeležena nobena prijava", "details.logins-static": "NodeBB shranjuje samo podatke o sejah za %1 dni, zato bo ta spodnja tabela prikazala samo zadnje aktivne seje", - "details.logins-login-time": "Čas prijave" + "details.logins-login-time": "Čas prijave", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/sq-AL/admin/dashboard.json b/public/language/sq-AL/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/sq-AL/admin/dashboard.json +++ b/public/language/sq-AL/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/sr/admin/dashboard.json b/public/language/sr/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/sr/admin/dashboard.json +++ b/public/language/sr/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/sv/admin/dashboard.json b/public/language/sv/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/sv/admin/dashboard.json +++ b/public/language/sv/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/th/admin/dashboard.json b/public/language/th/admin/dashboard.json index 4d39626882..ba945e281a 100644 --- a/public/language/th/admin/dashboard.json +++ b/public/language/th/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/tr/admin/dashboard.json b/public/language/tr/admin/dashboard.json index f7bdad37b3..3f0621098a 100644 --- a/public/language/tr/admin/dashboard.json +++ b/public/language/tr/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Yönetim Paneline geri dön", "details.no-users": "Seçilen zaman aralığında herhangi bir kullanıcı üye olmadı.", "details.no-topics": "Seçilen zaman aralığında herhangi bir başlık oluşturulmadı. ", - "details.no-searches": "Henüz arama yapılmadı", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Seçilen zaman aralığında herhangi bir giriş yapılmadı.", "details.logins-static": "NodeBB oturum kayıtlarını sadece %1 gün tutar, o nedenle aşağıdaki tablo sadece en yakın aktif oturumları listeler", - "details.logins-login-time": "Giriş zamanı" + "details.logins-login-time": "Giriş zamanı", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/uk/admin/dashboard.json b/public/language/uk/admin/dashboard.json index 62eee08e51..86c84bf851 100644 --- a/public/language/uk/admin/dashboard.json +++ b/public/language/uk/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Back to Dashboard", "details.no-users": "No users have joined within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "Login Time" + "details.logins-login-time": "Login Time", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/vi/admin/dashboard.json b/public/language/vi/admin/dashboard.json index 7ab9f47374..25e9f47c67 100644 --- a/public/language/vi/admin/dashboard.json +++ b/public/language/vi/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "Quay lại Bảng điều khiển", "details.no-users": "Không có người dùng nào tham gia trong khung thời gian đã chọn", "details.no-topics": "Không có chủ đề nào được đăng trong khung thời gian đã chọn", - "details.no-searches": "Chưa có tìm kiếm nào", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "Không có thông tin đăng nhập nào được ghi lại trong khung thời gian đã chọn", "details.logins-static": "NodeBB chỉ lưu dữ liệu phiên trong %1 ngày và do đó, bảng này bên dưới sẽ chỉ hiển thị các phiên hoạt động gần đây nhất", - "details.logins-login-time": "Thời gian đăng nhập" + "details.logins-login-time": "Thời gian đăng nhập", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/zh-CN/admin/dashboard.json b/public/language/zh-CN/admin/dashboard.json index e637d4bd76..0e9cd08181 100644 --- a/public/language/zh-CN/admin/dashboard.json +++ b/public/language/zh-CN/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "返回控制面板", "details.no-users": "选定的时间内没有用户加入", "details.no-topics": "选定的时间内没有发布主题", - "details.no-searches": "目前还没有进行任何搜索", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "选定的时间内没有登录记录", "details.logins-static": "NodeBB只保留%1天登录数据,下列表格显示最近活动的登录。", - "details.logins-login-time": "登录时间" + "details.logins-login-time": "登录时间", + "start": "Start", + "end": "End", + "filter": "Filter" } diff --git a/public/language/zh-TW/admin/dashboard.json b/public/language/zh-TW/admin/dashboard.json index 4b9601493e..01509f41b8 100644 --- a/public/language/zh-TW/admin/dashboard.json +++ b/public/language/zh-TW/admin/dashboard.json @@ -83,8 +83,11 @@ "back-to-dashboard": "回到儀表板", "details.no-users": "沒有使用者有在選定的時間內註冊", "details.no-topics": "沒有新增的主題在選定的時間內", - "details.no-searches": "No searches have been made yet", + "details.no-searches": "No searches have been made within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", - "details.logins-login-time": "登入時間" + "details.logins-login-time": "登入時間", + "start": "Start", + "end": "End", + "filter": "Filter" } From e335d0f6016c76575ed768d6c33130f8ff847b35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 8 Feb 2023 13:22:16 -0500 Subject: [PATCH 09/25] fix: email expiry timestamps emailConfirmExpiry is hours and default is 24 --- src/user/email.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/user/email.js b/src/user/email.js index c6fc3274d4..9b51b43ddd 100644 --- a/src/user/email.js +++ b/src/user/email.js @@ -134,13 +134,13 @@ UserEmail.sendValidationEmail = async function (uid, options) { await UserEmail.expireValidation(uid); await db.set(`confirm:byUid:${uid}`, confirm_code); - await db.pexpire(`confirm:byUid:${uid}`, emailConfirmExpiry * 24 * 60 * 60 * 1000); + await db.pexpire(`confirm:byUid:${uid}`, emailConfirmExpiry * 60 * 60 * 1000); await db.setObject(`confirm:${confirm_code}`, { email: options.email.toLowerCase(), uid: uid, }); - await db.pexpire(`confirm:${confirm_code}`, emailConfirmExpiry * 24 * 60 * 60 * 1000); + await db.pexpire(`confirm:${confirm_code}`, emailConfirmExpiry * 60 * 60 * 1000); winston.verbose(`[user/email] Validation email for uid ${uid} sent to ${options.email}`); events.log({ From 145dcb2fba283e2d4796f75015852d9635a3b3ac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 8 Feb 2023 13:38:46 -0500 Subject: [PATCH 10/25] fix(deps): update dependency esbuild to v0.17.6 (#11266) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index f516122e1a..20edc882f1 100644 --- a/install/package.json +++ b/install/package.json @@ -58,7 +58,7 @@ "csurf": "1.11.0", "daemon": "1.1.0", "diff": "5.1.0", - "esbuild": "0.17.5", + "esbuild": "0.17.6", "express": "4.18.2", "express-session": "1.17.3", "express-useragent": "1.0.15", From 326b92687fa5d2b68cc5f55275c565a43bf6a16e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 8 Feb 2023 17:35:38 -0500 Subject: [PATCH 11/25] fix: show admins/globalmods if content is purged --- src/controllers/mods.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/controllers/mods.js b/src/controllers/mods.js index 3656146652..760c119fbe 100644 --- a/src/controllers/mods.js +++ b/src/controllers/mods.js @@ -132,11 +132,11 @@ modsController.flags.detail = async function (req, res, next) { uids = _.uniq(admins.concat(uids)); } else if (flagData.type === 'post') { const cid = await posts.getCidByPid(flagData.targetId); - if (!cid) { - return []; + uids = _.uniq(admins.concat(globalMods)); + if (cid) { + const modUids = (await privileges.categories.getUidsWithPrivilege([cid], 'moderate'))[0]; + uids = _.uniq(uids.concat(modUids)); } - uids = (await privileges.categories.getUidsWithPrivilege([cid], 'moderate'))[0]; - uids = _.uniq(admins.concat(globalMods).concat(uids)); } const userData = await user.getUsersData(uids); return userData.filter(u => u && u.userslug); From c4b322f4baa3b6cc3b00dd818d3b14df91ea3431 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Thu, 9 Feb 2023 09:18:05 +0000 Subject: [PATCH 12/25] Latest translations and fallbacks --- public/language/bg/admin/dashboard.json | 8 ++++---- public/language/it/admin/dashboard.json | 8 ++++---- public/language/it/error.json | 8 ++++---- public/language/it/post-queue.json | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/public/language/bg/admin/dashboard.json b/public/language/bg/admin/dashboard.json index f75857b87a..42f8c16d07 100644 --- a/public/language/bg/admin/dashboard.json +++ b/public/language/bg/admin/dashboard.json @@ -83,11 +83,11 @@ "back-to-dashboard": "Назад към таблото", "details.no-users": "В избрания период не са се регистрирали нови потребители", "details.no-topics": "В избрания период не са публикувани нови теми", - "details.no-searches": "No searches have been made within the selected timeframe", + "details.no-searches": "В избрания период не са правени търсения", "details.no-logins": "В избрания период не са отчетени вписвания", "details.logins-static": "NodeBB запазва данни за сесията в продължение на %1 дни, така че в следната таблица могат да се видят само последните активни сесии", "details.logins-login-time": "Време на вписване", - "start": "Start", - "end": "End", - "filter": "Filter" + "start": "Начало", + "end": "Край", + "filter": "Филтриране" } diff --git a/public/language/it/admin/dashboard.json b/public/language/it/admin/dashboard.json index 6e26e85ea9..85e3c0aede 100644 --- a/public/language/it/admin/dashboard.json +++ b/public/language/it/admin/dashboard.json @@ -83,11 +83,11 @@ "back-to-dashboard": "Torna alla dashboard", "details.no-users": "Nessun utente si è iscritto nell'arco di tempo selezionato", "details.no-topics": "Nessuna discussione è stata postata nell'arco di tempo selezionato", - "details.no-searches": "No searches have been made within the selected timeframe", + "details.no-searches": "Non sono state effettuate ricerche nell'arco di tempo selezionato.", "details.no-logins": "Non sono stati registrati accessi nell'arco di tempo selezionato", "details.logins-static": "NodeBB salva solo i dati di sessione per %1 giorni, quindi la tabella qui sotto mostrerà solo le sessioni attive più recenti", "details.logins-login-time": "Tempo di accesso", - "start": "Start", - "end": "End", - "filter": "Filter" + "start": "Inizio", + "end": "Fine", + "filter": "Filtro" } diff --git a/public/language/it/error.json b/public/language/it/error.json index 1eaacde9af..e52ec99cb9 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -62,7 +62,7 @@ "no-user": "L'Utente non esiste", "no-teaser": "Teaser non esiste", "no-flag": "Segnalazione non esiste", - "no-chat-room": "Chat room does not exist", + "no-chat-room": "La stanza chat non esiste", "no-privileges": "Non hai abbastanza privilegi per questa azione.", "category-disabled": "Categoria disabilitata", "topic-locked": "Discussione Bloccata", @@ -157,9 +157,9 @@ "chat-deleted-already": "Il messaggio è già stato eliminato.", "chat-restored-already": "Questo messaggio della chat è già stato ripristinato.", "chat-room-does-not-exist": "La stanza chat non esiste.", - "cant-add-users-to-chat-room": "Can't add users to chat room.", - "cant-remove-users-from-chat-room": "Can't remove users from chat room.", - "chat-room-name-too-long": "Chat room name too long.", + "cant-add-users-to-chat-room": "Impossibile aggiungere utenti alla stanza chat.", + "cant-remove-users-from-chat-room": "Impossibile rimuovere gli utenti dalla stanza chat.", + "chat-room-name-too-long": "Nome della stanza chat troppo lungo.", "already-voting-for-this-post": "Hai già votato per questo post", "reputation-system-disabled": "Il sistema di reputazione è disabilitato.", "downvoting-disabled": "Votata negativamente è disabilitato", diff --git a/public/language/it/post-queue.json b/public/language/it/post-queue.json index 81eed2bea8..df174dd2aa 100644 --- a/public/language/it/post-queue.json +++ b/public/language/it/post-queue.json @@ -1,10 +1,10 @@ { "post-queue": "Coda post", - "no-queued-posts": "There are no posts in the post queue.", - "no-single-post": "The topic or post you are looking for is no longer in the queue. It has likely been approved or deleted already.", - "enabling-help": "To enable this feature, go to Settings → Post → Post Queue and enable Post Queue.", - "back-to-list": "Back to Post Queue", + "no-queued-posts": "Non ci sono post nella coda dei post.", + "no-single-post": "La discussione o il post che si sta cercando non è più in coda. Probabilmente è già stato approvato o cancellato.", + "enabling-help": "Per abilitare questa funzione, vai in Impostazioni → Post → Coda Post e attiva Coda Post.", + "back-to-list": "Torna alla coda dei post", "user": "Utente", "category": "Categoria", "title": "Titolo", From 871ec640f322cf12a7e6904458df331cbbe4b924 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Sat, 11 Feb 2023 09:18:08 +0000 Subject: [PATCH 13/25] Latest translations and fallbacks --- public/language/zh-CN/admin/advanced/cache.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/language/zh-CN/admin/advanced/cache.json b/public/language/zh-CN/admin/advanced/cache.json index e829207158..4f9c161549 100644 --- a/public/language/zh-CN/admin/advanced/cache.json +++ b/public/language/zh-CN/admin/advanced/cache.json @@ -1,8 +1,8 @@ { "post-cache": "帖子缓存", - "group-cache": "Group Cache", - "local-cache": "Local Cache", - "object-cache": "Object Cache", + "group-cache": "用户组缓存", + "local-cache": "本地缓存", + "object-cache": "对象缓存", "percent-full": "%1% 容量", "post-cache-size": "帖子缓存大小", "items-in-cache": "缓存中的条目数量" From 98395d1833e2e523d2a4a1237e0e36e89dcc67cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 Feb 2023 11:09:20 -0500 Subject: [PATCH 14/25] fix(deps): update dependency mongodb to v4.14.0 (#11271) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 20edc882f1..1c7264866f 100644 --- a/install/package.json +++ b/install/package.json @@ -83,7 +83,7 @@ "material-design-lite": "1.3.0", "mime": "3.0.0", "mkdirp": "2.1.3", - "mongodb": "4.13.0", + "mongodb": "4.14.0", "morgan": "1.10.0", "mousetrap": "1.6.5", "multiparty": "4.2.3", From 7abcf80a55bf9546692698b3d9aa6a9a1f7644e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 11 Feb 2023 11:10:02 -0500 Subject: [PATCH 15/25] fix(deps): update dependency @socket.io/redis-adapter to v8.1.0 (#11269) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 1c7264866f..12bd4ddfa1 100644 --- a/install/package.json +++ b/install/package.json @@ -127,7 +127,7 @@ "slideout": "1.0.1", "socket.io": "4.5.4", "socket.io-client": "4.5.4", - "@socket.io/redis-adapter": "8.0.1", + "@socket.io/redis-adapter": "8.1.0", "sortablejs": "1.15.0", "spdx-license-list": "6.6.0", "spider-detector": "2.0.0", From 24bc4809b8785a00e8427c285f380ae762e79608 Mon Sep 17 00:00:00 2001 From: Misty Release Bot Date: Sun, 12 Feb 2023 09:17:53 +0000 Subject: [PATCH 16/25] Latest translations and fallbacks --- .../language/zh-CN/admin/advanced/events.json | 2 +- .../zh-CN/admin/appearance/customise.json | 2 +- .../zh-CN/admin/appearance/themes.json | 2 +- public/language/zh-CN/admin/dashboard.json | 12 ++-- .../zh-CN/admin/development/info.json | 12 ++-- .../language/zh-CN/admin/extend/plugins.json | 2 +- .../zh-CN/admin/manage/categories.json | 8 +-- .../language/zh-CN/admin/manage/digest.json | 2 +- .../language/zh-CN/admin/manage/groups.json | 2 +- .../zh-CN/admin/manage/privileges.json | 16 ++--- .../zh-CN/admin/manage/registration.json | 2 +- public/language/zh-CN/admin/manage/users.json | 36 +++++----- public/language/zh-CN/admin/menu.json | 4 +- .../zh-CN/admin/settings/advanced.json | 10 +-- .../language/zh-CN/admin/settings/email.json | 12 ++-- .../zh-CN/admin/settings/general.json | 6 +- .../language/zh-CN/admin/settings/group.json | 2 +- .../zh-CN/admin/settings/navigation.json | 2 +- .../zh-CN/admin/settings/notifications.json | 2 +- .../language/zh-CN/admin/settings/post.json | 26 +++---- .../zh-CN/admin/settings/reputation.json | 28 ++++---- .../language/zh-CN/admin/settings/tags.json | 2 +- .../zh-CN/admin/settings/uploads.json | 14 ++-- .../language/zh-CN/admin/settings/user.json | 8 +-- public/language/zh-CN/category.json | 4 +- public/language/zh-CN/email.json | 10 +-- public/language/zh-CN/error.json | 68 +++++++++---------- public/language/zh-CN/flags.json | 14 ++-- public/language/zh-CN/global.json | 4 +- public/language/zh-CN/groups.json | 6 +- public/language/zh-CN/ip-blacklist.json | 2 +- public/language/zh-CN/modules.json | 22 +++--- public/language/zh-CN/notifications.json | 10 +-- public/language/zh-CN/pages.json | 6 +- public/language/zh-CN/post-queue.json | 16 ++--- public/language/zh-CN/reset_password.json | 2 +- public/language/zh-CN/success.json | 2 +- public/language/zh-CN/topic.json | 44 ++++++------ public/language/zh-CN/uploads.json | 2 +- public/language/zh-CN/user.json | 30 ++++---- 40 files changed, 228 insertions(+), 228 deletions(-) diff --git a/public/language/zh-CN/admin/advanced/events.json b/public/language/zh-CN/admin/advanced/events.json index 0ca510437f..5067f8925e 100644 --- a/public/language/zh-CN/admin/advanced/events.json +++ b/public/language/zh-CN/admin/advanced/events.json @@ -3,7 +3,7 @@ "no-events": "暂无事件", "control-panel": "事件控制面板", "delete-events": "删除事件", - "confirm-delete-all-events": "您确定要删除所有记录的事件吗?", + "confirm-delete-all-events": "您确定您要删除所有记录的事件吗?", "filters": "过滤器", "filters-apply": "应用过滤器", "filter-type": "事件类型", diff --git a/public/language/zh-CN/admin/appearance/customise.json b/public/language/zh-CN/admin/appearance/customise.json index d4fbc962e8..86973dbe44 100644 --- a/public/language/zh-CN/admin/appearance/customise.json +++ b/public/language/zh-CN/admin/appearance/customise.json @@ -1,6 +1,6 @@ { "custom-css": "自定义 CSS/LESS", - "custom-css.description": "在这里输入您想应用于所有其他风格的 CSS/LESS,", + "custom-css.description": "在这里输入您自己的 CSS/LESS 声明,它们将放在全部其他样式之后。 ", "custom-css.enable": "启用自定义 CSS/LESS", "custom-js": "自定义 Javascript", diff --git a/public/language/zh-CN/admin/appearance/themes.json b/public/language/zh-CN/admin/appearance/themes.json index ae8b579b9a..e50ef99c18 100644 --- a/public/language/zh-CN/admin/appearance/themes.json +++ b/public/language/zh-CN/admin/appearance/themes.json @@ -7,5 +7,5 @@ "revert-confirm": "确认恢复到 NodeBB 默认主题?", "theme-changed": "主题已更改", "revert-success": "已成功恢复到 NodeBB 默认主题。", - "restart-to-activate": "请部署并重启您的 NodeBB 以完全激活主题。" + "restart-to-activate": "请部署并重启您的 NodeBB 以完全激活此主题。" } \ 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 0e9cd08181..71c2747ea3 100644 --- a/public/language/zh-CN/admin/dashboard.json +++ b/public/language/zh-CN/admin/dashboard.json @@ -26,7 +26,7 @@ "updates": "更新", "running-version": "您正在运行 NodeBB v%1 .", "keep-updated": "请确保您已及时更新 NodeBB 以获得最新的安全补丁与 Bug 修复。", - "up-to-date": "

正在使用 最新版本

", + "up-to-date": "

您正在使用 最新版本

", "upgrade-available": "

新的版本 (v%1) 已经发布。建议您 升级 NodeBB

", "prerelease-upgrade-available": "

这是一个已经过期的预发布版本的 NodeBB,新的版本 (v%1) 已经发布。建议您 升级 NodeBB

", "prerelease-warning": "

正在使用测试版 NodeBB。可能会出现意外的 Bug。

", @@ -83,11 +83,11 @@ "back-to-dashboard": "返回控制面板", "details.no-users": "选定的时间内没有用户加入", "details.no-topics": "选定的时间内没有发布主题", - "details.no-searches": "No searches have been made within the selected timeframe", + "details.no-searches": "在选择的时间范围内还没有进行任何搜索", "details.no-logins": "选定的时间内没有登录记录", - "details.logins-static": "NodeBB只保留%1天登录数据,下列表格显示最近活动的登录。", + "details.logins-static": "NodeBB 只保留 %1 天会话数据,下列表格显示最近活动的会话。", "details.logins-login-time": "登录时间", - "start": "Start", - "end": "End", - "filter": "Filter" + "start": "开始", + "end": "结束", + "filter": "过滤器" } diff --git a/public/language/zh-CN/admin/development/info.json b/public/language/zh-CN/admin/development/info.json index 8d4e8b4678..00ceddc309 100644 --- a/public/language/zh-CN/admin/development/info.json +++ b/public/language/zh-CN/admin/development/info.json @@ -1,5 +1,5 @@ { - "you-are-on": "你正使用 %1:%2", + "you-are-on": "您位于 %1:%2", "ip": "IP %1", "nodes-responded": "%1个节点在%2ms内响应!", "host": "主机", @@ -8,11 +8,11 @@ "nodejs": "nodejs", "online": "在线", "git": "git", - "process-memory": "process memory", - "system-memory": "system memory", - "used-memory-process": "Used memory by process", - "used-memory-os": "Used system memory", - "total-memory-os": "Total system memory", + "process-memory": "进程内存", + "system-memory": "系统内存", + "used-memory-process": "进程使用的内存", + "used-memory-os": "已使用系统内存", + "total-memory-os": "全部系统内存", "load": "系统负载", "cpu-usage": "CPU 使用情况", "uptime": "运行时间", diff --git a/public/language/zh-CN/admin/extend/plugins.json b/public/language/zh-CN/admin/extend/plugins.json index 27e29a407f..4ce9db2fd8 100644 --- a/public/language/zh-CN/admin/extend/plugins.json +++ b/public/language/zh-CN/admin/extend/plugins.json @@ -14,7 +14,7 @@ "reorder-plugins": "重新排序插件", "order-active": "排序生效插件", "dev-interested": "有兴趣为 NodeBB 开发插件?", - "docs-info": "有关插件创作的完整文档可以在 NodeBB 文档中找到。", + "docs-info": "有关插件创作的完整文档可以在 NodeBB 文档中找到", "order.description": "部分插件需要在其它插件启用之后才能完美运作。", "order.explanation": "插件将按照以下顺序载入,从上至下。", diff --git a/public/language/zh-CN/admin/manage/categories.json b/public/language/zh-CN/admin/manage/categories.json index aefa5a89b2..07eb9f30ef 100644 --- a/public/language/zh-CN/admin/manage/categories.json +++ b/public/language/zh-CN/admin/manage/categories.json @@ -19,7 +19,7 @@ "category-image": "版块图片", "parent-category": "父版块", "optional-parent-category": "(可选)父版块", - "top-level": "Top Level", + "top-level": "顶层", "parent-category-none": "(无)", "copy-parent": "复制 父类", "copy-settings": "复制设置", @@ -38,7 +38,7 @@ "select-category": "选择版块", "set-parent-category": "设置父版块", - "privileges.description": "您可以在此面板中为站点的某些部分配置访问控制权。可以分别为每个用户或每个用户组授予权限。从下方的下拉列表中选择作用域名。", + "privileges.description": "您可以在此区域中为站点的某些部分配置访问控制权。可以分别为每个用户或每个用户组授予权限。从下方的下拉列表中选择作用域名。", "privileges.category-selector": "为该版块配置权限:", "privileges.warning": "注意:权限设置会立即生效。 调整这些设置后,无需保存。", "privileges.section-viewing": "查看权限", @@ -50,8 +50,8 @@ "privileges.no-users": "此版块中没有用户特定的权限。", "privileges.section-group": "群组", "privileges.group-private": "这个群组是私密的", - "privileges.inheritance-exception": "This group does not inherit privileges from registered-users group", - "privileges.banned-user-inheritance": "Banned users inherit privileges from banned-users group", + "privileges.inheritance-exception": "此用户组不从 registered-users 用户组重继承权限", + "privileges.banned-user-inheritance": "被封禁的用户从 banned-users 用户组中继承权限", "privileges.search-group": "添加群组", "privileges.copy-to-children": "复制到子版块", "privileges.copy-from-category": "从版块复制", diff --git a/public/language/zh-CN/admin/manage/digest.json b/public/language/zh-CN/admin/manage/digest.json index 3621e92cff..5af773f596 100644 --- a/public/language/zh-CN/admin/manage/digest.json +++ b/public/language/zh-CN/admin/manage/digest.json @@ -13,7 +13,7 @@ "resent-single": "摘要重发操作完成", "resent-day": "已发送每日摘要", "resent-week": "已发送每周摘要", - "resent-biweek": "Bi-Weekly digest resent", + "resent-biweek": "两周摘要已重新发送", "resent-month": "已发送每月摘要", "null": "从不", "manual-run": "手动运行摘要:", diff --git a/public/language/zh-CN/admin/manage/groups.json b/public/language/zh-CN/admin/manage/groups.json index 47d484a769..f35a0c6bc9 100644 --- a/public/language/zh-CN/admin/manage/groups.json +++ b/public/language/zh-CN/admin/manage/groups.json @@ -17,7 +17,7 @@ "create-button": "创建", "alerts.create-failure": "哦不!

创建您的群组时出现问题。 请稍后再试!

", - "alerts.confirm-delete": "您确定要删除此群组吗?", + "alerts.confirm-delete": "您确定您要删除此用户组吗?", "edit.name": "名称", "edit.description": "描述", diff --git a/public/language/zh-CN/admin/manage/privileges.json b/public/language/zh-CN/admin/manage/privileges.json index 6d8ecd6549..1213613c4f 100644 --- a/public/language/zh-CN/admin/manage/privileges.json +++ b/public/language/zh-CN/admin/manage/privileges.json @@ -41,24 +41,24 @@ "admin-categories": "版块", "admin-privileges": "权限", "admin-users": "用户", - "admin-admins-mods": "Admins & Mods", + "admin-admins-mods": "管理员和版主", "admin-groups": "群组", "admin-tags": "标签", "admin-settings": "设置", "alert.confirm-moderate": "您确定要将审核权限授予此用户组吗?此用户组是公开的,任何用户都可以随意加入。", - "alert.confirm-admins-mods": "Are you sure you wish to grant the "Admins & Mods" privilege to this user/group? Users with this privilege are able to promote and demote other users into privileged positions, including super administrator", + "alert.confirm-admins-mods": "您确定您想要给予“管理员和版主”权限给此用户/用户组吗?有此权限的用户能够让其他用户升职或降职到特权位置,包括超级管理员", "alert.confirm-save": "请验证您保存这些权限的目的", "alert.saved": "权限修改已保存并应用", "alert.confirm-discard": "您确定要取消权限修改吗?", "alert.discarded": "权限修改已被丢弃", - "alert.confirm-copyToAll": "Are you sure you wish to apply this set of %1 to all categories?", - "alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's set of %1 to all categories?", - "alert.confirm-copyToChildren": "Are you sure you wish to apply this set of %1 to all descendant (child) categories?", - "alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's set of %1 to all descendant (child) categories?", + "alert.confirm-copyToAll": "您确定您要将此设置%1应用到全部版块?", + "alert.confirm-copyToAllGroup": "您确定您要将此用户组的设置%1应用到全部版块?", + "alert.confirm-copyToChildren": "您确定您要将此设置%1应用到全部后代(子)版块?", + "alert.confirm-copyToChildrenGroup": "您确定您要将此用户组的设置%1应用到全部后代(子)版块?", "alert.no-undo": "此操作无法撤消。", "alert.admin-warning": "管理员隐性获得全部权限", "alert.copyPrivilegesFrom-title": "选择一个用于复制的版块", - "alert.copyPrivilegesFrom-warning": "This will copy %1 from the selected category.", - "alert.copyPrivilegesFromGroup-warning": "This will copy this group's set of %1 from the selected category." + "alert.copyPrivilegesFrom-warning": "这会从选择的版块中复制 %1。", + "alert.copyPrivilegesFromGroup-warning": "这会从选择的版块复制到此用户组的设置%1。" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/manage/registration.json b/public/language/zh-CN/admin/manage/registration.json index fa2e26c5be..ab3440276f 100644 --- a/public/language/zh-CN/admin/manage/registration.json +++ b/public/language/zh-CN/admin/manage/registration.json @@ -11,7 +11,7 @@ "list.ip-spam": "频率:%1 显示: %2", "invitations": "邀请", - "invitations.description": "下面列出了所有已发送的邀请。您可以使用 Ctrl+F 快捷键搜索列表中的邮箱地址或用户名。

如果用户接受了邀请,他的用户名将会被显示在邮箱右边。", + "invitations.description": "下面列出了所有已发送的邀请。您可以使用 Ctrl+F 快捷键搜索列表中的邮箱或用户名。

如果用户接受了邀请,他的用户名将会被显示在邮箱右边。", "invitations.inviter-username": "邀请人用户名", "invitations.invitee-email": "受邀请的电子邮箱", "invitations.invitee-username": "受邀请的用户名(如果已经注册)", diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json index 49b2421d80..3b47528c38 100644 --- a/public/language/zh-CN/admin/manage/users.json +++ b/public/language/zh-CN/admin/manage/users.json @@ -10,7 +10,7 @@ "ban": "封禁用户", "temp-ban": "暂时封禁用户", "unban": "解禁用户", - "reset-lockout": "重设闭锁", + "reset-lockout": "重设锁定", "reset-flags": "重设举报", "delete": "删除用户", "delete-content": "删除用户内容", @@ -31,8 +31,8 @@ "250-per-page": "每页250", "500-per-page": "每页500", - "search.uid": "通过用户ID", - "search.uid-placeholder": "搜索用户ID", + "search.uid": "通过用户 ID", + "search.uid-placeholder": "输入用户 ID 以搜索", "search.username": "通过用户名", "search.username-placeholder": "输入您想查询的用户名", "search.email": "通过邮箱", @@ -48,7 +48,7 @@ "users.uid": "UID", "users.username": "用户名", "users.email": "电子邮件", - "users.no-email": "(no email)", + "users.no-email": "(没有邮箱)", "users.ip": "IP", "users.postcount": "发帖数", "users.reputation": "声望", @@ -64,12 +64,12 @@ "create.password-confirm": "确认密码", "temp-ban.length": "时长", - "temp-ban.reason": "理由(可选)", + "temp-ban.reason": "理由(可选) ", "temp-ban.hours": "小时", "temp-ban.days": "天", "temp-ban.explanation": "输入封禁时长。提示,时长为0视为永久封禁。", - "alerts.confirm-ban": "您确定要永久封禁该用户吗?", + "alerts.confirm-ban": "您真的想要永久封禁该用户吗?", "alerts.confirm-ban-multi": "您确定要永久封禁这些用户吗?", "alerts.ban-success": "用户已封禁!", "alerts.button-ban-x": "封禁 %1 名用户", @@ -77,21 +77,21 @@ "alerts.lockout-reset-success": "锁定已重置!", "alerts.flag-reset-success": "举报已重置!", "alerts.no-remove-yourself-admin": "您无法撤销自己的管理员身份!", - "alerts.make-admin-success": "该用户已成为管理员", - "alerts.confirm-remove-admin": "您确定要删除该管理员?", - "alerts.remove-admin-success": " 该用户不再是管理员", - "alerts.make-global-mod-success": " 该用户已成为管理员", - "alerts.confirm-remove-global-mod": "您确定要删除该全局版主?", - "alerts.remove-global-mod-success": "该用户已不再是管理员", - "alerts.make-moderator-success": " 该用户已成为管理员", - "alerts.confirm-remove-moderator": "您确定要删除该版主?", - "alerts.remove-moderator-success": "该用户已不再是管理员", - "alerts.confirm-validate-email": "您确定要验证这些用户的邮箱地址吗?", + "alerts.make-admin-success": "此用户已成为管理员", + "alerts.confirm-remove-admin": "您确定要删除此管理员?", + "alerts.remove-admin-success": "该用户不再是管理员", + "alerts.make-global-mod-success": "该用户已成为全局版主", + "alerts.confirm-remove-global-mod": "您真的想要删除此全局版主?", + "alerts.remove-global-mod-success": "此用户已不再是全局版主。", + "alerts.make-moderator-success": "该用户已成为全局版主", + "alerts.confirm-remove-moderator": "您真的想要删除此版主?", + "alerts.remove-moderator-success": "此用户已不再是版主。", + "alerts.confirm-validate-email": "您确定要认可这些用户的邮箱地址吗?", "alerts.confirm-force-password-reset": "你确定您想要向这个(这些)用户强制密码重置并退出吗?", "alerts.validate-email-success": "电子邮箱已验证", "alerts.validate-force-password-reset-success": "用户密码已经被重置,现存的会话已经被移除", "alerts.password-reset-confirm": "您确定要向这些用户发送密码重置邮件吗?", - "alerts.password-reset-email-sent": "Password reset email sent.", + "alerts.password-reset-email-sent": "密码重置邮件已发送", "alerts.confirm-delete": "警告!

您确定要删除这些用户吗?

该操作不可逆转!该操作只会删除用户账号,他们的帖子与主题仍会保留。

", "alerts.delete-success": "用户已删除!", "alerts.confirm-delete-content": "警告!

您确定要删除这些用户内容吗?

该操作不可逆转!用户账号会被保留,但是用户的帖子和主题将会被删除。

", @@ -107,6 +107,6 @@ "alerts.prompt-email": "邮件:", "alerts.email-sent-to": "已发送邀请给 %1", "alerts.x-users-found": "找到 %1 位用户(耗时 %2 秒)", - "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.", + "export-users-started": "导出用户为 csv,这可能需要一些时间。当导出完成时你会收到通知。", "export-users-completed": "用户列表已被导出为 CSV 文件,点击以下载。" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/menu.json b/public/language/zh-CN/admin/menu.json index 2e456615c0..f16645b71d 100644 --- a/public/language/zh-CN/admin/menu.json +++ b/public/language/zh-CN/admin/menu.json @@ -4,7 +4,7 @@ "dashboard/logins": "登录", "dashboard/users": "用户", "dashboard/topics": "主题", - "dashboard/searches": "Searches", + "dashboard/searches": "搜索", "section-general": "基本", "section-manage": "管理", @@ -14,7 +14,7 @@ "manage/users": "用户", "manage/admins-mods": "权限分配", "manage/registration": "注册申请", - "manage/post-queue": "提交列表", + "manage/post-queue": "发帖队列", "manage/groups": "群组", "manage/ip-blacklist": "IP 黑名单", "manage/uploads": "上传", diff --git a/public/language/zh-CN/admin/settings/advanced.json b/public/language/zh-CN/admin/settings/advanced.json index 45a12d552a..56e2b49c18 100644 --- a/public/language/zh-CN/admin/settings/advanced.json +++ b/public/language/zh-CN/admin/settings/advanced.json @@ -3,7 +3,7 @@ "maintenance-mode.help": "当论坛处在维护模式时,所有请求将被重定向到一个静态页面。管理员不受重定向限制,并可正常访问站点。", "maintenance-mode.status": "维护模式状态码", "maintenance-mode.message": "维护消息", - "maintenance-mode.groups-exempt-from-maintenance-mode": "Select groups that should be exempt from maintenance mode", + "maintenance-mode.groups-exempt-from-maintenance-mode": "选择从维护模式中豁免的用户组", "headers": "标题", "headers.allow-from": "设置 ALLOW-FROM 来放置 NodeBB 于 iFrame 中", "headers.csp-frame-ancestors": "设置 Content-Security-Policy frame-ancestors 响应头来将 NodeBB 置于 iFrame 中", @@ -17,11 +17,11 @@ "headers.acam": "Access-Control-Allow-Methods", "headers.acah": "Access-Control-Allow-Headers", "headers.coep": "Cross-Origin-Embedder-Policy", - "headers.coep-help": "When enabled (default), will set the header to require-corp", + "headers.coep-help": "启用时(默认),将设置这个标头为 require-corp", "headers.coop": "Cross-Origin-Opener-Policy", "headers.corp": "Cross-Origin-Resource-Policy", "headers.permissions-policy": "Permissions-Policy", - "headers.permissions-policy-help": "Allows setting permissions policy header, for example \"geolocation=*, camera=()\", see this for more info.", + "headers.permissions-policy-help": "可以设置 Permissions-Policy 标头,例如 \"geolocation=*, camera=()\",更多信息见此链接", "hsts": "严格安全传输(HSTS)", "hsts.enabled": "启用HSTS(推荐)", "hsts.maxAge": "HSTS Max Age", @@ -43,8 +43,8 @@ "analytics.settings": "分析设置", "analytics.max-cache": "分析缓存最大值", - "analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)", + "analytics.max-cache-help": "在大流量的服务器中,如果同时活跃的用户比这个缓存最大值要多,缓存可能会被持续耗尽。(需要重新启动)", "compression.settings": "压缩设置", "compression.enable": "启用压缩", - "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." + "compression.help": "此设置启用 gzip 压缩。对大流量的生产环境网站,最佳的启用压缩的方法是在反向代理中实现。您可以出于测试目的启用这个设置。" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/email.json b/public/language/zh-CN/admin/settings/email.json index 4d6570a579..96eac85cae 100644 --- a/public/language/zh-CN/admin/settings/email.json +++ b/public/language/zh-CN/admin/settings/email.json @@ -5,8 +5,8 @@ "from": "发送者", "from-help": "用于邮件中显示的发送者", - "confirmation-settings": "Confirmation", - "confirmation.expiry": "Hours to keep email confirmation link valid", + "confirmation-settings": "确认", + "confirmation.expiry": "验证邮件链接有效的小时数", "smtp-transport": "SMTP 通信", "smtp-transport.enabled": "启用 SMTP 通信", @@ -14,9 +14,9 @@ "smtp-transport.service": "选择服务", "smtp-transport.service-custom": "自定义", "smtp-transport.service-help": "Select a service name above in order to use the known information about it. Alternatively, select "Custom Service" and enter the details below.", - "smtp-transport.gmail-warning1": "If you are using GMail as your email provider, you will have to generate an "App Password" in order for NodeBB to authenticate successfully. You can generate one at the App Passwords page.", - "smtp-transport.gmail-warning2": "For more information about this workaround, please consult this NodeMailer article on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. Browse available plugins here.", - "smtp-transport.auto-enable-toast": "It looks like you're configuring an SMTP transport. We enabled the \"SMTP Transport\" option for you.", + "smtp-transport.gmail-warning1": "如果您使用 GMail 作为您的邮件提供商,您需要生成一个“App 密码”让 NodeBB 可以正常鉴权。您可以在App 密码页生成一个。", + "smtp-transport.gmail-warning2": "对此替代办法的更多信息,请查阅关于此问题的NodeMailer 文章。一个替代方法可能是使用一种第三方的邮件插件,例如 SendGrid,Mailgun,等等。在此浏览可用的插件。", + "smtp-transport.auto-enable-toast": "您似乎在配置一个 SMTP 通信。我们为您启用了 “SMTP 通信” 选项。", "smtp-transport.host": "SMTP 主机名", "smtp-transport.port": "SMTP 端口", "smtp-transport.security": "连接安全设置", @@ -45,7 +45,7 @@ "require-email-address-warning": "默认情况下,用户可以通过将该字段留空来选择不输入电子邮件地址。启用此选项意味着他们必须输入电子邮件地址才能继续注册。它不能确保用户输入真实的电子邮件地址,甚至也不能确保他们拥有该地址。", "send-validation-email": "添加或更改电子邮件时发送验证电子邮件", "include-unverified-emails": "向尚未明验证其电子邮箱的人发送电子邮件", - "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). Enable this setting at your own risk – sending emails to unverified addresses may be a violation of regional anti-spam laws.", + "include-unverified-warning": "默认情况下,账号有邮件地址关联的用户是已核实的用户,但有些情况下不是这样(例如,单点登录,遗留用户等等)。您自行承担启用此设置的风险——发送邮件给未核实的用户可能会违反地区性的反垃圾邮件法律。", "prompt": "提示用户输入或验证他们的电子邮箱地址", "prompt-help": "如果用户没有设置电子邮箱,或者他们的电子邮件未被验证,页面上将会显示警告。", "sendEmailToBanned": "即使用户已被封禁也发送电子邮件" diff --git a/public/language/zh-CN/admin/settings/general.json b/public/language/zh-CN/admin/settings/general.json index 0d85bff4bb..ceb249179d 100644 --- a/public/language/zh-CN/admin/settings/general.json +++ b/public/language/zh-CN/admin/settings/general.json @@ -36,15 +36,15 @@ "outgoing-links": "站外链接", "outgoing-links.warning-page": "使用站外链接警告页", "search": "搜索", - "search-default-in": "Search In", - "search-default-in-quick": "Quick Search In", + "search-default-in": "在此搜索", + "search-default-in-quick": "在此快速搜索", "search-default-sort-by": "排序", "outgoing-links.whitelist": "添加域名到白名单以绕过警告页面", "site-colors": "站点颜色元数据", "theme-color": "主题色", "background-color": "背景色", "background-color-help": "当网站安装为 PWA 时用于启动屏幕背景的颜色", - "undo-timeout": "Undo Timeout", + "undo-timeout": "撤销超时", "undo-timeout-help": "部分操作,例如移动主题,将允许版主在一定时间内撤销其操作。设置为 0 可完全禁用撤消。", "topic-tools": "主题工具" } diff --git a/public/language/zh-CN/admin/settings/group.json b/public/language/zh-CN/admin/settings/group.json index aa4cc8a2d8..b25593e3a4 100644 --- a/public/language/zh-CN/admin/settings/group.json +++ b/public/language/zh-CN/admin/settings/group.json @@ -4,7 +4,7 @@ "private-groups.help": "启用此选项后,加入用户组需要群组所有者审批(默认启用)。", "private-groups.warning": "注意!如果这个选项未启用并且你有私有群组,那么你的群组将变为公共的。", "allow-multiple-badges": "允许多种徽章", - "allow-multiple-badges-help": "启用此选项后,用户可以选择显示多个群组徽章,需要主题支持。", + "allow-multiple-badges-help": "启用此选项后,用户可以选择显示多个用户组徽章,需要主题支持。", "max-name-length": "群组名字的最大长度", "max-title-length": "群组标题最大长度", "cover-image": "群组封面图片", diff --git a/public/language/zh-CN/admin/settings/navigation.json b/public/language/zh-CN/admin/settings/navigation.json index 64a218391a..31cfe8051e 100644 --- a/public/language/zh-CN/admin/settings/navigation.json +++ b/public/language/zh-CN/admin/settings/navigation.json @@ -12,7 +12,7 @@ "groups": "群组:", "open-new-window": "在新窗口中打开", "dropdown": "下拉列表", - "dropdown-placeholder": "Place your dropdown menu items below, ie:
<li><a href="https://myforum.com">Link 1</a></li>", + "dropdown-placeholder": "将您的下拉列表项目放在下方,例如:
<li><a href="https://myforum.com">链接 1</a></li>", "btn.delete": "删除", "btn.disable": "禁用", diff --git a/public/language/zh-CN/admin/settings/notifications.json b/public/language/zh-CN/admin/settings/notifications.json index 147dc97f23..24e65adaf8 100644 --- a/public/language/zh-CN/admin/settings/notifications.json +++ b/public/language/zh-CN/admin/settings/notifications.json @@ -3,5 +3,5 @@ "welcome-notification": "欢迎通知", "welcome-notification-link": "欢迎通知链接", "welcome-notification-uid": "用户欢迎通知 (UID)", - "post-queue-notification-uid": "Post Queue User (UID)" + "post-queue-notification-uid": "发布队列用户(UID)" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/post.json b/public/language/zh-CN/admin/settings/post.json index 261645aec1..14326753ed 100644 --- a/public/language/zh-CN/admin/settings/post.json +++ b/public/language/zh-CN/admin/settings/post.json @@ -6,7 +6,7 @@ "sorting.most-votes": "最多点赞", "sorting.most-posts": "最多回复", "sorting.topic-default": "默认主题排序", - "length": "发帖字数", + "length": "帖子字数", "post-queue": "发帖队列", "restrictions": "发帖限制", "restrictions-new": "新用户限制", @@ -14,27 +14,27 @@ "restrictions.post-queue-rep-threshold": "忽略发帖队列的威望值", "restrictions.groups-exempt-from-post-queue": "选择会被从提交队列豁免的分组", "restrictions-new.post-queue": "启用新用户限制", - "restrictions.post-queue-help": "启用发帖队列会将新用户的发帖放入审核队列", + "restrictions.post-queue-help": "启用发帖队列会将新用户的帖子放入一个队列用于审核", "restrictions-new.post-queue-help": "启用新用户限制将对新用户创建的帖子设置限制", - "restrictions.seconds-between": "发帖间隔时间(秒)", - "restrictions.seconds-between-new": "新用户发帖间隔时间(秒)", - "restrictions.rep-threshold": "取消发帖限制所需的声望值", + "restrictions.seconds-between": "发帖间隔的秒数", + "restrictions.seconds-between-new": "新用户发布帖子间隔的秒数", + "restrictions.rep-threshold": "取消发帖间隔限制所需的声望值", "restrictions.seconds-before-new": "新用户可以在第一次发布之前的秒数", - "restrictions.seconds-edit-after": "帖子保持可编辑的秒数(设置为0表示禁用)", - "restrictions.seconds-delete-after": "帖子保持可删除的秒数(设置为0表示禁用)", + "restrictions.seconds-edit-after": "帖子保持可编辑的秒数(设置为 0 表示禁用)", + "restrictions.seconds-delete-after": "帖子保持可删除的秒数(设置为 0 表示禁用)", "restrictions.replies-no-delete": "在用户被禁止删除自己的主题后的回复数。 (0为禁用) ", "restrictions.min-title-length": "标题字数下限", "restrictions.max-title-length": "标题字数上限", "restrictions.min-post-length": "帖子字数下限", "restrictions.max-post-length": "帖子字数上限", - "restrictions.days-until-stale": "主题过时时间(天)", + "restrictions.days-until-stale": "主题过时的天数", "restrictions.stale-help": "如果某个主题被视为“过时”,则会向尝试回复该主题的用户显示警告。", "timestamp": "时间戳", "timestamp.cut-off": "截止日期(天)", "timestamp.cut-off-help": "日期&时间将以相对方式 (例如,“3小时前” / “5天前”) 显示,并且会依照访客语言时区转换。在某一时刻之后,可以切换该文本以显示本地化日期本身 (例如2016年11月5日15:30) 。
(默认值: 30 或一个月) 。 设置为0可始终显示日期,留空以始终显示相对时间。", "timestamp.necro-threshold": "挖坟警告(单位:天)", "timestamp.necro-threshold-help": "若进行回复的帖子最后回复的时间早于挖坟警告设定的天数,则在尝试回复前显示挖坟警告(默认:7天)。可以设置为 0 来禁用。", - "timestamp.topic-views-interval": "Increment topic views interval (in minutes)", + "timestamp.topic-views-interval": "增加主题访问数量的间隔(以分钟计)", "timestamp.topic-views-interval-help": "根据此设置,主题的访问数量每 X 分钟只增加一次。", "teaser": "预览帖子", "teaser.last-post": "最后– 显示最新的帖子,包括原帖,如果没有回复", @@ -42,7 +42,7 @@ "teaser.first": "第一", "showPostPreviewsOnHover": "鼠标悬停时显示帖子预览", "unread": "未读设置", - "unread.cutoff": "未读截止时间(天)", + "unread.cutoff": "未读截止的天数", "unread.min-track-last": "跟踪最后阅读之前的主题最小帖子", "recent": "最近设置", "recent.max-topics": "/recent 页面的最大主题数", @@ -51,8 +51,8 @@ "signature.disable": "禁用签名", "signature.no-links": "禁用签名中的链接", "signature.no-images": "禁用签名中的图片", - "signature.hide-duplicates": "Hide duplicate signatures in topics", - "signature.max-length": "签名字数上限", + "signature.hide-duplicates": "隐藏主题中重复的签名档", + "signature.max-length": "签名档字数上限", "composer": "编辑器设置", "composer-help": "以下设置控制所示后期编辑器的功能和/或外观\n\t\t\t\t当用户创建新主题或回复现有主题时。", "composer.show-help": "显示“帮助”选项卡", @@ -63,5 +63,5 @@ "backlinks.help": "如果一篇帖子引用了另一个主题,那么一个指向该帖子的链接将在该时间点插入到被引用的主题中。", "ip-tracking": "IP 跟踪", "ip-tracking.each-post": "跟踪每个帖子的 IP 地址", - "enable-post-history": "启用回复历史" + "enable-post-history": "启用帖子历史" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/reputation.json b/public/language/zh-CN/admin/settings/reputation.json index fc8d47bdf0..195bf8fb3e 100644 --- a/public/language/zh-CN/admin/settings/reputation.json +++ b/public/language/zh-CN/admin/settings/reputation.json @@ -1,31 +1,31 @@ { "reputation": "声望设置", - "disable": "禁用 声望系统", + "disable": "禁用声望系统", "disable-down-voting": "禁用 踩", "votes-are-public": "公开所有投票", "thresholds": "操作限制", "min-rep-upvote": "顶帖子 需要的最低声望", "upvotes-per-day": "每天顶的次数(设置为0则表示无限制)", "upvotes-per-user-per-day": "每位用户每天顶的次数(设置为0则表示无限制)", - "min-rep-downvote": "踩帖子 需要的最低声望", + "min-rep-downvote": "踩帖子需要的最低声望", "downvotes-per-day": "每天踩的次数(设置为0则表示无限制)", "downvotes-per-user-per-day": "每位用户每天踩的次数(设置为0则表示无限制)", "min-rep-chat": "发送聊天消息 需要的最低声望", - "min-rep-flag": "举报帖子 需要的最低声望", - "min-rep-website": "添加 个人网站 需要的最低声望", - "min-rep-aboutme": "添加 个人 “关于我”页 需要的最低声望", - "min-rep-signature": "添加 签名档 需要的最低声望", - "min-rep-profile-picture": "添加 个人资料图片 需要的最低声望", + "min-rep-flag": "举报帖子需要的最低声望", + "min-rep-website": "添加“网站”到用户资料需要的最低声望", + "min-rep-aboutme": "添加“关于我”到用户资料需要的最低声望", + "min-rep-signature": "添加“签名档”到用户资料需要的最低声望", + "min-rep-profile-picture": "添加“头像”到用户资料需要的最低声望", "min-rep-cover-picture": "添加 个人封面图片 需要的最低声望", "flags": "举报设置", "flags.limit-per-target": "可以举报某事物的最大次数", "flags.limit-per-target-placeholder": "默认:0", - "flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a "report" and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.", - "flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)", - "flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned", - "flags.action-on-resolve": "Do the following when a flag is resolved", - "flags.action-on-reject": "Do the following when a flag is rejected", - "flags.action.nothing": "Do nothing", - "flags.action.rescind": "Rescind the notification send to moderators/administrators" + "flags.limit-per-target-help": "当一个帖子或用户被举报不止一次时,每个额外的举报会被认为是一个“报告”并附加到原来的举报中。设置此选项为非零的数以限制一个帖子或用户能被举报的次数。", + "flags.auto-flag-on-downvote-threshold": "自动举报帖子的踩的数量(设置为 0 以禁用,默认:0)", + "flags.auto-resolve-on-ban": "当用户被封禁时,自动解决全部此用户提交的举报", + "flags.action-on-resolve": "当举报被解决时做以下事", + "flags.action-on-reject": "当举报被拒绝时做以下事", + "flags.action.nothing": "不做任何事", + "flags.action.rescind": "撤回发送给版主/管理员的通知" } \ No newline at end of file diff --git a/public/language/zh-CN/admin/settings/tags.json b/public/language/zh-CN/admin/settings/tags.json index 43ac39d1e6..3f1afb0726 100644 --- a/public/language/zh-CN/admin/settings/tags.json +++ b/public/language/zh-CN/admin/settings/tags.json @@ -2,7 +2,7 @@ "tag": "标签设置", "link-to-manage": "管理标签", "system-tags": "系统标签", - "system-tags-help": "Only privileged users will be able to use these tags.", + "system-tags-help": "只有特权用户可以使用这些标签。", "min-per-topic": "每个主题的最少标签数", "max-per-topic": "每个主题的最多标签数", "min-length": "标签名称最小长度", diff --git a/public/language/zh-CN/admin/settings/uploads.json b/public/language/zh-CN/admin/settings/uploads.json index 61f6db6d3b..ad8b3648fc 100644 --- a/public/language/zh-CN/admin/settings/uploads.json +++ b/public/language/zh-CN/admin/settings/uploads.json @@ -1,11 +1,11 @@ { "posts": "帖子", - "orphans": "Orphaned Files", + "orphans": "未使用的文件", "private": "使上传的文件私有化", "strip-exif-data": "去除 EXIF 数据", - "preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged", - "orphanExpiryDays": "Days to keep orphaned files", - "orphanExpiryDays-help": "After this many days, orphaned uploads will be deleted from the file system.
Set 0 or leave blank to disable.", + "preserve-orphaned-uploads": "当一个帖子被清除后保留上传的文件", + "orphanExpiryDays": "保存未使用文件的天数", + "orphanExpiryDays-help": "在这么多天后,未使用的上传会从文件系统中被删除。
设置 0 或留白以禁用。", "private-extensions": "自定义文件扩展名", "private-uploads-extensions-help": "在此处输入以逗号分隔的文件扩展名列表 (例如 pdf,xls,doc )并将其用于自定义。为空则表示允许所有扩展名。", "resize-image-width-threshold": "如果图像宽度超过指定大小,则对图像进行缩放", @@ -24,9 +24,9 @@ "topic-thumb-size": "主题缩略图大小", "allowed-file-extensions": "允许的文件扩展名", "allowed-file-extensions-help": "在此处输入以逗号分隔的文件扩展名列表 (例如 pdf,xls,doc )。 为空则表示允许所有扩展名。", - "upload-limit-threshold": "Rate limit user uploads to:", - "upload-limit-threshold-per-minute": "Per %1 Minute", - "upload-limit-threshold-per-minutes": "Per %1 Minutes", + "upload-limit-threshold": "限制用户上传次数为:", + "upload-limit-threshold-per-minute": "每 %1 分钟", + "upload-limit-threshold-per-minutes": "每 %1 分钟", "profile-avatars": "个人头像", "allow-profile-image-uploads": "允许用户上传个人资料照片", "convert-profile-image-png": "转换个人资料图片为 PNG", diff --git a/public/language/zh-CN/admin/settings/user.json b/public/language/zh-CN/admin/settings/user.json index 1e88ee08c0..419ee8c7b7 100644 --- a/public/language/zh-CN/admin/settings/user.json +++ b/public/language/zh-CN/admin/settings/user.json @@ -1,7 +1,7 @@ { "authentication": "验证", "email-confirm-interval": "用户无法重新发送电子邮箱激活直到", - "email-confirm-interval2": "minutes have elapsed", + "email-confirm-interval2": "已过去的分钟数", "allow-login-with": "允许使用何种登录名", "allow-login-with.username-email": "用户名或者邮箱", "allow-login-with.username": "仅限用户名", @@ -29,8 +29,8 @@ "session-time-days": "天", "session-time-seconds": "秒", "session-time-help": "这些值将用于控制用户在登录时选中"记住我"后能够保持登录的时长。注意以下数值中只有一个将被使用。若值为空我们将回退使用。若值为空我们将使用默认值14天。", - "session-duration": "Session length if \"Remember Me\" is not checked (seconds)", - "session-duration-help": "By default — or if set to 0 — a user will stay logged in for the duration of the session (e.g. however long the browser window/tab remains open). Set this value to explicitly invalidate the session after the specified number of seconds.", + "session-duration": "当“保持登录信息”没有被勾选时的会话长度(秒)", + "session-duration-help": "默认情况——或设为0——用户会在会话期间保持登陆(例如,不论浏览器窗口/标签页保持开启的时间)。设置此值以明确让会话在详述的秒数后无效。", "online-cutoff": "分钟后认为用户已离线", "online-cutoff-help": "若用户在此时间后未作出任何动作,他们将被视为不活跃状态且不会收到实时更新。", "registration": "用户注册", @@ -71,7 +71,7 @@ "digest-freq.off": "关闭", "digest-freq.daily": "每日", "digest-freq.weekly": "每周", - "digest-freq.biweekly": "Bi-Weekly", + "digest-freq.biweekly": "两周", "digest-freq.monthly": "每月", "email-chat-notifs": "当我不在线并收到新的聊天消息时,给我发送邮件通知", "email-post-notif": "当我订阅的主题有新回复时,给我发送邮件通知", diff --git a/public/language/zh-CN/category.json b/public/language/zh-CN/category.json index e9c577f68c..1f8cd4152b 100644 --- a/public/language/zh-CN/category.json +++ b/public/language/zh-CN/category.json @@ -2,7 +2,7 @@ "category": "版块", "subcategories": "子版块", "new_topic_button": "发表主题", - "guest-login-post": "登录以发表", + "guest-login-post": "登录以发布", "no_topics": "此版块还没有任何内容。
赶紧来发帖吧!", "browsing": "正在浏览", "no_replies": "尚无回复", @@ -19,5 +19,5 @@ "notwatching.message": "您未关注了此版块和全部子版块的动态。", "ignoring.message": "您未关注此版块和全部子版块的动态。", "watched-categories": "已关注的版块", - "x-more-categories": "%1 more categories" + "x-more-categories": "还有 %1 个版块" } \ No newline at end of file diff --git a/public/language/zh-CN/email.json b/public/language/zh-CN/email.json index 2da71ec95d..d4d5e1fc8e 100644 --- a/public/language/zh-CN/email.json +++ b/public/language/zh-CN/email.json @@ -6,8 +6,8 @@ "greeting_no_name": "您好", "greeting_with_name": "%1,您好", "email.verify-your-email.subject": "请验证你的电子邮箱", - "email.verify.text1": "You've requested that we change or confirm your email address", - "email.verify.text2": "For security purposes, we only change or confirm the email address on file once its ownership has been confirmed via email. If you did not request this, no action is required on your part.", + "email.verify.text1": "您已要求我们更改或确认您的邮件地址", + "email.verify.text2": "为了安全起见,我们只会在通过邮件验证邮件地址所有权以后才会更改存档的邮件地址。假如您没有提出过此请求,您不用进行任何操作。", "email.verify.text3": "一旦您验证了此电子邮箱地址,我们将会把您当前的电子邮箱地址替换为此电子邮箱地址(%1)。", "welcome.text1": "感谢您注册 %1 帐户!", "welcome.text2": "在您验证您绑定的邮箱地址之后,您的账户才能激活。", @@ -16,7 +16,7 @@ "invitation.text1": "%1 邀请您加入 %2", "invitation.text2": "您的邀请将在 %1 天后过期。", "invitation.cta": "点击这里新建账号", - "reset.text1": "很可能是您忘记了密码,我们收到了重置您帐户密码的申请。 如果您没有申请密码重置,请忽略这封邮件。", + "reset.text1": "很可能是您忘记了密码,我们收到了重置您帐户密码的请求。 如果不是这个情况,请忽略此邮件。", "reset.text2": "如需继续重置密码,请点击下面的链接:", "reset.cta": "点击这里重置您的密码", "reset.notify.subject": "更改密码成功", @@ -49,9 +49,9 @@ "unsubscribe": "退订", "unsub.success": "您将不再收到来自%1邮寄名单的邮件", "unsub.failure.title": "无法取消订阅", - "unsub.failure.message": "Unfortunately, we were not able to unsubscribe you from the mailing list, as there was an issue with the link. However, you can alter your email preferences by going to your user settings.

(error: %1)", + "unsub.failure.message": "很不幸,我们不能将您从邮件列表里取消订阅,因为这个链接有问题。不过,您可以到您的用户设置里修改邮件偏好。

(错误:%1)", "banned.subject": "您在 %1 的账户已被封禁", - "banned.text1": "您在 %2 的账户 %1 已被封禁。", + "banned.text1": "您在 %2 的用户 %1 已被封禁。", "banned.text2": "本次封禁将在 %1 结束。", "banned.text3": "这是您被封禁的原因:", "closing": "谢谢!" diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json index b187eba154..57f7a4987b 100644 --- a/public/language/zh-CN/error.json +++ b/public/language/zh-CN/error.json @@ -1,8 +1,8 @@ { "invalid-data": "无效数据", "invalid-json": "无效 JSON", - "wrong-parameter-type": "A value of type %3 was expected for property `%1`, but %2 was received instead", - "required-parameters-missing": "Required parameters were missing from this API call: %1", + "wrong-parameter-type": "属性 `%1` 要求是类型 %3 的值,却收到了 %2", + "required-parameters-missing": "此 API 调用必需参数缺少了:%1", "not-logged-in": "您还没有登录。", "account-locked": "您的帐号已被临时锁定", "search-requires-login": "搜索功能仅限会员使用 - 请先登录或者注册。", @@ -11,7 +11,7 @@ "invalid-tid": "无效主题 ID", "invalid-pid": "无效帖子 ID", "invalid-uid": "无效用户 ID", - "invalid-mid": "Invalid Chat Message ID", + "invalid-mid": "无效聊天消息 ID", "invalid-date": "请指定有效的日期", "invalid-username": "无效用户名", "invalid-email": "无效的电子邮箱", @@ -33,13 +33,13 @@ "invalid-pagination-value": "无效的分页数值,必须介于 %1 和 %2 之间", "username-taken": "此用户名已被占用", "email-taken": "此电子邮箱已被占用", - "email-nochange": "The email entered is the same as the email already on file.", + "email-nochange": "输入的邮件地址和已存档的邮件地址相同。", "email-invited": "已通过电子邮件进行邀请", - "email-not-confirmed": "您需要验证您的电子邮箱后才能在版块或主题中发布帖子,请点击此处以发送验证邮件。", + "email-not-confirmed": "您需要验证您的邮箱后才能在版块或主题中发布帖子,请点击此处以发送验证邮件。", "email-not-confirmed-chat": "您的电子邮箱尚未确认,无法聊天,请点击这里确认您的电子邮箱。", - "email-not-confirmed-email-sent": "您的电子邮件账户尚未验证,请检查您的收件箱。在电子邮件帐户被验证前,您不能发帖和聊天。", + "email-not-confirmed-email-sent": "您的邮箱尚未验证,请检查您的收件箱以找到验证邮件。在您的邮箱被验证前,您可能不能在某些版块发布帖子或进行聊天。", "no-email-to-confirm": "您的账号未设置电子邮箱。对于找回账号、聊天以及在版块中发布帖子这几项操作,电子邮箱是必需的。请点击此处输入电子邮箱。", - "user-doesnt-have-email": "User \"%1\" does not have an email set.", + "user-doesnt-have-email": "用户“%1”还没有设置邮箱。", "email-confirm-failed": "我们无法确认您的电子邮箱,请重试", "confirm-email-already-sent": "确认邮件已发出,如需重新发送请等待 %1 分钟后再试。", "sendmail-not-found": "无法找到 sendmail 可执行程序,请确保 sendmail 已经安装并可被运行 NodeBB 的用户执行", @@ -51,7 +51,7 @@ "reset-same-password": "新的密码不能与当前使用的相同", "user-banned": "用户已禁止", "user-banned-reason": "抱歉,此帐号已经被封禁 (原因:%1)", - "user-banned-reason-until": "抱歉,此帐户已被封禁,直到%1(原因:%2)", + "user-banned-reason-until": "抱歉,此账号已被封禁,直到 %1(原因:%2)", "user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!", "blacklisted-ip": "对不起,您的 IP 地址已被社区禁用。如果您认为这是一个错误,请与管理员联系。", "ban-expiry-missing": "请提供此次禁言结束日期", @@ -61,12 +61,12 @@ "no-group": "群组不存在", "no-user": "用户不存在", "no-teaser": "主题预览不存在", - "no-flag": "Flag does not exist", + "no-flag": "举报不存在", "no-chat-room": "聊天室不存在", "no-privileges": "您没有权限执行此操作。", "category-disabled": "版块已禁用", "topic-locked": "主题已锁定", - "post-edit-duration-expired": "您只能在发表后 %1 秒内修改内容", + "post-edit-duration-expired": "您只能在发布后 %1 秒内编辑帖子", "post-edit-duration-expired-minutes": "您只能在发表后 %1 分钟内修改内容", "post-edit-duration-expired-minutes-seconds": "您只能在发表后 %1 分 %2 秒内修改内容", "post-edit-duration-expired-hours": "您只能在发表后 %1 小时后内修改内容", @@ -89,9 +89,9 @@ "category-not-selected": "未选择版块。", "too-many-posts": "发帖需要间隔 %1 秒以上 - 请稍候再发帖", "too-many-posts-newbie": "因为您是新用户,所以限制每隔 %1 秒才能发帖一次,直到您有 %2 点声望为止 —— 请稍候再发帖", - "already-posting": "You are already posting", - "tag-too-short": "标签太短,不能少于 %1 个字符", - "tag-too-long": "标签太长,不能超过 %1 个字符", + "already-posting": "您已在发布帖子", + "tag-too-short": "请输入一个更长的标签。标签应当包含不少于 %1 个字符", + "tag-too-long": "请输入一个更短的标签。标签不能超过 %1 个字符", "not-enough-tags": "没有足够的标签。主题必须至少有 %1 个标签。", "too-many-tags": "标签过多。主题不能拥有超过 %1 个标签。", "cant-use-system-tag": "您不能使用此系统标签。", @@ -103,10 +103,10 @@ "upload-ratelimit-reached": "您在短时间内上传了过多的文件,请稍后再试", "scheduling-to-past": "请选择一个未来的日期。", "invalid-schedule-date": "请输入正确的日期", - "cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.", - "cant-merge-scheduled": "Scheduled topics cannot be merged.", - "cant-move-posts-to-scheduled": "Can't move posts to a scheduled topic.", - "cant-move-from-scheduled-to-existing": "Can't move posts from a scheduled topic to an existing topic.", + "cant-pin-scheduled": "定时主题不能被(取消)置顶。", + "cant-merge-scheduled": "定时主题不能被合并。", + "cant-move-posts-to-scheduled": "不能把帖子移动到定时主题中。", + "cant-move-from-scheduled-to-existing": "不能把定时主题中的帖子移动到已有的主题中。", "already-bookmarked": "您已将此贴存为了书签", "already-unbookmarked": "您已取消了此贴的书签", "cant-ban-other-admins": "您不能封禁其他管理员!", @@ -116,8 +116,8 @@ "cant-make-banned-users-admin": "您不能让被禁止的用户成为管理员。", "cant-remove-last-admin": "您是唯一的管理员。在删除您的管理员权限前,请添加另一个管理员。", "account-deletion-disabled": "账号删除功能已禁用", - "cant-delete-admin": "在删除该账号之前,请先移除其管理权限。", - "already-deleting": "Already deleting", + "cant-delete-admin": "在删除此账号之前,请先移除其管理权限。", + "already-deleting": "已在删除中", "invalid-image": "无效的图片", "invalid-image-type": "无效的图像类型。允许的类型有:%1", "invalid-image-extension": "无效的图像扩展", @@ -149,12 +149,12 @@ "chat-disabled": "聊天系统已关闭", "too-many-messages": "您发送了太多消息,请稍等片刻。", "invalid-chat-message": "无效的聊天信息", - "chat-message-too-long": "聊天消息不能超过 %1  个字符。", + "chat-message-too-long": "聊天消息不能超过 %1 个字符。", "cant-edit-chat-message": "您不能编辑这条信息", "cant-delete-chat-message": "您不允许删除这条消息", "chat-edit-duration-expired": "您只能在发布 %1 秒后修改聊天信息", "chat-delete-duration-expired": "您只能在发布 %1 秒后删除聊天信息", - "chat-deleted-already": "聊天消息已经被删除", + "chat-deleted-already": "此聊天消息已经被删除", "chat-restored-already": "此聊天消息已经恢复。\n", "chat-room-does-not-exist": "聊天室不存在。", "cant-add-users-to-chat-room": "无法添加用户到聊天室。", @@ -176,10 +176,10 @@ "user-already-flagged": "您已举报此用户", "post-flagged-too-many-times": "此贴已被其他用户举报", "user-flagged-too-many-times": "此用户已被其他用户举报", - "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)", + "cant-flag-privileged": "您不能举报特权用户(版主/全局版主/管理员)的内容或资料", "self-vote": "您不能对您自己的帖子投票", "too-many-upvotes-today": "您每天仅可进行 %1 次顶贴", - "too-many-upvotes-today-user": "您每天只能对一个用户点赞 %1 次", + "too-many-upvotes-today-user": "您每天只能对一个用户顶 %1 次", "too-many-downvotes-today": "您每天只能踩 %1 次", "too-many-downvotes-today-user": "您每天只能对一个用户点踩 %1 次", "reload-failed": "刷新 NodeBB 时遇到问题: \"%1\"。NodeBB 保持给已连接的客户端服务,您应该撤销刷新前做的更改。", @@ -187,7 +187,7 @@ "parse-error": "服务器响应解析出错", "wrong-login-type-email": "请输入您的电子邮箱地址登录", "wrong-login-type-username": "请输入您的用户名登录", - "sso-registration-disabled": "已禁用通过 %1 账户的注册, 请使用邮箱地址注册", + "sso-registration-disabled": "已禁用通过 %1 账户的注册,请先使用邮箱地址注册", "sso-multiple-association": "您无法将此服务中的多个账户关联到您的NodeBB账号。请您分离的现有账号并重试。", "invite-maximum-met": "您的邀请人数超出了上限 (%1 超过了 %2)。", "no-session-found": "未登录!", @@ -210,19 +210,19 @@ "no-connection": "您的网络连接似乎存在问题", "socket-reconnect-failed": "目前无法连接到服务器。请点击这里重试,或稍后再试", "plugin-not-whitelisted": "无法安装插件 – 只有被NodeBB包管理器列入白名单的插件才能通过ACP安装。", - "plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.", - "theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP", - "topic-event-unrecognized": "Topic event '%1' unrecognized", + "plugins-set-in-configuration": "您不能修改插件状态因为它们在运行时中被定义(config.json,环境变量或终端选项),请转而修改配置。", + "theme-not-set-in-configuration": "在配置中定义活跃的插件时,需要先将新主题加入活跃插件的列表,才能在管理员控制面板中修改主题", + "topic-event-unrecognized": "无法识别主题事件'%1'", "cant-set-child-as-parent": "无法将子版块设置为父版块", "cant-set-self-as-parent": "无法将自身设置为父版块", - "api.master-token-no-uid": "A master token was received without a corresponding `_uid` in the request body", - "api.400": "Something was wrong with the request payload you passed in.", + "api.master-token-no-uid": "收到一个在请求体中没有对应 `_uid` 的主令牌", + "api.400": "您传入的请求某些地方出错了。", "api.401": "找不到有效的登录会话。请登录后再试。", - "api.403": "You are not authorised to make this call", + "api.403": "您没有权限使用此调用", "api.404": "无效 API 调用", - "api.426": "HTTPS is required for requests to the write api, please re-send your request via HTTPS", + "api.426": "Write API 的请求需要 HTTPS,请用 HTTPS 重新发送您的请求", "api.429": "您在短时间内发出了过多的请求,请稍后再试", - "api.500": "An unexpected error was encountered while attempting to service your request.", - "api.501": "The route you are trying to call is not implemented yet, please try again tomorrow", - "api.503": "The route you are trying to call is not currently available due to a server configuration" + "api.500": "在试图为您的请求提供服务时出现了一个意外的错误。", + "api.501": "您试图调用的路由还没被实现,请明天重试", + "api.503": "您试图调用的路由因为服务器配置而目前不可用" } \ No newline at end of file diff --git a/public/language/zh-CN/flags.json b/public/language/zh-CN/flags.json index 58cbf02a5c..c6e4e994e8 100644 --- a/public/language/zh-CN/flags.json +++ b/public/language/zh-CN/flags.json @@ -6,7 +6,7 @@ "assignee": "受委托人", "update": "更新", "updated": "已更新", - "resolved": "Resolved", + "resolved": "已解决", "target-purged": "被举报的内容已经被清除,不再可用。", "graph-label": "日举报", @@ -27,7 +27,7 @@ "filter-cid-all": "全部版块", "apply-filters": "应用过滤器", "more-filters": "更多过滤器", - "fewer-filters": "Fewer Filters", + "fewer-filters": "更少的过滤器", "quick-actions": "快速操作", "flagged-user": "被举报的用户", @@ -38,7 +38,7 @@ "delete-post": "删除帖子", "purge-post": "清除帖子", "restore-post": "恢复帖子", - "delete": "Delete Flag", + "delete": "删除举报", "user-view": "查看资料", "user-edit": "编辑资料", @@ -47,10 +47,10 @@ "add-note": "添加备注", "no-notes": "没有共享的备注内容。", "delete-note-confirm": "您确定要删除此举报备注吗?", - "delete-flag-confirm": "Are you sure you want to delete this flag?", + "delete-flag-confirm": "您确定您要删除此举报吗?", "note-added": "备注已添加", "note-deleted": "备注已删除", - "flag-deleted": "Flag Deleted", + "flag-deleted": "举报已删除", "history": "账号 & 举报历史", "no-history": "没有举报历史。", @@ -84,6 +84,6 @@ "bulk-actions": "批量操作", "bulk-resolve": "处理举报", "bulk-success": "已更新%1个举报", - "flagged-timeago-readable": "Flagged (%2)", - "auto-flagged": "[Auto Flagged] Received %1 downvotes." + "flagged-timeago-readable": "被举报于 (%2) ", + "auto-flagged": "【自动举报】收到 %1 个踩" } \ No newline at end of file diff --git a/public/language/zh-CN/global.json b/public/language/zh-CN/global.json index cd05e59b55..a1a86c1b70 100644 --- a/public/language/zh-CN/global.json +++ b/public/language/zh-CN/global.json @@ -3,7 +3,7 @@ "search": "搜索", "buttons.close": "关闭", "403.title": "禁止访问", - "403.message": "您似乎没有访问此页面的权限。", + "403.message": "您似乎碰到了一个您没有访问权限的页面。", "403.login": "或许您应该先 登录试试?", "404.title": "未找到", "404.message": "您访问的页面不存在。返回首页。", @@ -48,7 +48,7 @@ "alert.banned": "已封禁", "alert.banned.message": "您已被禁止,您当前的访问受到限制。", "alert.unbanned": "已解封", - "alert.unbanned.message": "Your ban has been lifted.", + "alert.unbanned.message": "你的封禁已被解除。", "alert.unfollow": "您已取消关注 %1!", "alert.follow": "您已关注 %1!", "users": "用户", diff --git a/public/language/zh-CN/groups.json b/public/language/zh-CN/groups.json index 051c9e5c13..82b76b9587 100644 --- a/public/language/zh-CN/groups.json +++ b/public/language/zh-CN/groups.json @@ -21,10 +21,10 @@ "details.members": "成员列表", "details.pending": "待加入成员", "details.invited": "已邀请成员", - "details.has_no_posts": "此群组的用户尚未发表任何帖子。", + "details.has_no_posts": "此用户组的成员尚未发表任何帖子。", "details.latest_posts": "最新帖子", "details.private": "私有", - "details.disableJoinRequests": "禁止申请加入群组", + "details.disableJoinRequests": "禁用申请加入群组", "details.disableLeave": "禁止用户离开群组", "details.grant": "授予/取消管理权", "details.kick": "踢出群组", @@ -35,7 +35,7 @@ "details.member_count": "群组成员数", "details.creation_date": "创建时间", "details.description": "描述", - "details.member-post-cids": "Category IDs to display posts from", + "details.member-post-cids": "显示发布帖子的版块 ID", "details.badge_preview": "徽章预览", "details.change_icon": "更改图标", "details.change_label_colour": "更改标签颜色", diff --git a/public/language/zh-CN/ip-blacklist.json b/public/language/zh-CN/ip-blacklist.json index 6193d4b4ac..3ab79f710b 100644 --- a/public/language/zh-CN/ip-blacklist.json +++ b/public/language/zh-CN/ip-blacklist.json @@ -9,7 +9,7 @@ "hint-2": "您可以通过以#标志开头的行来添加注释。", "validate.x-valid": "%1 / %2的规则有效。", - "validate.x-invalid": "下列 %0 个规则无效:", + "validate.x-invalid": "下列 %1 个规则无效:", "alerts.applied-success": "黑名单生效", diff --git a/public/language/zh-CN/modules.json b/public/language/zh-CN/modules.json index 3dff397d9d..b34e73c91d 100644 --- a/public/language/zh-CN/modules.json +++ b/public/language/zh-CN/modules.json @@ -1,6 +1,6 @@ { "chat.chatting_with": "与聊天", - "chat.placeholder": "在这里输入聊天消息,或者拖入图片,按下回车键以发送", + "chat.placeholder": "在此输入聊天消息,或者拖入图片,按下回车键以发送", "chat.scroll-up-alert": "您正在查看较旧的消息,点击此处转到最新消息。", "chat.send": "发送", "chat.no_active": "暂无聊天", @@ -21,17 +21,17 @@ "chat.seven_days": "7天", "chat.thirty_days": "30天", "chat.three_months": "3个月", - "chat.delete_message_confirm": "您确定删除此消息吗?", + "chat.delete_message_confirm": "您确定您要删除此消息吗?", "chat.retrieving-users": "查找用户", "chat.manage-room": "管理聊天室", - "chat.add-user-help": "在这里查找更多用户。选中之后添加到聊天中,新用户在加入聊天之前看不到聊天消息。只有聊天室所有者()可以从聊天室中移除用户。", + "chat.add-user-help": "在这里查找更多用户。被选中的用户会被添加到聊天中。新用户不能他们被加入对话前的聊天消息。只有聊天室所有者()可以从聊天室中移除用户。", "chat.confirm-chat-with-dnd-user": "该用户已将其状态设置为 DnD(请勿打扰)。 您仍希望与其聊天吗?", "chat.rename-room": "重命名房间", "chat.rename-placeholder": "在这里输入房间名字", "chat.rename-help": "这里设置的房间名字能够被房间内所有人都看到。", "chat.leave": "离开聊天室", - "chat.leave-prompt": "您确定要离开聊天室?", - "chat.leave-help": "离开此聊天会将您在聊天中的未接收的消息移除。您在重新加入之后不会看到任何聊天记录", + "chat.leave-prompt": "您确定您要离开聊天室?", + "chat.leave-help": "离开此聊天会切断您和此聊天以后的联系。如果您未来重新加入了,您将不能看到您重新加入之前的聊天记录。", "chat.in-room": "在此房间", "chat.kick": "踢出", "chat.show-ip": "显示 IP", @@ -60,11 +60,11 @@ "composer.zen_mode": "无干扰模式", "composer.select_category": "选择一个版块", "composer.textarea.placeholder": "在此处输入您的帖子内容,拖放图像", - "composer.schedule-for": "Schedule topic for", - "composer.schedule-date": "Date", - "composer.schedule-time": "Time", + "composer.schedule-for": "定时主题到", + "composer.schedule-date": "日期", + "composer.schedule-time": "时间", "composer.cancel-scheduling": "取消定时", - "composer.set-schedule-date": "Set Date", + "composer.set-schedule-date": "设置日期", "bootbox.ok": "确认", "bootbox.cancel": "取消", "bootbox.confirm": "确认", @@ -75,8 +75,8 @@ "cover.saved": "封面照片和位置已保存", "thumbs.modal.title": "管理主题缩略图", "thumbs.modal.no-thumbs": "没有找到缩略图。", - "thumbs.modal.resize-note": "Note: This forum is configured to resize topic thumbnails down to a maximum width of %1px", + "thumbs.modal.resize-note": "注意:此论坛被配置为缩放主题缩略图到最大值为 %1", "thumbs.modal.add": "添加缩略图", "thumbs.modal.remove": "移除缩略图", - "thumbs.modal.confirm-remove": "您确定要移除此缩略图吗?" + "thumbs.modal.confirm-remove": "您确定您要移除此缩略图吗?" } \ No newline at end of file diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json index dd9963a2e1..da5a0c31a7 100644 --- a/public/language/zh-CN/notifications.json +++ b/public/language/zh-CN/notifications.json @@ -43,12 +43,12 @@ "new_register": "%1 发出了注册请求", "new_register_multiple": "有 %1 条注册申请等待批准。", "flag_assigned_to_you": "举报 %1 已经被指派给您", - "post_awaiting_review": "请求查验帖子", + "post_awaiting_review": "待查阅的帖子", "profile-exported": "%1资料已导出,点击下载", "posts-exported": "%1帖子已导出,点击下载", "uploads-exported": "%1上传已导出,点击下载", "users-csv-exported": "用户列表 CSV 已导出,点击以下载", - "post-queue-accepted": "您先前提交的帖子已通过查验,点击这里查看", + "post-queue-accepted": "您先前提交的帖子已通过查验,点击这里查看您的帖子。", "post-queue-rejected": "您先前提交的帖子已被拒绝", "post-queue-notify": "您先前提交的帖子收到了通知:“%1”", "email-confirmed": "电子邮箱已确认", @@ -60,14 +60,14 @@ "email_only": "用邮件提醒我", "notification_and_email": "同时使用 通知 和 邮件 提醒我", "notificationType_upvote": "当有人顶了我的帖子时", - "notificationType_new-topic": "当有人回复我的帖子时", + "notificationType_new-topic": "当您关注的人发布了主题时", "notificationType_new-reply": "当您正在查看的主题中有新回复时", "notificationType_post-edit": "当您关注的主题有帖子被编辑时", "notificationType_follow": "当有人关注您时", "notificationType_new-chat": "当您收到聊天消息时", "notificationType_new-group-chat": "当您收到群聊消息时", - "notificationType_group-invite": "当您收到群组邀请时", - "notificationType_group-leave": "当用户离开您的群组时", + "notificationType_group-invite": "当您收到用户组邀请时", + "notificationType_group-leave": "当用户离开您的用户组时", "notificationType_group-request-membership": "当有人请求加入您拥有的用户组时", "notificationType_new-register": "当有人被添加到申请队列时", "notificationType_post-queue": "当有新帖子等待审核时", diff --git a/public/language/zh-CN/pages.json b/public/language/zh-CN/pages.json index 5829e028aa..9bbf32d405 100644 --- a/public/language/zh-CN/pages.json +++ b/public/language/zh-CN/pages.json @@ -13,11 +13,11 @@ "moderator-tools": "版主工具", "flagged-content": "举报管理", "ip-blacklist": "IP 黑名单", - "post-queue": "提交列表", + "post-queue": "发帖队列", "users/online": "在线用户", "users/latest": "最新用户", "users/sort-posts": "发帖最多的用户", - "users/sort-reputation": "积分最多的用户", + "users/sort-reputation": "声望最多的用户", "users/banned": "被封禁的用户", "users/most-flags": "被举报次数最多的用户", "users/search": "用户搜索", @@ -50,7 +50,7 @@ "account/bookmarks": "%1 收藏的帖子", "account/settings": "用户设置", "account/watched": "%1 关注的主题", - "account/ignored": "%1 屏蔽的主题", + "account/ignored": "%1 忽略的主题", "account/upvoted": "帖子被 %1 顶过", "account/downvoted": "帖子被 %1 踩过", "account/best": "%1 发布的最佳帖子", diff --git a/public/language/zh-CN/post-queue.json b/public/language/zh-CN/post-queue.json index 804e2d4f99..1fc8e2e058 100644 --- a/public/language/zh-CN/post-queue.json +++ b/public/language/zh-CN/post-queue.json @@ -1,10 +1,10 @@ { "post-queue": "发布队列", - "no-queued-posts": "There are no posts in the post queue.", - "no-single-post": "The topic or post you are looking for is no longer in the queue. It has likely been approved or deleted already.", - "enabling-help": "To enable this feature, go to Settings → Post → Post Queue and enable Post Queue.", - "back-to-list": "Back to Post Queue", + "no-queued-posts": "发帖队列中没有帖子。", + "no-single-post": "您正在查看的主题或帖子已经不在队列中。它可能已经被批准或删除。", + "enabling-help": "要启用此特性,跳转到设置→帖子→发帖队列然后启用发帖队列。", + "back-to-list": "回到发帖队列", "user": "用户", "category": "版块", "title": "标题", @@ -19,14 +19,14 @@ "accept": "接受", "reject": "拒绝", "remove": "移除", - "notify": "Notify", - "notify-user": "Notify User", - "confirm-reject": "你想要拒绝这个帖子吗?", + "notify": "通知", + "notify-user": "通知用户", + "confirm-reject": "您想要拒绝这个帖子吗?", "bulk-actions": "批量操作", "accept-all": "全部同意", "accept-selected": "同意选中项", "reject-all": "全部拒绝", - "reject-all-confirm": "你想要拒绝所有帖子吗?", + "reject-all-confirm": "您想要拒绝全部帖子吗?", "reject-selected": "拒绝选中项", "reject-selected-confirm": "您确定要拒绝%1个选择的帖子吗?", "bulk-accept-success": "%1个帖子已接受", diff --git a/public/language/zh-CN/reset_password.json b/public/language/zh-CN/reset_password.json index db11fed65c..50e0df910b 100644 --- a/public/language/zh-CN/reset_password.json +++ b/public/language/zh-CN/reset_password.json @@ -8,7 +8,7 @@ "new_password": "新密码", "repeat_password": "验证密码", "changing_password": "正在更改密码", - "enter_email": "请输入您的电子邮箱地址,我们将会发送一份邮件协助您重置账号密码。", + "enter_email": "请输入您的电子邮箱地址,我们将会发送一份带有如何重置您的账号密码的操作指南的邮件给您。", "enter_email_address": "输入邮箱地址", "password_reset_sent": "如果指定的邮件地址关联到已存在的用户账号,该账号将收到一条密码重置邮件,请注意该邮件一分钟内只发送一次", "invalid_email": "无效的电子邮箱/电子邮箱不存在!", diff --git a/public/language/zh-CN/success.json b/public/language/zh-CN/success.json index 951863f0a6..37478a394a 100644 --- a/public/language/zh-CN/success.json +++ b/public/language/zh-CN/success.json @@ -1,7 +1,7 @@ { "success": "成功", "topic-post": "您已成功发布。", - "post-queued": "你的帖子正在等待批准。帖子被批准或者拒绝的时候,你会收到一个通知。", + "post-queued": "您的帖子正在等待批准。您会在帖子被批准或者被拒绝的时候收到一个通知。", "authentication-successful": "验证成功", "settings-saved": "设置已保存!" } \ No newline at end of file diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json index 9a960f23c6..44188b443f 100644 --- a/public/language/zh-CN/topic.json +++ b/public/language/zh-CN/topic.json @@ -20,8 +20,8 @@ "login-to-view": "🔒登录查看", "edit": "编辑", "delete": "删除", - "delete-event": "删除元素", - "delete-event-confirm": "您确定要删除此元素吗?", + "delete-event": "删除事件", + "delete-event-confirm": "您确定您要删除此事件吗?", "purge": "清除", "restore": "恢复", "move": "移动", @@ -37,7 +37,7 @@ "moved": "已移动", "moved-from": "移自%1版 ", "copy-ip": "复制IP", - "ban-ip": "封禁IP", + "ban-ip": "封禁 IP", "view-history": "编辑历史", "locked-by": "锁定自", "unlocked-by": "解锁自", @@ -45,16 +45,16 @@ "unpinned-by": "取消置顶自", "deleted-by": "删除自", "restored-by": "恢复自", - "moved-from-by": "Moved from %1 by", - "queued-by": "Post queued for approval →", - "backlink": "Referenced by", - "forked-by": "Forked by", + "moved-from-by": "移动自 %1 由", + "queued-by": "排队等待批准的帖子 &rarr;", + "backlink": "被引用自", + "forked-by": "分叉自", "bookmark_instructions": "点击阅读本主题帖中的最新回复", "flag-post": "举报此帖", "flag-user": "举报此用户", "already-flagged": "已举报", "view-flag-report": "查看举报报告", - "resolve-flag": "Resolve Flag", + "resolve-flag": "解决举报", "merged_message": "此主题已并入%2", "deleted_message": "此主题已被删除。只有拥有主题管理权限的用户可以查看。", "following_topic.message": "当有人回复此主题时,您会收到通知。", @@ -68,7 +68,7 @@ "unwatch": "取消关注", "watch.title": "当此主题有新回复时,通知我", "unwatch.title": "取消关注此主题", - "share_this_post": "分享此帖", + "share_this_post": "分享此帖子", "watching": "关注中", "not-watching": "未关注", "ignoring": "忽略中", @@ -102,9 +102,9 @@ "topic_move_undone": "撤销主题移动", "topic_move_posts_success": "此帖子将马上移动。点击此处撤销", "topic_move_posts_undone": "撤销帖子移动", - "post_delete_confirm": "您确定要删除此回复吗?", - "post_restore_confirm": "您确定要恢复此回复吗?", - "post_purge_confirm": "您确定要清除此回复吗?", + "post_delete_confirm": "您确定您要删除此帖子吗?", + "post_restore_confirm": "您确定您要恢复此帖子吗?", + "post_purge_confirm": "您确定您要清除此帖子吗?", "pin-modal-expiry": "失效日期", "pin-modal-help": "您可以在此处选择为置顶主题设置一个失效日期。或者您也可以选择不设置,则该主题将会一直被置顶,直到管理员取消置顶。", "load_categories": "正在载入版块", @@ -118,7 +118,7 @@ "move_topic": "移动主题", "move_topics": "移动主题", "move_post": "移动帖子", - "post_moved": "回复已移动!", + "post_moved": "帖子已移动!", "fork_topic": "分割主题", "enter-new-topic-title": "输入新的主题标题", "fork_topic_instruction": "点击将分割的帖子", @@ -135,17 +135,17 @@ "merge-select-main-topic": "选择首要主题", "merge-new-title-for-topic": "主题的新标题", "topic-id": "主题 ID", - "move_posts_instruction": "选中你想移动的帖子,然后输入一个主题ID或前往目标主题", + "move_posts_instruction": "选中您想移动的帖子,然后输入一个主题 ID 或前往目标主题", "change_owner_instruction": "点击您想转移给其他用户的帖子", "composer.title_placeholder": "在此输入您主题的标题...", "composer.handle_placeholder": "在这里输入您的姓名/昵称", "composer.discard": "撤销", "composer.submit": "提交", "composer.additional-options": "附加选项", - "composer.schedule": "Schedule", + "composer.schedule": "定时", "composer.replying_to": "正在回复 %1", "composer.new_topic": "新主题", - "composer.editing": "Editing", + "composer.editing": "编辑中", "composer.uploading": "正在上传...", "composer.thumb_url_label": "粘贴主题缩略图网址", "composer.thumb_title": "给此主题添加缩略图", @@ -164,25 +164,25 @@ "most_posts": "回复最多", "most_views": "最多浏览", "stale.title": "接受建议并创建新主题?", - "stale.warning": "您回复的主题已经很古老了,是否发布新主题并引用此主题的内容?", + "stale.warning": "您回复的主题已经很古老了。您是否用发布新主题代替,并引用此主题的内容?", "stale.create": "创建新主题", "stale.reply_anyway": "仍然回复此帖", "link_back": "回复: [%1](%2)", "diffs.title": "历史发布记录", - "diffs.description": "此主题已经重新发布并修订。点击某个时间点查看修订的内容。", - "diffs.no-revisions-description": "该贴已重新修改", + "diffs.description": "此帖子有 %1个修订。点击下方修订中的一个以查看某个时间点帖子的内容。", + "diffs.no-revisions-description": "此帖子有 %1 个修订。", "diffs.current-revision": "当前版本", "diffs.original-revision": "原始版本", "diffs.restore": "恢复到此修订", "diffs.restore-description": "恢复后,新的修订版本将会被添加到此帖子的编辑历史记录中。", "diffs.post-restored": "帖子成功恢复到更早的修订版本", "diffs.delete": "删除此修订", - "diffs.deleted": "Revision deleted", + "diffs.deleted": "修订已删除", "timeago_later": "%1 后", "timeago_earlier": "%1 前", "first-post": "第一个帖子", "last-post": "最后一个帖子", "go-to-my-next-post": "转到我的下一个帖子", - "no-more-next-post": "您在这个主题中没有更多的帖子了", - "post-quick-reply": "发表快速回复" + "no-more-next-post": "您在此主题中没有更多的帖子了", + "post-quick-reply": "发布快速回复" } \ No newline at end of file diff --git a/public/language/zh-CN/uploads.json b/public/language/zh-CN/uploads.json index 568ce71767..38bf9ab3b1 100644 --- a/public/language/zh-CN/uploads.json +++ b/public/language/zh-CN/uploads.json @@ -4,6 +4,6 @@ "upload-success": "文件上传成功!", "maximum-file-size": "最大 %1 kb", "no-uploads-found": "没有找到上传文件", - "public-uploads-info": "上传公开的文件,所有访客均可查看。", + "public-uploads-info": "上传是公开的,所有访客均可查看。", "private-uploads-info": "上传私有的文件,仅登陆用户可见。" } \ No newline at end of file diff --git a/public/language/zh-CN/user.json b/public/language/zh-CN/user.json index 2032dbe9a6..0563fc3663 100644 --- a/public/language/zh-CN/user.json +++ b/public/language/zh-CN/user.json @@ -19,8 +19,8 @@ "delete_account_as_admin": "删除账号", "delete_content": "删除账号内容", "delete_all": "删除账号和内容", - "delete_account_confirm": "您确定要匿名化您的所有帖子,并删除您的账户吗?
此操作不可撤销,您将无法恢复您的任何数据

请输入您的密码,以确认删除此帐户", - "delete_this_account_confirm": "您确定要删除账户同时保留其发布的内容吗?
此操作不可逆,帖子将被匿名化,而且您无法恢复被删除账户的任何帖子

", + "delete_account_confirm": "您确定要匿名化您的所有帖子并删除账号吗?
此操作不可撤销,您将无法恢复您的任何数据

请输入您的密码,以确认您要删除这个账号。", + "delete_this_account_confirm": "您确定您要删除此账号同时保留其发布的内容吗?
此操作不可逆,帖子将被匿名化,而且您将无法恢复帖子和被删除账号的联系

", "delete_account_content_confirm": "您确定要删除账户内容(帖子/主题/上传)吗?
此操作不可逆,而且您无法恢复任何数据

", "delete_all_confirm": "您确定要删除此账号和它的所有内容(帖子/主题/上传)吗?
此操作不可逆,而且您无法恢复任何数据

", "account-deleted": "帐号已删除", @@ -38,7 +38,7 @@ "watched_categories": "已关注的版块", "change_all": "更改全部", "watched": "已关注", - "ignored": "屏蔽", + "ignored": "忽略", "default-category-watch-state": "默认版块关注状态", "followers": "粉丝", "following": "关注", @@ -105,7 +105,7 @@ "has_no_best_posts": "此用户没有任何顶过的帖子。", "has_no_topics": "此用户还未发布任何主题。", "has_no_watched_topics": "此用户还未关注任何主题。", - "has_no_ignored_topics": "此用户尚未屏蔽任何主题。", + "has_no_ignored_topics": "此用户尚未忽略任何主题。", "has_no_upvoted_posts": "此用户还未顶过任何帖子。", "has_no_downvoted_posts": "此用户还未踩过任何帖子。", "has_no_controversial_posts": "此用户没有任何踩过的帖子。", @@ -133,7 +133,7 @@ "scroll_to_my_post": "在提交回复之后显示新回复", "follow_topics_you_reply_to": "关注您回复过的主题", "follow_topics_you_create": "关注您创建的主题", - "grouptitle": "群组称号", + "grouptitle": "用户组称号", "group-order-help": "选择群组然后使用箭头排列称号", "no-group-title": "不展示群组称号", "select-skin": "选择皮肤", @@ -141,13 +141,13 @@ "homepage": "首页", "homepage_description": "选择一个页面作为论坛的首页,否则设置为 ‘空’ 使用默认首页。", "custom_route": "自定义首页路由", - "custom_route_help": "输入路由名称,前面不需要斜杠 ( 例如, \"recent\" 或 \"category/2/general-discussion\" )", + "custom_route_help": "输入路由名称,前面不需要斜杠 ( 例如 \"recent\" 或 \"category/2/general-discussion\" )", "sso.title": "单点登录服务", "sso.associated": "已关联到", "sso.not-associated": "点击这里来关联", "sso.dissociate": "解除关联", "sso.dissociate-confirm-title": "确认解除关联", - "sso.dissociate-confirm": "您确定要将您的账户与 %1 解除关联吗?", + "sso.dissociate-confirm": "您确定您要将您的账号与 %1 解除关联吗?", "info.latest-flags": "最新举报", "info.no-flags": "没有找到被举报的帖子", "info.ban-history": "最近封禁历史", @@ -158,7 +158,7 @@ "info.banned-reason-label": "原因", "info.banned-no-reason": "没有原因", "info.mute-history": "最近禁言历史", - "info.no-mute-history": "该用户从未被禁言", + "info.no-mute-history": "此用户从未被禁言", "info.muted-until": "禁言到 %1", "info.muted-expiry": "到期时间", "info.muted-no-reason": "没有原因", @@ -170,21 +170,21 @@ "sessions.description": "此页面允许您查看当前论坛的所有激活的会话(active session),并在需要的时候关闭它们.您可以通过注销您的账户来关闭自己的会话(session)", "consent.title": "您的权利与许可", "consent.lead": "本论坛将会收集与处理您的个人信息。", - "consent.intro": "我们收集这些信息将仅用于个性化您于本社区的体验,和关联您的账户与您所发表的帖子。在注册过程中您需要提供一个用户名和邮箱地址,您也可以选择是否提供额外的个人信息,以完善您的用户资料。

在您的用户账户有效期内,我们将保留您的信息。您可以在任何时候通过删除您的账号,以撤回您的许可。您可以在任何时候通过您的权力与许可页面,获取一份您对本论坛的贡献的副本。

如果您有任何疑问,我们鼓励您与本论坛管理团队联系。", - "consent.email_intro": "我们有时可能会向您的注册邮箱发送电子邮件,以向您提供有关于您的新动态和/或新活动。您可以通过您的用户设置页面自定义(包括直接禁用)社区摘要的发送频率,以及选择性地接收哪些类型的通知。", + "consent.intro": "我们收集这些信息将仅用于个性化您于本社区的体验,和关联您的用户账号与您所发表的帖子。在注册过程中您需要提供一个用户名和邮箱地址,您也可以选择是否提供额外的个人信息,以完善您的用户资料。

在您的用户账号有效期内,我们将保留您的信息。您可以在任何时候通过删除您的账号,以撤回您的许可。您可以在任何时候通过您的权力与许可页面,获取一份您对本论坛的贡献的副本。

如果您有任何疑问,我们鼓励您与本论坛管理团队联系。", + "consent.email_intro": "我们有时可能会向您的注册邮件地址发送电子邮件,以向您提供有关于您的新动态和/或新活动。您可以通过您的用户设置页面自定义(包括直接禁用)社区摘要的发送频率,以及选择性地接收哪些类型的通知。", "consent.digest_frequency": "本社区默认每 %1 发送一封摘要邮件,除非您在用户设置中明确更改了此项。", "consent.digest_off": "本社区默认不发送摘要邮件,除非您在用户设置中明确更改了此项。", "consent.received": "您已许可本网站收集与处理您的个人数据。无需其他额外操作。", - "consent.not_received": "您未许可本网站收集与处理您的个人数据。本网站的管理团队可能于任何时候删除您的账户,以符合通用数据保护条例的要求。", + "consent.not_received": "您未许可本网站收集与处理您的个人数据。本网站的管理团队可能于任何时候删除您的账号,以符合通用数据保护条例的要求。", "consent.give": "授予许可", "consent.right_of_access": "您拥有数据访问权", - "consent.right_of_access_description": "您有权访问本网站根据需求收集的您的任何数据。您可以点击下方相应按钮,获取这些数据的副本。", + "consent.right_of_access_description": "您有权在您的要求下访问本网站根据需求收集的您的任何数据。您可以点击下方相应按钮,获取这些数据的副本。", "consent.right_to_rectification": "您拥有纠正权", "consent.right_to_rectification_description": "您拥有修改或更新提供给我们的任何不准确的个人数据的权力。您可以通过编辑以更新个人资料,并可以修改您发表的内容。若非如此,请联系本网站的管理团队。", "consent.right_to_erasure": "您拥有被遗忘权", - "consent.right_to_erasure_description": "您随时都可以通过删除帐号,来撤销数据收集和处理的许可。您的个人资料可以被删除,但是您发表的内容仍然会保留。如果您想要同时删除您的帐号内容,请联系此网站的管理团队。", + "consent.right_to_erasure_description": "您随时都可以通过删除账号,来撤销数据收集和处理的许可。您的个人资料可以被删除,但是您发表的内容仍然会保留。如果您想要同时删除您的账号内容,请联系此网站的管理团队。", "consent.right_to_data_portability": "您拥有数据转移权", - "consent.right_to_data_portability_description": "您也许想导出有关您和您的账号的机器可读副本。您可以点击下方的按钮来获取它们。", + "consent.right_to_data_portability_description": "您可以向我们要一份有关您和您的账号收集的数据的的机器可读输出。您可以点击下方的按钮来获取它们。", "consent.export_profile": "导出个人资料 (.json)", "consent.export-profile-success": "资料导出完成后,您将会收到一条通知。", "consent.export_uploads": "导出上传文件 (.zip)", @@ -195,5 +195,5 @@ "emailUpdate.optional": "此项为可选。您不必提供您的电子邮件地址,但如果没有一个经过验证的电子邮件地址,您将无法恢复您的账号或使用电子邮件登录。", "emailUpdate.required": "此字段为必填。", "emailUpdate.change-instructions": "将向输入的电子邮箱地址发送一封带有唯一链接的确认电子邮件。访问该链接将验证您对该电子邮箱的所有权,它将在您的账号上处于活动状态。在任何时候,您都可以在您的账号页面更新存档的电子邮箱地址。", - "emailUpdate.password-challenge": "请输入您的密码,以验证账户所有权。" + "emailUpdate.password-challenge": "请输入您的密码以验证账号所有权。" } \ No newline at end of file From 2f5f47ea8f40a4dfe789a6c05b1a30594264ab3f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 09:24:12 -0500 Subject: [PATCH 17/25] fix(deps): update dependency esbuild to v0.17.8 (#11289) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 12bd4ddfa1..fc293b54c6 100644 --- a/install/package.json +++ b/install/package.json @@ -58,7 +58,7 @@ "csurf": "1.11.0", "daemon": "1.1.0", "diff": "5.1.0", - "esbuild": "0.17.6", + "esbuild": "0.17.8", "express": "4.18.2", "express-session": "1.17.3", "express-useragent": "1.0.15", From e4e01f471c3aefb52c099da2baf5288e0d330763 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 09:25:32 -0500 Subject: [PATCH 18/25] fix(deps): update dependency benchpressjs to v2.5.1 (#11270) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index fc293b54c6..869046b43b 100644 --- a/install/package.json +++ b/install/package.json @@ -35,7 +35,7 @@ "async": "3.2.4", "autoprefixer": "10.4.13", "bcryptjs": "2.4.3", - "benchpressjs": "2.4.3", + "benchpressjs": "2.5.1", "body-parser": "1.20.1", "bootbox": "5.5.3", "bootstrap": "3.4.1", From 3ef49223867a0d3e81352018887f43aa85b7c13d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 09:26:46 -0500 Subject: [PATCH 19/25] fix(deps): update dependency html-to-text to v9.0.4 (#11290) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index 869046b43b..295d2a6697 100644 --- a/install/package.json +++ b/install/package.json @@ -66,7 +66,7 @@ "fs-extra": "11.1.0", "graceful-fs": "4.2.10", "helmet": "5.1.1", - "html-to-text": "9.0.3", + "html-to-text": "9.0.4", "ipaddr.js": "2.0.1", "jquery": "3.6.3", "jquery-deserialize": "2.0.0", From b9bb053266eca533b046cb030a95b4c1a22811c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 09:33:04 -0500 Subject: [PATCH 20/25] fix(deps): update socket.io packages to v4.6.0 (#11272) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 295d2a6697..1f0dd38fb6 100644 --- a/install/package.json +++ b/install/package.json @@ -125,8 +125,8 @@ "sharp": "0.31.3", "sitemap": "7.1.1", "slideout": "1.0.1", - "socket.io": "4.5.4", - "socket.io-client": "4.5.4", + "socket.io": "4.6.0", + "socket.io-client": "4.6.0", "@socket.io/redis-adapter": "8.1.0", "sortablejs": "1.15.0", "spdx-license-list": "6.6.0", From 558c1c98d5c3b2b4117554d12d31464ebac5b093 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:36:59 -0500 Subject: [PATCH 21/25] chore(deps): update commitlint monorepo to v17.4.3 (#11293) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/install/package.json b/install/package.json index 1f0dd38fb6..a830d4b078 100644 --- a/install/package.json +++ b/install/package.json @@ -149,8 +149,8 @@ }, "devDependencies": { "@apidevtools/swagger-parser": "9.0.1", - "@commitlint/cli": "17.4.2", - "@commitlint/config-angular": "17.4.2", + "@commitlint/cli": "17.4.3", + "@commitlint/config-angular": "17.4.3", "coveralls": "3.1.1", "eslint": "8.33.0", "eslint-config-nodebb": "0.2.1", From 75bd6caa6d915faf1a4e460715aa408ad787b6cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:37:24 -0500 Subject: [PATCH 22/25] fix(deps): update dependency ioredis to v5.3.1 (#11294) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index a830d4b078..ba6de4cb4c 100644 --- a/install/package.json +++ b/install/package.json @@ -114,7 +114,7 @@ "postcss-clean": "1.2.0", "progress-webpack-plugin": "1.0.16", "prompt": "1.3.0", - "ioredis": "5.3.0", + "ioredis": "5.3.1", "request": "2.88.2", "request-promise-native": "1.0.9", "rimraf": "3.0.2", From 330f7ec838f21c3f66dc41db5f6a0386b085dec5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 11:33:08 -0500 Subject: [PATCH 23/25] chore(deps): update dependency eslint to v8.34.0 (#11291) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index ba6de4cb4c..e31c4b078a 100644 --- a/install/package.json +++ b/install/package.json @@ -152,7 +152,7 @@ "@commitlint/cli": "17.4.3", "@commitlint/config-angular": "17.4.3", "coveralls": "3.1.1", - "eslint": "8.33.0", + "eslint": "8.34.0", "eslint-config-nodebb": "0.2.1", "eslint-plugin-import": "2.27.5", "grunt": "1.6.1", From 4d68b0d495ab869984a3d37c7e1096a40fe22f93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 13 Feb 2023 11:33:17 -0500 Subject: [PATCH 24/25] chore(deps): update dependency lint-staged to v13.1.1 (#11268) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- install/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/package.json b/install/package.json index e31c4b078a..1bb07f747d 100644 --- a/install/package.json +++ b/install/package.json @@ -159,7 +159,7 @@ "grunt-contrib-watch": "1.1.0", "husky": "8.0.3", "jsdom": "21.1.0", - "lint-staged": "13.1.0", + "lint-staged": "13.1.1", "mocha": "10.2.0", "mocha-lcov-reporter": "1.3.0", "mockdate": "3.0.5", From 40e7b86da9b3eab82914ce557333eb257c4c43d3 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 13 Feb 2023 11:44:40 -0500 Subject: [PATCH 25/25] docs: update openapi spec to include info about passing in timestamps for topic creation, removing timestamp as valid request param for topic replying --- public/openapi/write/topics.yaml | 9 +++++++++ public/openapi/write/topics/tid.yaml | 2 -- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/public/openapi/write/topics.yaml b/public/openapi/write/topics.yaml index ba00cf0024..49cae076f9 100644 --- a/public/openapi/write/topics.yaml +++ b/public/openapi/write/topics.yaml @@ -19,6 +19,15 @@ post: content: type: string example: This is the test topic's content + timestamp: + type: number + description: | + A UNIX timestamp of the topic's creation date (i.e. when it will be posted). + Specifically, this value can only be set to a value in the future if the calling user has the `topics:schedule` privilege for the passed-in category. + Otherwise, the current date and time are always assumed. + In some scenarios (e.g. forum migrations), you may want to backdate topics and posts. + Please see [this Developer FAQ topic](https://community.nodebb.org/topic/16983/how-can-i-backdate-topics-and-posts-for-migration-purposes) for more information. + example: 556084800000 tags: type: array items: diff --git a/public/openapi/write/topics/tid.yaml b/public/openapi/write/topics/tid.yaml index 8e68efe25a..4c1acab3d6 100644 --- a/public/openapi/write/topics/tid.yaml +++ b/public/openapi/write/topics/tid.yaml @@ -46,8 +46,6 @@ post: content: type: string example: This is a test reply - timestamp: - type: number toPid: type: number required: