// 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.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.drive": "Drive", "site.footer.status": "Status", "site.footer.nav": "Links", "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", // 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 (leave empty to disable)", "admin.askPassword": "Ask password", "admin.askPasswordHint": "Set a password for asking (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", "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 all data (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": "Verify & 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.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.readStatus": "Read status", "qlist.read": "Read", "qlist.unread": "Unread", "qlist.statsRead": "Read", "qlist.statsUnread": "Unread", // 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", // 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.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", // 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", // Question box page: visitor-visible (P0) "question.errWrongPassword": "Wrong password", "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", // 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.flash.deactivated": "Your account has been deactivated. Thank you for using Wolf's Question Box. We hope to see you again 👋🏻", "admin.export.errUser": "Export failed: could not get user information", "admin.export.errQuestion": "Export failed: could not get question information", // 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.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.repeatPassword": "The two passwords do not match", }