// Copyright 2022 E99p1ant. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package i18n
// enDict English copy.
var enDict = map[string]string{
// Navigation
"nav.explore": "Explore",
"nav.mine": "Mine",
"nav.register": "Sign up",
"nav.login": "Log in",
"nav.ask": "Ask",
"nav.settings": "Settings",
"nav.lang": "Language",
// Common
"common.login": "Log in",
"common.forgot": "Forgot password",
"common.submit": "Submit",
"common.cancel": "Cancel",
"common.save": "Save",
"common.tooManyRequests": "Too many requests. Please try again later.",
"common.close": "Close",
"common.delete": "Delete",
"common.moveUp": "Move up",
"common.moveDown": "Move down",
"common.share": "Share",
"common.verifying": "Verifying...",
"common.submitting": "Submitting...",
"common.uploading": "Uploading...",
"common.lang": "Language",
"common.menu": "Menu",
"common.pleaseWait": "Please wait...",
"common.backHome": "Back to Home",
"common.theme": "Toggle dark/light mode",
// Site
"site.title": "Wolf's Question Box | Anonymous Question Box",
"site.description": "Wolf's Question Box is an anonymous question box — ask me anything without signing up, a safe space to share and respond.",
"site.keywords": "Anonymous Question Box,question box,anonymous ask,ask anonymously,Wolf's Question Box,anonymous Q&A",
"site.footer.runtime": "The box has been alive for",
"site.footer.admin": "Contact admin",
"site.footer.notice": "Announcements",
"site.footer.chat": "Chat room",
"site.footer.status": "Status",
"site.footer.nav": "Links",
"site.footer.rules": "Rules",
"site.footer.drive": "Drive",
"site.maintenance": "The site is under maintenance. Please come back later ~",
// Auth
"auth.login.title": "User Log in",
"auth.login.email": "Email",
"auth.login.password": "Password",
"auth.login.submit": "Log in",
"auth.login.forgot": "Forgot password",
"auth.register.title": "User Sign up",
"auth.register.name": "Nickname",
"auth.register.email": "Email",
"auth.register.password": "Password",
"auth.register.submit": "Sign up",
"auth.forgot.title": "Forgot password",
"auth.forgot.email": "Email",
"auth.forgot.submit": "Send reset email",
"auth.forgot.submitBtn": "Recover password",
"auth.forgot.sent": "An email has been sent to %s, please check your inbox.",
"auth.recover.title": "Reset password",
"auth.recover.greeting": "%s, you are resetting your password:",
"auth.recover.password": "New password",
"auth.recover.confirm": "Confirm password",
"auth.recover.submit": "Reset password",
// Explore
"explore.title": "Explore User Tags",
"explore.notice": "Here you can find users who enabled \"Show my tags on the homepage\". This feature is off by default. To get discovered here, go to your profile settings and enable it.",
"explore.shuffle": "Shuffle",
"explore.empty": "No users to show yet. Enable it and be the first!",
"explore.hotVotes": "Hot polls",
"explore.questionsTab": "Questions",
"explore.votesTab": "Polls",
"explore.votesTitle": "Public polls",
"explore.votesDesc": "Browse active public polls and join the topics that interest you.",
"explore.randomVote": "Random pick",
"explore.allVotes": "All polls",
"explore.noVotes": "There are no public polls available right now.",
// Ask page
"ask.scan": "Scan to ask @%s",
"ask.anonymous": "Anyone can ask anonymously",
"ask.registerOnly": "Only registered users can ask",
"ask.nextOpenAt": "Next opening: %s",
"ask.lastCloseAt": "Last closed: %s",
"weekday.0": "Sun",
"weekday.1": "Mon",
"weekday.2": "Tue",
"weekday.3": "Wed",
"weekday.4": "Thu",
"weekday.5": "Fri",
"weekday.6": "Sat",
"ask.pinned": "Pinned",
"ask.share": "Share this box",
"ask.placeholder": "Write your question here...",
"ask.chatPlaceholder": "Write your chat message here...",
"ask.addImage": "Add image",
"ask.private": "Don't publish after reply",
"ask.notify": "Notify me",
"ask.emailPlaceholder": "Enter your email address",
"ask.submit": "Send question",
"ask.chat": "Start a chat",
"ask.chatDisabled": "Chat is disabled on this box",
"ask.chatLimit": "Message limit: %d",
"ask.history": "Previously answered by @%s",
"ask.loginRequired": "Log in required",
"ask.loginRequiredChat": "You need to log in to start a chat",
"ask.goLogin": "Go to login",
"ask.needPassword": "This box requires a password",
"ask.needLogin": "The owner only allows registered users to ask questions. Please log in first.",
"ask.pleaseEmail": "Please enter your email to receive notifications",
"ask.generating": "Generating share card…",
"ask.genFailed": "Failed to generate share card. Please try again later",
"ask.networkError": "Network error",
"ask.shareFilename": "share.png",
// Question item
"qitem.answer": "Answer",
"qitem.delete": "Delete",
"qitem.private": "Make private",
"qitem.public": "Make public",
"qitem.asked": "Asked",
"qitem.pending": "Pending reply",
"qitem.answeredBy": "Answer by @%s on %s",
"qitem.danger": "Danger!",
"qitem.deleteConfirm": "Are you sure you want to delete this question? This cannot be undone.",
"qitem.deleteConfirmBtn": "Yes, delete",
"qitem.backToBox": "Back to %s's question box",
"qitem.answerTitle": "Answer the question",
"qitem.answerPlaceholder": "Write your answer here...",
"qitem.emailNotifyHint": "The asker left their email. Once you answer this question for the first time, they will receive an email notification.",
"qitem.submitAnswer": "Answer",
"qitem.updateAnswer": "Update answer",
"qitem.askMore": "Ask something else?",
"qitem.markRead": "Mark as read",
"qitem.markUnread": "Mark as unread",
"qitem.readLocked": "Answered, locked as read",
"qitem.nextUnread": "Next unread",
"qitem.nextUnreadTitle": "Mark this one as read and open the next unread question",
"qitem.submitAndNext": "Answer & open next unread",
// Admin / profile page
"admin.profile": "Profile",
"admin.lang": "Language",
"admin.langHint": "Choose the language visitors see when they open your question box (admin pages follow this too)",
"admin.email": "Email",
"admin.name": "Nickname",
"admin.nameColor": "Nickname color",
"admin.oldPassword": "Old password",
"admin.newPassword": "New password",
"admin.notify": "New question notifications",
"admin.personalize": "Customization",
"admin.intro": "Box introduction",
"admin.introColor": "Introduction color",
"admin.qrBgColor": "QR background color (light part)",
"admin.qrPdColor": "QR finder pattern color (corner squares)",
"admin.qrFgColor": "QR foreground color",
"admin.qrDotSize": "QR dot size (←small large→)",
"admin.qrBgAlpha": "QR background opacity (←opaque transparent→)",
"admin.avatar": "Avatar",
"admin.background": "Box background",
"admin.qrBackground": "QR background image",
"admin.social": "Social links",
"admin.harassment": "Anti-harassment",
"admin.askLimit": "Asking restriction",
"admin.blockWords": "Blocked words (press Enter or comma to add, up to 10 words, 10 characters each)",
"admin.chat": "Chat settings",
"admin.chatMaxMessages": "Max messages per chat",
"admin.chatDailyLimit": "Daily message limit per user",
"admin.tags": "Tags",
"admin.tagsHint": "Tags (up to 5, 5 characters each, press Enter or comma to add)",
"admin.tagsPlaceholder": "e.g. anime, music, games",
"admin.tagInputHint": "Type and press Enter or comma to add",
"admin.tagInputDuplicate": "Already exists, ignored",
"admin.pagePassword": "Page access password",
"admin.pagePasswordHint": "Set a page password (6–30 characters, leave empty to disable)",
"admin.askPassword": "Ask password",
"admin.askPasswordHint": "Set a password for asking (6–30 characters, leave empty to disable)",
"admin.saveProfile": "Save changes",
"admin.updated": "Profile updated successfully",
"admin.logout": "Log out",
"admin.export": "Export data",
// Admin settings (additional)
"admin.oldPasswordHint": "Only needed when changing password; leave empty to keep it unchanged",
"admin.newPasswordHint": "6-64 characters; leave empty to keep it unchanged",
"admin.notifyEmail": "Email",
"admin.useCustomFg": "Use custom foreground color (otherwise auto-matched)",
"admin.customFgHint": "Only takes effect when enabled; otherwise the color is auto-generated",
"admin.avatarPlaceholder": "Upload avatar (non-1:1 images will be squished)",
"admin.backgroundPlaceholder": "Upload box background",
"admin.qrBackgroundPlaceholder": "Upload QR background (a background that is too dark may make the QR code unreadable)",
"admin.qrPreviewHint": "The preview updates instantly after choosing an image",
"admin.preview": "Live preview",
"admin.themePreset": "Preset themes",
"admin.themeDefault": "Default",
"admin.themeDark": "Dark",
"admin.themeOcean": "Ocean",
"admin.themeSunset": "Sunset",
"admin.resetDefaults": "🔄 Reset to defaults",
"admin.previewHint": "Adjustments are for preview only; click \"Save changes\" to apply",
"admin.socialHint": "Check the box and fill in the profile URL (no https:// needed). Unchecked items won't be shown on your page.",
"admin.enableAcfun": "Enable AcFun",
"admin.enableBili": "Enable Bilibili",
"admin.enableWeibo": "Enable Weibo",
"admin.enableXiaohongshu": "Enable Xiaohongshu",
"admin.enableBlog": "Enable Personal Blog",
"admin.registerOnly": "Only allow registered users to ask me questions",
"admin.updateHarassment": "Update anti-harassment settings",
"admin.globalBlockWords": "Global blocked words",
"admin.globalBlockWordsHint": "Blocked words apply to questions, chat messages sent to you, and vote submissions. This single setting is shared across the question / chat / vote panels and takes effect immediately from any of them.",
"admin.updateBlockWords": "Save blocked words",
// Moderation strictness: shared by questions / polls / chat. Decision rules live in internal/security/censor/policy.go.
"admin.moderationStrictness": "Moderation strictness",
"admin.moderationStrictnessHint": "Applies to questions, polls and chat messages alike. This controls whether content is blocked once the moderation service flags it - it does not affect blocked words, which are always rejected outright.",
"admin.moderationStrictnessBaseline": "Baseline (always enforced, cannot be disabled): political, terrorism and pornographic content, plus hits on the moderation service's custom wordlists.",
"admin.moderationStrictnessColumnLevel": "Level",
"admin.moderationStrictnessColumnScope": "Blocked when",
"admin.moderationStrictnessOption.lax": "Lenient",
"admin.moderationStrictnessOption.standard": "Standard",
"admin.moderationStrictnessOption.strict": "Strict",
"admin.moderationStrictnessScope.lax": "Only baseline content is blocked; everything else is allowed (fewest false positives).",
"admin.moderationStrictnessScope.standard": "Baseline content, plus abuse and contraband with a confidence of 90% or higher.",
"admin.moderationStrictnessScope.strict": "Baseline content, plus abuse, contraband, spam, ads, flooding, meaningless and harmful content at any confidence; also trusts the moderation service's overall block recommendation. The strictest tier — its block scope is never smaller than before this setting existed.",
"admin.moderationStrictnessUnsetHint": "Falls back to the site default when not set.",
"admin.updateModerationStrictness": "Save moderation strictness",
"admin.allowChat": "Allow registered users to start a chat with me",
"admin.dailyLimitHint": "0 means unlimited",
"admin.updateChat": "Update chat settings",
"admin.showInHome": "Show my tags on the home page (let other users find me by tags)",
"admin.updateTags": "Update tags",
"admin.updatePagePassword": "Update page password",
"admin.pagePasswordPlaceholder": "Enter page access password",
"admin.updateAskPassword": "Update ask password",
"admin.askPasswordPlaceholder": "Enter ask password",
"admin.account": "Account settings",
"admin.exportHint": "You can export all your personal data from %s, including your basic information, received questions and answers.",
"admin.exportJSON": "Export JSON",
"admin.exportJSONHint": "Includes questions, answers, follow-ups and chats for full backup or migration.",
"admin.deactivate": "Deactivate my account",
"admin.deactivateHint": "You can deactivate your account at any time. After deactivation, your account can no longer log in, your question box page and questions will be inaccessible, and others won't be able to send you new questions.This action cannot be undone. Please be careful!",
"admin.socialRequired": "Please fill in the link or uncheck the box",
// Question management
"qlist.title": "My Questions",
"qlist.answered": "Answered",
"qlist.pending": "Pending",
"qlist.private": "Private",
"qlist.empty": "No questions yet. Share your box and get some!",
"qlist.action": "Actions",
"qlist.answerNow": "Answer",
"qlist.sort": "Sort",
"qlist.status": "Status",
"qlist.type": "Type",
"qlist.latest": "Latest",
"qlist.oldest": "Oldest",
"qlist.all": "All",
"qlist.public": "Normal question",
"qlist.privateQuestion": "Private question",
"qlist.received": "Questions I received",
"qlist.myChats": "Chats I started",
"qlist.statsTotal": "Total questions",
"qlist.statsAnswered": "Answered",
"qlist.statsUnanswered": "Unanswered",
"qlist.statsPrivate": "Private",
"qlist.statsPinned": "Pinned",
"qlist.statsChats": "Chats",
"qlist.searchPlaceholder": "Search questions or answers...",
"qlist.searchBtn": "Search",
"qlist.searchClear": "Clear",
"qlist.questionsTab": "Questions",
"qlist.votesTab": "Votes",
"qlist.chatsTab": "Chats",
"qlist.receivedChats": "Chats I received",
"qlist.chatEmpty": "No chats yet. Share your question box to start chatting!",
"qlist.pinnedShort": "Pin",
"qlist.privateShort": "Pvt",
"qlist.chatStatsTotal": "Total chats",
"qlist.chatStatsReceived": "Received",
"qlist.chatStatsInitiated": "Initiated",
"qlist.chatStatsClosed": "Closed",
"qlist.unansweredShort": "Open",
"qlist.readShort": "Read",
"qlist.unreadShort": "Unread",
"qitem.markReadShort": "Mark",
"qlist.pinShort": "Pin",
"qlist.unpinShort": "Unpin",
"qlist.myVotes": "My votes",
"qlist.loadMore": "Load more",
"qlist.newVote": "New vote",
"qlist.edit": "Edit",
"qlist.untitledVote": "Untitled vote",
"qlist.blocked": "Blocked",
"qlist.unanswered": "Unanswered",
// Site logo suffix (random animal emoji + suffix)
"site.logoSuffix": "'s Question Box",
"site.stats": "Question Box Statistics",
// Captcha modal
"captcha.title": "Verification",
"captcha.hint": "Solve the math problem below to prove you are not a robot",
"captcha.refresh": "New problem",
"captcha.submit": "Submit",
"captcha.loading": "Loading...",
"captcha.loadFailed": "Load failed",
"captcha.loadRetry": "Load failed, please retry",
"captcha.inputAnswer": "Please enter the answer",
"captcha.wrongAnswer": "Wrong answer, please recalculate",
"captcha.verifyFailed": "Verification failed, please retry",
// Register page extras
"auth.register.domain.prefix": "Custom domain (your box URL will be: %s + ",
"auth.register.domain.suffix": " + what you fill in below)",
"auth.register.confirm": "Confirm password",
"auth.register.language": "Language",
"auth.register.languageDefault": "Use site default",
"auth.register.agreePrefix": "I have read and agree to the ",
"auth.register.agreeLink": "community rules",
"auth.register.success": "Registration successful, welcome to TamaBox!",
// Explore page extras
"explore.recommend": "Random picks",
"explore.search": "Search tags...",
"explore.sortLatest": "Newest",
"explore.sortOldest": "Oldest",
"explore.noTags": "No tags",
"explore.noRecommend": "No recommendations yet",
"explore.hotTags": "Hot Tags",
"explore.hotQuestions": "Hot Questions",
"explore.noResult": "No users match your criteria.",
"explore.lazy": "This user is too lazy to write anything~",
"explore.prevPage": "Previous",
"explore.nextPage": "Next",
"explore.loading": "Loading...",
"explore.loadFailed": "Load failed",
// Question box password page
"password.title": "This question box is password protected",
"password.desc": "This question box is password protected. Enter the password to view its contents.",
"password.input": "Enter the access password",
"password.enter": "Enter",
"password.submit": "Confirm",
// Question not found
"qitem.notFound": "Question not found or has been deleted",
// Chat page
"chat.title": "Chat",
"chat.input": "Type a message...",
"chat.send": "Send",
"chat.delete": "Delete conversation",
"chat.block": "Block user",
"chat.unblock": "Unblock user",
"chat.empty": "No messages yet. Say something~",
"chat.withAsker": "Chat with the asker",
"chat.withUser": "Chat with %s",
"chat.closed": "Conversation closed",
"chat.closedNoSend": "The conversation is closed. You cannot send new messages.",
"chat.remaining": "Messages left: %d (of %d total)",
"chat.me": "Me",
"chat.other": "Other",
"chat.userBlocked": "This user has been blocked",
"chat.addImage": "Add image (optional, max 5MB)",
"chat.confirm": "Confirm",
"chat.confirmBlock": "Block this user? They won't be able to send you messages anymore.",
"chat.confirmUnblock": "Unblock this user? They will be able to send you messages again.",
"chat.deleteConfirm": "Delete this conversation? The other party will no longer be able to see it, and this cannot be undone.",
"maintenance.title": "NekoBox is under maintenance...",
"maintenance.desc": "NekoBox is currently under maintenance and temporarily unavailable. Please come back later~",
// Single-question share (v4)
"qitem.shareCard": "Share this question",
// Follow-ups (v4)
"followup.title": "Follow-ups",
"followup.content": "Follow-up: ",
"followup.answerPlaceholder": "Answer this follow-up...",
"followup.answerBtn": "Answer",
"followup.waiting": "Waiting for answer...",
"followup.askMore": "Add a follow-up",
"followup.remaining": "%d / %d follow-ups remaining",
"followup.contentPlaceholder": "Add more details...",
"followup.waitingReply": "Your follow-up has been sent. Waiting for the box owner to reply...",
"followup.submit": "Submit",
// Pinning (v4)
"qlist.pinned": "Pinned",
"qlist.pin": "Pin",
"qlist.unpin": "Unpin",
"qlist.read": "Read",
"qlist.unread": "Unread",
"qlist.statsRead": "Read",
"qlist.statsUnread": "Unread",
// Filter bar: label is "Read" (not "Read status") so it fits the narrow mobile column;
// Yes/No is used instead of Read/Unread for the same reason.
"qlist.readFilter": "Read",
"qlist.filterYes": "Yes",
"qlist.filterNo": "No",
// Question submitted page (v4)
"success.title": "Question sent successfully!",
"success.yourQuestion": "Your question:",
"success.emailSent": "A private link to this question was sent to your email. You can also use the link below to view the question, receive replies, and follow up.",
"success.saveLink": "Please save the private link below! Since you didn't leave an email, this link (including the token) is your only credential to view the question, receive replies, and follow up. If you lose it, it cannot be recovered.",
"success.privateLink": "Your private link (click to copy)",
"success.copy": "Copy",
"success.copied": "Copied ✓",
"success.copyFailed": "Copy failed",
"success.token": "Token: %s (the asker uses this token to access the private link)",
"success.viewQuestion": "View my question",
"success.backToBox": "Back to %s's box",
"success.pageTitle": "Question Sent - %s",
// Deactivate page
"deactivate.title": "Deactivate account",
"deactivate.desc": "After deactivation your question box will be inaccessible and all data will be deleted. This cannot be undone!",
"deactivate.confirm": "I confirm I want to deactivate my account",
"deactivate.submit": "Deactivate account",
"deactivate.note": "After deactivation, your email and custom domain are kept as an identity reservation to prevent others from taking them, so you will not be able to register again with the same email. To restore your account, please contact us through the \"Contact admin\" link in the page footer.",
// Deactivated page
"deactivated.title": "Account deactivated",
"deactivated.desc": "Your question box and all data have been deleted. Thank you for using Wolf's Question Box. We hope to see you again.",
"deactivated.backHome": "Back to home",
// 处置停用页(L4)
"restricted.title": "This question box is temporarily unavailable",
"restricted.desc": "This question box has been suspended for violating community guidelines.",
// 处置通知邮件(发给箱主,四语言)
"mail.restriction.heading": "Your question box has been restricted",
"mail.restriction.greeting": "Hi %s,",
"mail.restriction.body": "Your question box @%s has been restricted at level %s (%s) until %s.",
"mail.restriction.note": "Some features are unavailable during the restriction. It lifts automatically on expiry, with no action needed.",
"mail.restriction.rules": "Read the community rules and enforcement policy",
"mail.restriction.appeal": "If you believe this is a mistake, contact the site operator through the footer link and we will review it.",
// 解除处置通知(同一封模板,文案不同)
"mail.unrestrict.heading": "Your question box restriction has been lifted",
"mail.unrestrict.body": "The restriction on your question box @%s (%s) has been lifted and the related features are available again.",
"mail.unrestrict.note": "The enforcement record is kept for audit. Content that was set private is not restored automatically; set it back to public item by item from your dashboard.",
// 处置级别名称(邮件与文案共用)
"restriction.level.L1": "Stop distribution",
"restriction.level.L2": "Narrow publishing",
"restriction.level.L3": "Freeze publishing",
"restriction.level.L4": "Suspend page",
// 举报(单题页,公开访客可用)
"report.entry": "Report this content",
"report.submit": "Submit",
"report.reason.harassment": "Harassment or abuse",
"report.reason.doxxing": "Exposing someone's account or work",
"report.reason.divisive": "Inciting group conflict",
"report.reason.other": "Other",
"report.flash.received": "Report received, thank you",
"report.errInvalidReason": "Please choose a reason",
"report.errFailed": "Failed to submit report, please try again later",
// 箱主侧举报标记(只给数量,不给举报人 IP)
"qlist.reported": "%d reports",
"qlist.reportedShort": "!%d",
"qlist.reportFilter": "Reports",
"qlist.reportedOnly": "Reported only",
"qlist.restrictionBanner": "This box is under moderation (%s). Some features are limited until %s. Contact the site owner if you have questions.",
"qlist.restrictionRulesLink": "See community rules",
// 社区规则页(处置依据,公开可访问)
"rules.title": "Community rules and content boundaries",
"rules.intro": "This is an anonymous question box for collecting questions and answers. It is not a callout board, and it should not become a battlefield for group conflicts.\n\nThe rules below are about one thing: you may dislike a work or a group of people, but you may not use this site to organize attacks on specific individuals.",
"rules.forbiddenTitle": "Not allowed",
"rules.forbidden": "1. Severe violations - content is removed immediately and the account may be banned, with no graded handling\n\n 1. Politically sensitive content, or content that endangers national security, undermines social stability, or attacks state institutions or leaders.\n 2. Violence, terrorism, or encouraging self-harm or harm to others.\n 3. Pornography, obscenity, or sexual content involving minors.\n 4. Trade in prohibited goods, gambling, fraud, pyramid schemes, or illegal fundraising.\n 5. Infringing the rights of minors or soliciting minors.\n 6. Exposing private information: real name, address, contact details, ID numbers, school or employer.\n\n2. Community conflicts - handled in graded steps (see the next section)\n\n 7. Callouts / blacklists / exposing accounts: pointing to an identifiable person (nickname, alias, profile, work tag) with a derogatory label, or urging others to avoid or attack them.\n 8. Harassment and insults, including coded nicknames with insulting judgments (for example referring to someone as an animal or an object).\n 9. Inciting group conflict by rallying one group against another along faction, stance, or identity lines.\n 10. Spam, flooding, or bulk account creation.",
"rules.enforceTitle": "What happens after a violation",
"rules.enforce": "Graded handling applies to community conflicts only:\n\n· Stop distribution: the content no longer appears in Explore and cannot generate a share card\n· Narrow publishing: new answers are private by default\n· Freeze publishing: answering and publishing are suspended, but receiving still works\n· Suspend the page: the whole box is temporarily unavailable\n· Ban: data removed, email released\n\nEvery action has an expiry date and lifts automatically. Content that has been handled is not pursued again.\n\nSevere violations skip the grading entirely: once confirmed, the content is removed at once and the account\nis limited or banned according to severity. Where laws are involved, we cooperate with the authorities as required.",
"rules.reportedTitle": "If your content was reported",
"rules.reported": "Your dashboard will show \"reported N times\". Deleting the content or setting it private closes the related reports automatically.\n\nThe notice does not mean the platform has judged you. If you believe a report is malicious, you may leave it unhandled, but please make sure the content itself does not attack a specific person.",
"rules.attackedTitle": "If you are being attacked",
"rules.attacked": "Use \"Report this content\" below the answer and choose a reason. Reports are recorded and visible to both the box owner and the site operator.\n\nReporting requires a human verification step, which exists to prevent scripted mass reporting.",
// Anonymous voting
"nav.votes": "Polls",
"common.back": "Back",
"vote.listTitle": "Poll Management",
"vote.newTitle": "New Poll",
"vote.editTitle": "Edit Poll",
"vote.resultsTitle": "Poll Results",
"vote.statsTotal": "Total Polls",
"vote.statsPublished": "Active",
"vote.createNew": "New Poll",
"vote.typeSingle": "Single choice",
"vote.typeMultiple": "Multiple choice",
"vote.typeRating": "Rating",
"vote.typeRank": "Ranking",
"vote.typeForm": "Form",
"vote.statusNotStarted": "Not started",
"vote.statusDraft": "Draft",
"vote.statusPublished": "Active",
"vote.statusEnded": "Ended",
"vote.statusArchived": "Archived",
"vote.participants": "Participants",
"vote.remainLabel": "Remaining",
"vote.perpetual": "No deadline",
"vote.durationDay": "d",
"vote.durationHour": "h",
"vote.durationMinute": "m",
"vote.createdAt": "Created",
"vote.edit": "Edit",
"vote.results": "Results",
"vote.preview": "Preview",
"vote.page.mustComplete": "Please complete",
"vote.page.rankHintRequired": "Rank 1-N (required)",
"vote.page.rankHintOptional": "Rank 1-N (optional, partial OK)",
"vote.page.previewHint": "Preview mode: this is a sample of the live page; submitting is disabled",
"vote.page.previewSubmitHint": "Preview mode; submitting is enabled after publish",
"vote.publish": "Publish",
"vote.close": "End",
"vote.share": "Copy link",
"vote.copied": "Copied",
"vote.shareURL": "Poll share link",
"vote.confirmPublish": "Publish this poll? A shareable link will be generated.",
"vote.confirmClose": "End this poll? Participants will no longer be able to vote.",
"vote.confirmDelete": "Delete this poll? All vote data will be removed and cannot be recovered!",
"vote.manageEntry": "Manage polls",
"vote.manageTitle": "Manage polls",
"vote.manageDesc": "Create and manage your anonymous polls", "vote.empty": "No polls yet. Click \"New Poll\" in the top right to get started.",
"vote.formLockedHint": "This poll is live. Only basic info can be edited; type and options are locked to protect collected votes.",
"vote.formBasic": "Basic Settings",
"vote.formTitle": "Poll Title",
"vote.formTitlePlaceholder": "e.g. What should we eat today?",
"vote.formDescription": "Description",
"vote.formDescriptionPlaceholder": "Optional details",
"vote.formType": "Poll Type",
"vote.formVisibility": "Visibility",
"vote.formVisibilityPublic": "Public (Explore + question box)",
"vote.formVisibilityLinkOnly": "Link only",
"vote.formVoterScope": "Voting Scope",
"vote.formVoterScopeAnyone": "Anyone (including anonymous)",
"vote.formVoterScopeRegistered": "Registered users only",
"vote.formShowResult": "Result Visibility",
"vote.formShowResultAfterVote": "Visible right after voting",
"vote.formShowResultAfterEnd": "Visible after the poll ends",
"vote.formShowResultOwnerOnly": "Owner only",
"vote.formStartAt": "Start time (empty = now)",
"vote.formEndAt": "End time (empty = no limit)",
"vote.formMaxChoices": "Max choices",
"vote.formMaxVotesPerFingerprint": "One vote per device per poll; repeated submissions from the same browser are blocked.",
"vote.formMaxVotesPerAccount": "One vote per registered account per poll; repeated submissions from the same account are blocked.",
"vote.formAllowCustom": "Allow participants to add custom options",
"vote.formRequireCaptcha": "Require captcha for anonymous voting",
"vote.formOptions": "Poll Options",
"vote.formRatingHint": "Rating polls need no options (1-10).",
"vote.addOption": "Add option",
"vote.optionPlaceholder": "Option text",
"vote.formFields": "Form Fields",
"vote.addField": "Add field",
"vote.field": "Field",
"vote.formFieldType": "Field Type",
"vote.fieldTypeText": "Single-line text",
"vote.fieldTypeTextarea": "Multi-line text",
"vote.fieldTypeSelect": "Dropdown select",
"vote.fieldTypeRadio": "Single choice",
"vote.fieldTypeCheckbox": "Multiple choice",
"vote.fieldTypeNumber": "Number",
"vote.fieldTypeRank": "Ranking",
"vote.page.selectPlaceholder": "Select...",
"vote.page.avgNumber": "Average",
"vote.page.fieldFilled": "Filled",
"vote.fieldTypeRating": "Rating",
"vote.formFieldLabel": "Field Label",
"vote.formFieldRequired": "Required",
"vote.formFieldMaxLength": "Max length (0 = unlimited)",
"vote.formFieldOptions": "Options",
"vote.formFieldOptionsHint": "Click \"Add option\" to add each option; no comma needed",
"vote.fieldAllowCustom": "Allow participants to add a custom option",
"vote.formFieldOptionsPlaceholder": "e.g. Great,Okay,Poor",
"vote.createDraft": "Save draft",
"vote.builderHintOptions": "At least 2 options are required",
"vote.builderHintFields": "Add at least 1 field",
"vote.builderHintFieldOptions": "Choice/rank fields need options (rank needs at least 2)",
"vote.resultsAnswered": "Answered",
"vote.page.rankedTimes": "Ranked",
"vote.resultsTotal": "Total participants",
"vote.resultsSubmissions": "Form responses",
"vote.resultsViewTexts": "View text responses",
"vote.resultsToggleHint": "Click to expand or collapse text responses",
"vote.resultsOptions": "Poll results",
"vote.resultsVotes": "votes",
"vote.export": "Export CSV",
"vote.resultsEmpty": "No participation yet. Share the link!",
// Poll participation page
"vote.inlineTitle": "Polls",
"vote.page.by": "poll",
"vote.page.goVote": "Vote",
"vote.page.notStarted": "Not started",
"vote.page.notStartedHint": "This poll has not started yet.",
"vote.page.ended": "Ended",
"vote.page.endedHint": "This poll has ended.",
"vote.page.active": "Active",
"vote.page.participated": "Participated",
"vote.page.loginRequired": "This poll is limited to registered users. Please log in first.",
"vote.page.anonymousHint": "Anonymous participation is allowed and your identity is not recorded (max 1 per device).",
"vote.page.submit": "Submit vote",
"vote.page.alreadyVoted": "You have already participated in this poll. Thanks!",
"vote.page.resultsTitle": "Poll Results",
"vote.page.anonymousNotice": "Anonymous poll — one vote per person, results are indicative only.",
"vote.page.totalVotes": "Total",
"vote.page.avgRating": "Average",
"vote.page.avgRank": "Avg rank",
"vote.page.optionColumn": "Option",
"vote.page.ratingLabel": "Rate",
"vote.page.ratingUnit": "pts",
"vote.page.rankHint": "Rank each option 1-N (smaller = higher, no duplicates)",
"vote.page.rankPlaceholder": "Rank",
"vote.page.multipleHint": "Multiple choice",
"vote.page.customOption": "Custom option (optional)",
"vote.page.customPlaceholder": "Type your own option",
"vote.page.customOther": "Other",
"vote.page.customFieldPlaceholder": "Type a custom option...",
"vote.page.customStats": "Custom options",
"vote.page.formCount": "Responses received",
"vote.page.ownerManage": "Manage this poll (results visible only to you)",
// Per-poll quota collection
"vote.formQuotaLimit": "Collection quota (responses)",
"vote.formQuotaHint": "0 means unlimited; the poll ends automatically once the quota is reached.",
"vote.flash.notFound": "This poll does not exist or is no longer available",
"vote.flash.notPublished": "This poll has not been published yet",
"vote.flash.archived": "This poll has been archived and is closed",
"vote.flash.ended": "This poll has ended",
"vote.flash.notStarted": "This poll has not started yet",
"vote.flash.success": "Vote submitted. Thanks for participating!",
"vote.err.noChoice": "Please select at least one option",
"vote.err.tooManyChoices": "You can select at most %d options",
"vote.err.pickOne": "Please select an option",
"vote.err.invalidOption": "Invalid option",
"vote.err.optionDuplicate": "Options cannot be duplicated",
"vote.err.ratingRequired": "Please provide a rating from 1 to 10",
"vote.err.rankRequired": "Please rank every option from 1 to %d",
"vote.err.rankDuplicate": "Rankings must not repeat",
"vote.err.fieldRequired": "Please fill in \"%s\"",
"vote.err.fieldCustomRequired": "Please fill in the custom option for \"%s\"",
"vote.err.fieldCustomTooLong": "The custom option for \"%s\" must be at most %d characters",
"vote.err.fieldInvalidOption": "Invalid option for \"%s\"",
"vote.err.fieldConfigError": "Misconfigured options for \"%s\"",
"vote.err.fieldRankIncomplete": "Please provide a complete ranking for \"%s\"",
"vote.err.fieldRankRange": "The ranking for \"%s\" must be a number between 1 and %d",
"vote.err.fieldRankDuplicate": "Rankings for \"%s\" must not repeat",
"vote.err.fieldTooLong": "\"%s\" exceeds the length limit (max %d characters)",
"vote.err.fieldNotNumber": "\"%s\" must be a number",
"vote.err.fieldRating": "\"%s\" requires a rating from 1 to 10",
"vote.err.unknownType": "Unknown poll type",
"vote.err.customTooLong": "The custom option must be at most %d characters",
"vote.err.blockWords": "Your submission contains a blocked word set by the poll creator and could not be submitted",
"vote.err.serialize": "Failed to serialize the submission",
"captcha.error": "Captcha verification failed",
"captcha.errEmpty": "Captcha cannot be empty",
"captcha.errFormat": "Invalid captcha format, please refresh and try again",
"captcha.errAnswerFormat": "Invalid captcha answer format",
"captcha.errExpired": "Captcha expired, please refresh and try again",
"captcha.errService": "Captcha service error, please try again later",
"captcha.errAnswerWrong": "Incorrect captcha answer",
"censor.unavailable": "The content moderation service is temporarily unavailable. Please try again later.",
// Feature management: switch / schedule / quota for questions, chats and polls
"admin.tabAccount": "Settings",
"admin.featuresHint": "Manage the switch, opening hours and collection quota of each feature on the Questions / Chats / Polls panels. A feature closes automatically once its quota is reached.",
"admin.featuresEntry": "Settings",
"admin.featureHint.question": "Visitors cannot submit new questions while closed; collection stops automatically once the quota is reached (private questions included).",
"admin.featureHint.chat": "Visitors cannot start new chats while closed; existing conversations are unaffected.",
"admin.featureHint.vote": "Your polls are hidden from your box page and cannot be answered while closed. Each poll can also define its own quota on the edit page.",
"admin.featureEnabled": "Enable this feature",
"admin.featureOpenAt": "Open at",
"admin.featureCloseAt": "Close at",
"admin.featureTimeHint": "Leave blank for no limit; the feature is unavailable before the open time and after the close time.",
"admin.featureSchedule": "Recurring schedule (weekly)",
"admin.featureScheduleStart": "Daily start",
"admin.featureScheduleEnd": "Daily end",
"admin.featureScheduleHint": "Select the weekdays and a daily time window to open every week. Leave all empty to disable. Days without a time window open all day; a time window with no weekday selected opens every day.",
"admin.featureMode": "Schedule mode",
"admin.featureModeAlways": "Always open",
"admin.featureModeWindow": "One-time window",
"admin.featureModeRecurring": "Weekly schedule",
"admin.featureModeHint": "Always open: no time limit until manually disabled. One-time window: a single open/close time window. Weekly schedule: recurring weekly open days and hours. Modes are mutually exclusive; settings of unselected modes are cleared on save.",
"admin.featureQuotaLimit": "Collection quota (items)",
"admin.featureQuotaHint": "0 means unlimited; the feature closes automatically once the quota is reached. Reset the counter to start a new round.",
"admin.featureQuotaCount": "Collected",
"admin.featureQuotaUnlimited": "Unlimited",
"admin.featureQuotaResetAt": "Last reset: ",
"admin.featureResetQuota": "Reset counter",
"admin.featureSave": "Save this feature",
// Protection panel: aggregates anti-harassment / blocked words / moderation strictness / page password / ask password
"admin.tabSecurity": "Protection",
// Feature management: states and messages
"feature.name.question": "Questions",
"feature.name.chat": "Chats",
"feature.name.vote": "Polls",
"feature.statusOpen": "Open",
"feature.status.disabled": "Closed",
"feature.status.not_started": "Not started",
"feature.status.ended": "Ended",
"feature.status.quota_reached": "Quota reached",
"feature.saved": "Feature settings saved",
"feature.errTime": "Invalid date for %s, please use the date-time picker",
"feature.errTimeRange": "The close time of %s must be later than the open time",
"feature.errQuota": "The collection quota of %s must be an integer between 0 and 1000000",
"feature.errInvalid": "Unknown feature",
"feature.quotaReset": "The collection counter of %s has been reset",
"feature.errScheduleHalf": "The recurring start and end times of %s must be filled in together",
"feature.errScheduleTime": "Invalid recurring time for %s, please use the time picker",
"feature.errScheduleRange": "The recurring end time of %s must be later than the start time",
// Messages shown to visitors when a feature is closed
"feature.disabled.question": "The box owner has closed questions",
"feature.disabled.chat": "This box does not accept chats",
"feature.disabled.vote": "This box has closed polls",
"feature.not_started.question": "Questions are not open yet",
"feature.not_started.chat": "Chats are not open yet",
"feature.not_started.vote": "Polls are not open yet",
"feature.ended.question": "Question collection has ended",
"feature.ended.chat": "Chats have ended",
"feature.ended.vote": "Polls have ended",
"feature.quota_reached.question": "The question quota has been reached",
"feature.quota_reached.chat": "The chat quota has been reached",
"feature.quota_reached.vote": "The poll quota has been reached",
// Auth: visitor-visible messages (P0)
"auth.errBadCredential": "Incorrect email or password",
"auth.errUserNotFound": "User does not exist",
"auth.errEmailFrequent": "Emails are sent too frequently, please try again later",
"auth.errEmailFailed": "Failed to send email, please try again later",
"auth.errCodeExpired": "The verification code has expired",
"auth.errPasswordChanged": "Password changed successfully",
"auth.errLoginRequired": "Please log in first",
"auth.errDuplicateEmail": "This email is already registered",
"auth.errDuplicateDomain": "This custom domain is already taken",
// The deactivated account still holds this email/domain as an identity reservation
"auth.errDeactivatedEmail": "The account for this email has been deactivated. To use it again, please contact us through the \"Contact admin\" link in the page footer, using this email address.",
"auth.errDeactivatedDomain": "The account for this custom domain has been deactivated. To use it again, please contact us through the \"Contact admin\" link in the page footer.",
// Question box page: visitor-visible (P0)
"question.errWrongPassword": "Wrong password",
"question.errPasswordLocked": "Too many wrong attempts. Please try again in %d minutes.",
"question.errAskPasswordWrong": "Wrong ask password",
"question.errLoginRequired": "The owner only allows registered users to ask questions. Please log in first.",
"question.errSelfChat": "You cannot start a chat with yourself",
"question.errBlockedChat": "You have been blocked by the other party and cannot start a chat",
"question.errChatDailyLimit": "You have reached today's message limit (%d). Please try again tomorrow",
"question.errDuplicateSubmit": "Duplicate submission detected, please try again later",
"question.errImageTooLarge": "Image file size cannot exceed 5Mb",
"question.errUploadImageFailed": "Failed to upload image",
"question.errBlockWords": "The question contains a blocked word set by the box owner, and could not be sent",
"question.errAnsweredLocked": "An answered question cannot be marked as unread",
"question.flash.chatSent": "Chat request sent! You can view the conversation via this link: %s",
"question.flash.answered": "Answer published successfully!",
"question.flash.operated": "Operation successful",
"question.flash.markedRead": "Marked as read",
"question.flash.markedUnread": "Marked as unread",
"question.flash.noUnread": "No unread questions left",
// 平台处置(L1–L4):被处置箱主在处置期内不能发布公开内容
"question.errRestrictedPublish": "Publishing is suspended while this box is under moderation",
"question.errRestrictedPublic": "Content cannot be made public while this box is under moderation",
"question.flash.answeredPrivate": "Saved as private: this box is under moderation, so the answer stays hidden",
// Follow-ups: visitor/owner visible (P0)
"followup.errNoPermission": "Permission denied",
"followup.errNotAnswered": "This question has not been answered yet, so you cannot follow up",
"followup.errLimit": "Each question allows at most %d follow-ups, and the limit has been reached",
"followup.errWaitReply": "Please wait for the owner to reply to your previous follow-up before continuing",
"followup.errNotFound": "The follow-up does not exist",
"followup.flash.sent": "Follow-up sent successfully!",
"followup.flash.answered": "Answer posted successfully!",
// Admin settings: owner visible (P1)
"admin.flash.profileUpdated": "Profile updated successfully",
"admin.flash.chatUpdated": "Chat settings updated successfully",
"admin.flash.pagePwdOff": "Page password access disabled",
"admin.flash.pagePwdUpdated": "Page access password updated",
"admin.flash.askPwdOff": "Ask password disabled",
"admin.flash.askPwdUpdated": "Ask password updated",
"admin.flash.tagsTooMany": "You can have at most 5 tags",
"admin.flash.tagsUpdated": "Tags updated successfully",
"admin.flash.tagTooLong": "Each tag cannot exceed 5 characters: %s",
"admin.flash.blockWordsTooMany": "You can have at most 10 blocked words",
"admin.flash.blockWordTooLong": "A blocked word cannot exceed 10 characters: %s",
"admin.flash.harassmentUpdated": "Anti-harassment settings updated successfully",
"admin.flash.blockWordsUpdated": "Blocked words updated",
"admin.export.errUser": "Export failed: could not get user information",
"admin.export.errQuestion": "Export failed: could not get question information",
"admin.flash.moderationStrictnessUpdated": "Moderation strictness updated",
"admin.flash.moderationStrictnessInvalid": "Invalid moderation strictness value, nothing was saved",
"admin.flash.strictnessLocked": "Moderation strictness is locked at the highest level during a restriction and restored afterwards",
// Vote management: owner visible (P1)
"vote.err.invalidID": "Invalid vote ID",
"vote.err.notExist": "The vote does not exist",
"vote.err.noPermission": "You are not allowed to operate this vote",
"vote.err.type": "Unknown poll type",
"vote.err.titleRequired": "Please fill in the poll title",
"vote.err.titleTooLong": "The poll title cannot exceed 100 characters",
"vote.err.visibility": "Unknown visibility setting",
"vote.err.voterScope": "Unknown voting scope setting",
"vote.err.showResult": "Unknown result visibility setting",
"vote.err.timeRange": "The end time must be later than the start time",
"vote.err.quota": "The collection quota must be an integer between 0 and 1000000",
"vote.err.optionsTooFew": "Please add at least 2 options",
"vote.err.optionsFormat": "Invalid options data format",
"vote.err.optionTooLong": "A single option cannot exceed %d characters",
"vote.err.maxChoicesExceed": "The max choices cannot exceed the total number of options",
"vote.err.fieldsTooFew": "Please add at least 1 form field",
"vote.err.fieldsFormat": "Invalid form fields data format",
"vote.err.fieldsTooMany": "You can have at most 50 form fields",
"vote.err.fieldType": "Unknown form field type",
"vote.err.fieldLabelMissing": "Field #%d is missing a label",
"vote.err.fieldLabelTooLong": "Field #%d label cannot exceed 100 characters",
"vote.err.fieldLabelDuplicate": "The field label \"%s\" is duplicated, please use a different label",
"vote.err.fieldMaxLength": "Field #%d max length must be between 0 and 2000",
"vote.err.fieldReservedOption": "Field #%d (%s) contains a reserved option value, please change it",
"vote.err.fieldOptionsTooFew": "Field #%d (%s) needs at least 1 option",
"vote.err.fieldRankTooFew": "Field #%d (%s) ranking questions need at least 2 options",
"vote.err.fieldSerialize": "Failed to serialize field options",
"vote.err.editClosed": "Votes that are ended or archived cannot be edited",
"vote.err.publishDraftOnly": "Only draft polls can be published",
"vote.err.closePublishedOnly": "Only active polls can be closed",
"vote.err.publishTitleRequired": "Please fill in the poll title before publishing",
"vote.err.publishFormFieldsRequired": "Form polls need at least 1 field",
"vote.err.publishOptionsRequired": "Choice polls need at least 2 options",
"vote.err.optionUpdateFailed": "Failed to update options, please retry",
"vote.err.fieldUpdateFailed": "Failed to update form fields, please retry",
"vote.flash.published": "Poll published! Share link: %s",
"vote.flash.updated": "Poll info updated (active polls cannot change type or options)",
"vote.flash.draftSaved": "Saved to draft",
"vote.flash.closed": "Poll ended",
"vote.flash.deleted": "Poll deleted",
"vote.err.timeFormat": "Invalid time format, please use the datetime picker",
"vote.err.maxChoicesLimit": "Maximum number of choices cannot exceed 20",
"vote.err.descriptionTooLong": "Vote description cannot exceed 5000 characters",
"profile.err.avatarTooLarge": "Avatar file is too large, maximum 2MB",
"profile.err.backgroundTooLarge": "Background image is too large, maximum 2MB",
"profile.err.newPasswordTooShort": "New password must be at least 8 characters",
"profile.err.badOldPassword": "Incorrect old password",
"admin.export.errCreateExcel": "Export failed: could not create Excel file",
"admin.export.errWriteExcel": "Export failed: could not write Excel file",
// Profile page UI rework: card sections / avatar & background cropping / force re-login after password change
"profile.card.basic": "Basic info",
"profile.card.avatarBg": "Avatar & background",
"profile.card.qr": "QR code style",
"profile.card.password": "Change password",
"profile.avatarCropHint": "Crop frame is locked to 1:1 (square)",
"profile.backgroundCropHint": "Crop frame is locked to 16:9",
"profile.cropTitle": "Crop image",
"profile.cropConfirm": "Apply crop",
"profile.err.avatarRatio": "Avatar image must be a 1:1 square. Please crop it and upload again.",
"profile.err.backgroundRatio": "Background image must have a 16:9 aspect ratio. Please crop it and upload again.",
"profile.flash.passwordChanged": "Password changed. You have been signed out; please sign in again with your new password.",
"profile.pwdNote": "After saving, your current session will end immediately and you will need to sign in again with the new password.",
"profile.pickAvatar": "Change avatar",
"profile.pickBackground": "Change background",
"profile.saveBasic": "Save basic info",
"profile.saveMedia": "Save avatar & background",
"profile.savePassword": "Update password",
"profile.saveQR": "Save QR code style",
"profile.saveSocial": "Save social links",
"profile.err.cropLibUnavailable": "The image cropper failed to load. Please refresh the page and try again.",
// Captcha JSON endpoint: consumed by frontend (P2)
"captcha.json.badRequest": "Invalid request format",
"captcha.json.idRequired": "Captcha ID cannot be empty",
"captcha.json.genFailed": "Failed to generate captcha",
"chat.errDeletedByOwner": "This private conversation has been deleted by the other party.",
"chat.errBlockedView": "You have been blocked by the other party and cannot view this chat",
"chat.errEmpty": "Message cannot be empty",
"chat.errTooLong": "Message is too long, please keep it within %d characters",
"chat.errConvDeletedSend": "This conversation has been deleted and messages cannot be sent",
"chat.errBlockedSend": "You have been blocked by the other party and cannot send messages",
"chat.errBlockWords": "Your message contains a blocked word set by the box owner and could not be sent",
"chat.errDailyLimit": "You have reached today's message limit (%d), please try again tomorrow",
"chat.errLimitReached": "The conversation has reached its limit and no new messages can be sent",
"chat.errChatClosed": "The box owner has disabled private chat and messages cannot be sent",
"chat.errImageTooLarge": "Image size cannot exceed %dMB",
"chat.errUploadFailed": "Image upload failed, please try again later",
"chat.errNoPermission": "You are not authorized to perform this action",
"chat.flash.sent": "Message sent successfully",
"chat.flash.deleted": "Private conversation deleted",
"chat.flash.operated": "Operation successful",
"image.errTooLarge": "Image is too large, maximum supported size is %d×%d pixels, please compress and re-upload",
"internal.errFlash": "Internal server error, please try again later.",
"internal.errServer": "Internal server error",
"home.errStats": "Failed to retrieve statistics",
"pixel.errPath": "Invalid request path",
"proxy.errNotFound": "Page not found",
"proxy.errInternal": "Service gateway internal error",
"explore.errRandomUser": "Failed to retrieve random users",
// 表单校验
"form.answer.content": "Answer content is required",
"form.answer.contentTooLong": "Answer content must be within %d characters",
"form.email.required": "Please enter a valid email address",
"form.followup.answer": "Follow-up answer is required",
"form.followup.answerTooLong": "Follow-up answer must be within %d characters",
"form.followup.content": "Follow-up content is required",
"form.followup.contentTooLong": "Follow-up content must be within %d characters",
"form.login.password": "Please enter your password",
"form.profile.backgroundimagealpha": "Please enter the QR code background opacity",
"form.profile.colorHex": "Please enter a 7-character hex color code (including #)",
"form.profile.dotscale": "Please enter the QR code dot size",
"form.profile.intro": "Bio is required and must be at most 100 characters",
"form.profile.linkMax": "Profile link must be at most 30 characters",
"form.profile.name": "Nickname is required and must be at most 20 characters",
"form.profile.newPassword": "New password must be at most 30 characters",
"form.profile.passwordMax": "Password must be at most 30 characters",
"form.profile.passwordLen": "Please set a password of 6–30 characters",
"form.question.content": "Question content is required",
"form.question.contentTooLong": "Question content must be within %d characters",
"form.question.receiveReplyEmail": "Please enter a valid email address to receive replies",
"form.recaptcha": "Please complete the CAPTCHA verification",
"form.recover.newPassword": "Please set a new password of 8–30 characters",
"form.recover.repeatPassword": "The two new passwords do not match",
"form.register.domain": "The custom domain may only contain letters, digits and underscores, and must be 3–20 characters long",
"form.register.email": "Please enter a valid email address (max 100 characters)",
"form.register.name": "Nickname is required and must be at most 20 characters",
"form.register.password": "Please set a password of 8–30 characters",
"form.register.recaptcha": "Unable to load the CAPTCHA. Please refresh the page or switch your network and try again",
"form.register.agreeRules": "Please read and accept the community rules first",
"form.register.repeatPassword": "The two passwords do not match",
// 主题:设置页选择器与主题显示名(theme.name. 由 internal/theme 约定)
"profile.theme.title": "Theme",
"profile.theme.hint": "Applies to your box pages, the votes you publish, and your dashboard; site pages such as home and explore keep the default look.",
"profile.theme.followDefault": "Follow site default",
"profile.theme.save": "Save theme",
"profile.theme.saved": "Theme saved",
"profile.theme.invalid": "That theme is unavailable — pick one from the list",
"theme.name.default": "Default look",
"theme.name.sakura": "Sakura",
"theme.name.shiroko": "Shiroko",
"theme.name.new-sakura": "New Sakura",
// Site statistics page (/stats): aggregate numbers only
"site.footer.stats": "Statistics",
"stats.title": "Site statistics",
"stats.lead": "Only aggregate numbers here: how many questions the site receives, how fast they get answered, and when people tend to show up. No individual question, asker identity, or source address is shown.",
"stats.unavailable": "Statistics are temporarily unavailable. Please check back later.",
"stats.today.questions": "Asked today",
"stats.today.answers": "Answered today",
"stats.today.tag": "(live)",
"stats.kpi.users": "Registered users",
"stats.kpi.questions": "Questions asked",
"stats.kpi.answered": "Answered",
"stats.kpi.answerRate": "Answer rate",
"stats.kpi.activeBoxes": "Boxes that received questions",
"stats.kpi.messages": "Direct messages",
"stats.insight.title": "At a glance",
"stats.insight.empty": "Not enough question data yet.",
"stats.insight.daily30": "%s questions in the last 30 days, about %.1f per day.",
"stats.insight.peak": "Busiest day was %s with %s questions.",
"stats.insight.busiest": "Questions cluster around %s %d:00.",
"stats.insight.momDown": "%s had %s questions; %s had %s, down %.1f%%.",
"stats.insight.momFlat": "%s had %s questions; %s had %s, unchanged.",
"stats.insight.momUp": "%s had %s questions; %s had %s, up %.1f%%.",
"stats.insight.fastReply": "%s%% of answered questions got a reply within 24 hours.",
"stats.insight.private": "%s%% of questions were sent privately.",
"stats.trend.dailyTitle": "Questions over the last 30 days",
"stats.trend.dailyNote": "Daily question count.",
"stats.trend.monthlyTitle": "Questions per month (last 12)",
"stats.trend.monthlyNote": "The last bar is the current month, still in progress.",
"stats.mix.title": "Composition",
"stats.mix.note": "Three ratios: public or private, answered or not, and whether the asker was signed in.",
"stats.mix.public": "Public questions",
"stats.mix.answered": "Answered",
"stats.mix.login": "From signed-in users",
"stats.heat.title": "When questions arrive",
"stats.heat.note": "Questions from the last %d days grouped by weekday and hour — darker means busier.",
"stats.heat.less": "Less",
"stats.heat.more": "More",
"stats.content.title": "Length and pace",
"stats.content.note": "How long questions are, and how fast they get answered.",
"stats.content.lengthTitle": "Question length",
"stats.content.replyTitle": "Time to answer",
"stats.len.1": "under 20 chars",
"stats.len.2": "20–49 chars",
"stats.len.3": "50–99 chars",
"stats.len.4": "100–199 chars",
"stats.len.5": "200–499 chars",
"stats.len.6": "500+ chars",
"stats.reply.1": "within 1 hour",
"stats.reply.2": "1–6 hours",
"stats.reply.3": "6–24 hours",
"stats.reply.4": "1–3 days",
"stats.reply.5": "3–7 days",
"stats.reply.6": "over 7 days",
"stats.wd.1": "Mon",
"stats.wd.2": "Tue",
"stats.wd.3": "Wed",
"stats.wd.4": "Thu",
"stats.wd.5": "Fri",
"stats.wd.6": "Sat",
"stats.wd.7": "Sun",
"stats.weekday.1": "Monday",
"stats.weekday.2": "Tuesday",
"stats.weekday.3": "Wednesday",
"stats.weekday.4": "Thursday",
"stats.weekday.5": "Friday",
"stats.weekday.6": "Saturday",
"stats.weekday.7": "Sunday",
"stats.foot.updated": "Snapshot:",
"stats.foot.prevMonth": "Last question:",
"stats.foot.prevAnswer": "Last answer:",
"stats.foot.privacy": "All figures are aggregates; no individual question, asker, or source address is shown.",
"stats.foot.cacheNote": "Totals and charts are updated once a day; the two \"today\" figures are live.",
}