diff --git a/en/bot.json b/en/bot.json index b5f95c2..ee1622c 100644 --- a/en/bot.json +++ b/en/bot.json @@ -378,6 +378,67 @@ }, "ping": { "description": "Ping the bot." + }, + "sus": { + "description": "Manually manage Suspicion Level.", + "add": { + "description": "Grant Suspicion Level to a user.", + "options": { + "user": { + "description": "Target user" + }, + "level": { + "description": "Level to grant (1=GRAY, 2=BLACKISH, 3=DANGER)" + } + } + }, + "remove": { + "description": "Remove Suspicion Level from a user.", + "options": { + "user": { + "description": "Target user" + } + } + } + }, + "mod": { + "description": "Advanced moderation commands.", + "quarantine": { + "description": "Quarantine a user (apply quarantine role and strip permissions).", + "options": { + "user": { + "description": "User to quarantine" + }, + "reason": { + "description": "Reason for quarantine" + } + } + }, + "unquarantine": { + "description": "Unquarantine a user.", + "options": { + "user": { + "description": "User to unquarantine" + }, + "reason": { + "description": "Reason for unquarantine" + } + } + }, + "info": { + "description": "Show user's moderation status (Heat, Suspicion, etc.).", + "title": "Moderation Info for {user}", + "heat": "Current Heat", + "suspicion": "Suspicion Level", + "last_violation": "Last Violation", + "trust_status": "Trust Status", + "violations": "Violation History Counts", + "options": { + "user": { + "description": "User to show info for" + } + } + } } }, "context": { @@ -490,7 +551,8 @@ "success": "✅ Successfully gave role to {user}.", "cant_find_role_or_member": "❌ We couldn't find the role or member.", "failed_add_role": "❌ Failed to give role to {user}.\nPlease check role hierarchy and permissions.", - "already_has_role": "ℹ️ {user} already has the role." + "already_has_role": "ℹ️ {user} already has the role.", + "dangerous_role_blocked": "❌ This role has dangerous permissions. Only users with AntiNuke exemption can grant it." }, "remove": { "success": "✅ Successfully removed role from {user}.", @@ -548,6 +610,53 @@ "delete": { "success": "Deleted sticky message." } + }, + "sus": { + "added": "✅ Added Suspicion Level {level} to <@{userId}>.", + "removed": "✅ Removed Suspicion Level from <@{userId}>.", + "already_exists": "User <@{userId}> is already in that state or the action was skipped." + }, + "report": { + "self_error": "You cannot report yourself or the bot.", + "reporter_prefix": "Reported by: {moderatorTag} — {reason}", + "success": "✅ Reported <@{userId}>. A moderator will review it shortly.", + "modal_title": "Report Message", + "modal_reason_label": "Reason for report", + "modal_reason_placeholder": "Spam, harassment, rule violation, etc.", + "no_content": "no text content", + "log_title": "Message Reported", + "log_reporter": "Reporter", + "log_target": "Reported User", + "log_channel": "Channel", + "log_reason": "Reason", + "log_message": "Message Content" + }, + "verify": { + "not_found": "Member not found.", + "no_role_configured": "PoW Gate verification role is not configured.", + "not_in_gate": "<@{userId}> is not pending verification.", + "success": "✅ Manually verified <@{userId}>." + }, + "quarantine": { + "cannot_quarantine_self": "You cannot quarantine yourself or the bot.", + "modal_title": "Quarantine Member", + "modal_reason_label": "Reason (optional)", + "modal_reason_placeholder": "e.g. Spam, suspicious behavior, etc.", + "not_found": "Member not found.", + "manual_prefix": "Manual quarantine by moderator", + "success": "✅ Quarantined <@{userId}>.", + "already_quarantined": "<@{userId}> is already quarantined." + }, + "flag_suspicious": { + "cannot_flag_self": "You cannot flag yourself or the bot as suspicious.", + "success": "✅ Added Suspicion Level 1 (Gray) to <@{userId}>." + }, + "setup": { + "owner_only": "❌ Only the server owner can run this command.", + "already_setup": "❌ This server is already set up.", + "success": "✅ Setup completed successfully.", + "no_manage_roles": "❌ The bot is missing the **Manage Roles** permission. Please grant it and try again.", + "role_too_low": "❌ The bot's role (**{roleName}**) is too low. Please move it to the top 3 in the role list and try again." } }, "info": { @@ -881,7 +990,40 @@ "message_content": "Message Content", "before_embed_preview": "Embed Before Edit", "after_embed_preview": "Embed After Edit", - "removed": "Removed" + "removed": "Removed", + "embeds_deleted_threaded": "Deleted message embeds (see thread for details)", + "embed_deleted_thread_name": "deleted-embed-{id}", + "embed_deleted_thread_intro": "This thread stores the embed preview of the deleted message.", + "deleted_embed_preview": "Deleted Embed", + "emoji": "Emoji", + "message": "Message", + "enabled": "Enabled", + "disabled": "Disabled", + "afk_channel": "AFK Channel", + "afk_timeout": "AFK Timeout", + "mfa_level": "2FA Requirement", + "widget_enabled": "Widget", + "widget_channel": "Widget Channel", + "preferred_locale": "Preferred Language", + "safety_alerts_channel": "Safety Alerts Channel", + "nsfw_level": "NSFW Level", + "public_updates_channel": "Community Updates Channel", + "features_added": "Features Added", + "features_removed": "Features Removed", + "automod_trigger": "Trigger Type", + "automod_trigger_keyword": "Keyword", + "automod_trigger_spam": "Spam", + "automod_trigger_preset": "Keyword Preset", + "automod_trigger_mention_spam": "Mention Spam", + "automod_trigger_member_profile": "Member Profile", + "automod_actions": "Actions", + "automod_action_block": "Block Message", + "automod_action_alert": "Send Alert", + "automod_action_timeout": "Timeout", + "automod_action_block_interaction": "Block Interaction", + "automod_enabled": "Enabled", + "automod_exempt_roles": "Exempt Roles", + "automod_exempt_channels": "Exempt Channels" }, "events": { "guild_update": "Server Updated", @@ -898,6 +1040,8 @@ "message_update": "Message Edited", "message_update_embed_before": "Embed Preview Before Edit", "message_update_embed_after": "Embed Preview After Edit", + "message_reaction_add": "Reaction Added", + "message_reaction_remove": "Reaction Removed", "member_add": "Member Joined", "member_remove": "Member Left", "member_kick": "Member Kicked", @@ -930,7 +1074,230 @@ "guild_scheduled_event_delete": "Event Deleted", "thread_create": "Thread Created", "thread_update": "Thread Updated", - "thread_delete": "Thread Deleted" + "thread_delete": "Thread Deleted", + "automod_rule_create": "AutoMod Rule Created", + "automod_rule_update": "AutoMod Rule Updated", + "automod_rule_delete": "AutoMod Rule Deleted" + }, + "reason": { + "role_keeper_regrant": "RoleKeeper: Re-granting previously held roles", + "pow_gate_success": "PoW Gate: Verification successful", + "role_add_manual": "Role command: Added by {userTag}", + "role_remove_manual": "Role command: Removed by {userTag}", + "role_add_bulk": "Role command (Bulk): Added by {userTag}", + "role_remove_bulk": "Role command (Bulk): Removed by {userTag}", + "workflow_role_add": "Workflow: Role granted", + "workflow_role_remove": "Workflow: Role removed", + "workflow_timeout_add": "Workflow: Timeout applied", + "workflow_timeout_remove": "Workflow: Timeout removed", + "workflow_thread_create": "Workflow: Thread created", + "workflow_thread_delete": "Workflow: Thread deleted", + "workflow_kick": "Workflow: Kicked", + "workflow_ban": "Workflow: Banned", + "join_gate_pow": "JoinGate: PoW Gate requirement", + "verify_manual": "Context Verify: Verified manually by {userTag}", + "audit_test": "Audit Test" + } + }, + "moderation": { + "mod_log": { + "title": "🚨 Moderation Action", + "body": "**User:** <@{userId}> ({userTag})\n**Action(s):** {actions}\n**Reason:** {reason}", + "default_reason": "Automod Action", + "failed_title": "⚠️ Moderation Action Failed", + "failed_body": "**User:** <@{userId}> ({userTag})\n**Attempted action(s):** {actions}\n**Reason:** {reason}\n\nThe action could not be performed because the target has administrator permission or a role higher than the bot. Please handle this manually.", + "btn_ban": "BAN", + "btn_kick": "Kick", + "btn_unquarantine": "Release", + "btn_untimeout": "Remove Timeout", + "btn_false_positive": "False Positive", + "btn_confirm_spam": "Confirm Spam" + }, + "review_queue": { + "title": "🔍 Review Required (Gray Zone)", + "body": "**Target:** <@{userId}> ({userTag})\n**Reason:** {reason}\n\nAutomatic detection confidence was low. Please review this case manually." + }, + "warn": { + "dm_title": "⚠️ Warning", + "dm_body": "You have received a warning from **{guildName}**'s auto-moderation. Please review the server rules." + }, + "notify_owner": { + "dm_title": "🛡️ Anti-Nuke Detected (Owner Notification)", + "dm_body": "**Server:** {guildName}\n**Target:** <@{userId}> ({userTag})\n**Reason:** {reason}\n**Action applied:** {action}\n\nAnti-Nuke detected a destructive action. Please verify manually that this is not a false positive.", + "no_action": "Could not be applied (manual action required)" + }, + "scheduled_security": { + "started_title": "🔒 Scheduled Security Started", + "started_body": "**{action}** has started.\nActive window: {range}", + "ended_title": "🔓 Scheduled Security Ended", + "ended_body": "**{action}** has ended and the original state was restored.", + "type": { + "invite_disable": "Invite pause", + "dm_disable": "Member DM pause", + "security_level": "Raised verification level" + } + }, + "appeal_dm": { + "quarantine_title": "⚠️ Quarantine Applied", + "timeout_title": "⚠️ Timeout Applied", + "body": "**Server:** {guildName}\n**Reason:** {reason}\n\nAuto-moderation has applied a {label} to your account. If you believe this is a false positive, you can submit an appeal using the button below.", + "quarantine_label": "Quarantine", + "timeout_label": "Timeout", + "btn_appeal": "Submit Appeal" + }, + "notify": { + "channel_title": "🚨 Auto Moderation", + "channel_body": "Applied punishment to <@{userId}>.\n**Action:** {action}\n**Reason:** {reason}" + }, + "appeal_modal": { + "title": "Submit Appeal", + "reason_label": "Reason for Appeal", + "reason_placeholder": "Please describe why you believe this action was a false positive.", + "success": "✅ Your appeal has been submitted. A moderator will review it shortly.", + "already_submitted": "❌ You have already submitted an appeal. Please wait for a moderator to review it.", + "log_title": "📩 Appeal Received", + "log_body": "**Appellant:** <@{userId}> ({userTag})\n**Message:**\n{reason}" + }, + "mod_ban": { + "success": "Successfully banned user <@{userId}>.", + "failed": "Failed to ban user <@{userId}>.", + "reason": "Banned by {moderatorTag} via Mod-Log" + }, + "mod_kick": { + "success": "Successfully kicked user <@{userId}>.", + "failed": "Failed to kick user <@{userId}>.", + "reason": "Kicked by {moderatorTag} via Mod-Log" + }, + "mod_unquarantine": { + "not_found": "Failed to find quarantine snapshot for user <@{userId}>.", + "not_in_server": "User <@{userId}> is no longer in the server.", + "success": "Successfully unquarantined user <@{userId}> and restored roles.", + "failed": "Failed to unquarantine user <@{userId}>.", + "already_exists": "User <@{userId}> is not currently quarantined." + }, + "mod_untimeout": { + "success": "Successfully removed timeout for user <@{userId}>.", + "not_timed_out": "User <@{userId}> is not currently timed out.", + "not_found": "User <@{userId}> not found.", + "failed": "Failed to remove timeout for user <@{userId}>." + }, + "mod_false_positive": { + "success": "Successfully released user <@{userId}> as a false positive.", + "failed": "Failed to unquarantine user <@{userId}>.", + "already_exists": "User <@{userId}> is not currently quarantined." + }, + "mod_confirm_spam": { + "success": "✅ Spam pattern has been registered.", + "no_data": "Pattern data not found (may have expired)." + }, + "join_gate": { + "dm_title": "🔒 Verification Required", + "dm_body": "Verification is required to join **{guildName}**.\n\n[Click here to verify]({verifyUrl})\n\nThis link is valid for **10 minutes**.", + "channel_fallback": "<@{userId}> Verification is required. Click the button below to get your verification link." + }, + "pow_gate": { + "channel_title": "🔒 Verification Required", + "channel_body": "Verification is required to join this server.\nClick the button below to get your verification link.", + "channel_note": "-# Verification link is valid for 10 minutes", + "btn_label": "Get Verification Link", + "no_guild": "Failed to retrieve verification information.", + "no_settings": "Verification settings not found.", + "not_needed": "Verification is not required.", + "link_reply": "Please verify using the following link (**valid for 10 minutes**):\n{verifyUrl}", + "log_title": "Verification Complete (PoW Gate)", + "log_body": "User: <@{userId}> ({userTag})\n**Time:** " + }, + "actions": { + "QUARANTINE": "Quarantine", + "UNQUARANTINE": "Unquarantine", + "TIMEOUT_5M": "5 Minute Timeout", + "TIMEOUT_10M": "10 Minute Timeout", + "TIMEOUT_30M": "30 Minute Timeout", + "TIMEOUT_1H": "1 Hour Timeout", + "TIMEOUT_24H": "24 Hour Timeout", + "DELETE_MESSAGE": "Message Deletion", + "WARN": "Warning", + "SEND_TO_REVIEW_QUEUE": "Send to Manual Review", + "ADD_SUSPICION_LEVEL_1": "Add Suspicion Level 1", + "NOTIFY_OWNER": "Notify Owner", + "MARK_COHORT_SUSPICION_LV2": "Add Cohort Suspicion Level 2" + }, + "rules": { + "MESSAGE_SEND": "Sending Messages", + "MESSAGE_REPEAT": "Repeating Same Message", + "LINE_BREAK_SPAM": "Line Break Spam", + "ATTACHMENT": "Sending Attachments", + "EMOJI": "Emoji Spam", + "ZALGO": "Zalgo Text", + "LONG_TEXT": "Sending Long Text", + "URL": "Sending URLs", + "MENTION_USER": "User Mentions", + "MENTION_ROLE": "Role Mentions", + "MENTION_HERE": "Here Mention", + "MENTION_EVERYONE": "Everyone Mention", + "INVITATION": "Invite Link", + "PHISHING": "Phishing Link", + "IMAGE_HASH": "Inappropriate Image", + "CROSS_CHANNEL": "Cross-channel Spam", + "BLACKLIST_WORD": "Blacklisted Word", + "INACTIVE_CHANNEL": "Posting in Inactive Channel", + "NSFW_URL": "NSFW Link", + "ANTINUKE": "Anti-Nuke Detection", + "ANTINUKE_CHANNEL_DELETE": "Mass channel deletion", + "ANTINUKE_ROLE_DELETE": "Mass role deletion", + "ANTINUKE_CHANNEL_CREATE": "Mass channel creation", + "ANTINUKE_ROLE_CREATE": "Mass role creation", + "ANTINUKE_WEBHOOK_CREATE": "Mass webhook creation", + "ANTINUKE_BAN_KICK": "Mass member ban/kick", + "ANTINUKE_ROLE_GRANT": "Granted dangerous permissions to a role" + }, + "legacy_automod": { + "category": { + "harassment": "Harassment", + "harassment/threatening": "Harassment (Threatening)", + "hate": "Hate", + "hate/threatening": "Hate (Threatening)", + "sexual": "Sexual", + "sexual/minors": "Sexual (Minors)", + "violence": "Violence", + "violence/graphic": "Violence (Graphic)", + "self-harm": "Self-harm", + "self-harm/intent": "Self-harm (Intent)", + "self-harm/instructions": "Self-harm (Instructions)", + "illicit": "Illicit", + "illicit/violent": "Illicit (Violent)" + }, + "thread_delete_reason": "Auto-deleted by Legacy AI Moderation", + "report": { + "title": "🛡️ Legacy AI Moderation Detection", + "thread_title": "🛡️ Legacy AI Moderation Detection (Thread)", + "author": "**Author:** <@{userId}> (`{userTag}`)", + "content": "**Content:**\n{content}", + "high_score": "**High-score categories:** {categories}", + "flagged": "**Flagged categories:** {categories}", + "auto_action": "**Auto action:** {action}", + "action_deleted": "Deleted", + "action_none": "None", + "jump": "[Jump to message]({url})", + "btn_delete": "Delete Message", + "btn_warn": "Send Warning" + }, + "delete": { + "success": "Message deleted.", + "failed": "Failed to delete the message.", + "not_found": "The target message was not found." + }, + "warn": { + "modal_title": "Send Warning", + "reason_label": "Warning Reason", + "reason_placeholder": "Enter the reason for the warning", + "bot_not_allowed": "You cannot send a warning to a bot.", + "success": "Sent a warning to <@{userId}>.", + "dm_failed": "Failed to DM <@{userId}> (their DMs may be closed).", + "dm_title": "⚠️ Warning", + "dm_body": "You have received a warning from **{guildName}**.\n**Reason:** {reason}", + "log_appended": "✅ <@{moderatorId}> sent a warning to <@{userId}>.\n**Reason:** {reason}" + } } } } diff --git a/en/web.json b/en/web.json index cb352b6..3c37738 100644 --- a/en/web.json +++ b/en/web.json @@ -18,6 +18,9 @@ "save": "Save", "saving": "Saving...", "saved": "Saved", + "unsavedChanges": "Unsaved changes", + "leaveWarning": "You have unsaved changes. Leave this page?", + "discard": "Discard changes", "cancel": "Cancel", "close": "Close", "loading": "Loading...", @@ -25,7 +28,8 @@ "notSet": "Not set", "buy": "Buy", "processing": "Processing...", - "soon": "Soon" + "soon": "Soon", + "back": "Back" }, "authBlocked": { "title": "Access blocked", @@ -43,7 +47,9 @@ "inviteBot": "Invite Bot", "viewDashboard": "View Dashboard", "pricing": "Pricing", - "changelog": "Changelog" + "changelog": "Changelog", + "security": "Security", + "subscription": "Subscription" }, "top": { "featuresSectionLabel": "Features", @@ -150,7 +156,9 @@ "open": "Open", "invite": "Add Bot", "reload": "Reload", - "refreshHint": "Don't see your server? Try refreshing after adding the bot." + "refreshHint": "Don't see your server? Try refreshing after adding the bot.", + "passkeyBtn": "Log in with Passkey", + "orDivider": "or" }, "sidebar": { "overview": "Overview", @@ -162,10 +170,19 @@ "subscription": "Subscription", "credits": "Credits", "allServers": "All Servers", + "searchServers": "Search servers...", "manageSubscription": "Manage Subscription", + "security": "Security", "logout": "Log Out", "messages": "Messages", - "workflow": "Workflow" + "workflow": "Workflow", + "automod": "Moderation", + "activityLog": "Activity Log" + }, + "featureGate": { + "title": "This feature is not available", + "desc": "The corresponding plan or feature flag is required to use this page.", + "upgrade": "Upgrade plan" }, "overview": { "desc": "Check your server status and available features", @@ -183,6 +200,38 @@ "aimod": { "label": "AI Moderation", "desc": "AI monitors and responds to chat in real time" + }, + "analytics": { + "title": "Analytics", + "messages": "Messages", + "members": "Member Changes", + "joins": "Joins", + "leaves": "Leaves", + "range7": "7 days", + "range30": "30 days", + "noData": "No data available" + }, + "widget": { + "customize": "Customize", + "done": "Done" + }, + "fastaccess": { + "title": "Quick Access" + }, + "recentwork": { + "title": "Recent Work", + "empty": "No recent activity yet", + "justNow": "Just now", + "minutesAgo": "{n}m ago", + "hoursAgo": "{n}h ago", + "daysAgo": "{n}d ago" + }, + "analyticsummary": { + "title": "This Week's Summary", + "messages": "Messages", + "joins": "Joins", + "leaves": "Leaves", + "netChange": "Net Change" } }, "general": { @@ -263,7 +312,37 @@ "statusRunning": "Running", "statusStopped": "Stopped", "logTitle": "Moderation Logs", - "logEmpty": "No logs" + "logEmpty": "No logs", + "legacyAiSection": "Legacy AI Moderation Settings", + "legacyAiDesc": "Automatically reports and deletes messages based on omni-moderation scores", + "legacyAiLogChannelLabel": "Log Channel", + "legacyAiReportScoreLabel": "Report Score Threshold", + "legacyAiReportScoreDesc": "Lower is more sensitive; flagged messages are reported to the log", + "legacyAiDeleteScoreLabel": "Delete Score Threshold", + "legacyAiDeleteScoreDesc": "Messages above this value are auto-deleted (recommended ≥ report value)", + "legacyAiScoreRecommend": "Delete score should be greater than or equal to report score", + "legacyAiBypassChannelsLabel": "Bypass Channels", + "legacyAiBypassChannelsDesc": "Messages in these channels skip AI moderation", + "legacyAiBypassRolesLabel": "Bypass Roles", + "legacyAiBypassRolesDesc": "Users with these roles skip AI moderation", + "legacyAiBypassStringsLabel": "Bypass Strings", + "legacyAiBypassStringsDesc": "Messages containing these strings are skipped", + "legacyAiBypassStringPlaceholder": "Enter string to bypass", + "legacyAiBypassStringAdd": "Add", + "noChannel": "No channel", + "noRole": "No role", + "permissionDenied": "You don't have Master permission to change settings", + "saveError": "Failed to save", + "forbiddenTitle": "Access Denied", + "forbiddenDesc": "You need Master permission to view or edit moderation settings for this server.", + "modeLabel": "Moderation mode", + "modeDesc": "Choose how messages are automatically monitored", + "modeOff": "Off", + "modeOffDesc": "No automatic monitoring", + "modeLegacy": "Legacy", + "modeLegacyDesc": "Automatically detects, reports and removes inappropriate messages (free)", + "modeAdvanced": "Next-gen", + "modeAdvancedDesc": "Advanced AI moderation that understands context" }, "subscription": { "title": "Subscription", @@ -317,6 +396,10 @@ "selectDesc": "Choose the server you want to purchase for" }, "purchaseFlow": { + "purchaseFailed": "The purchase is incomplete or the session is invalid.", + "purchaseSuccess": "Thank you for your purchase!", + "purchaseSuccessDesc": "Returning to dashboard in {seconds} seconds...", + "backToDashboard": "Back to Dashboard", "subscriptionTitle": "Subscription", "ccTitle": "Buy Cube Credit", "popular": "Popular", @@ -376,7 +459,20 @@ "Priority support" ], "confirmTitle": "Purchase {plan} plan?", - "confirmDesc": "You will be billed ¥{price}/month. Cancel anytime." + "confirmDesc": "You will be billed ¥{price}/month. Cancel anytime.", + "consentTitle": "Before You Continue", + "consentDesc": "To proceed with your purchase, we need to verify your age and obtain your consent.", + "consentDob": "Date of birth", + "consentYear": "Year", + "consentMonth": "Month", + "consentDay": "Day", + "consentTermsLabel": "I agree to the Terms of Service and Privacy Policy", + "consentParentalLabel": "I have obtained parental permission to make this purchase", + "consentMinorNotice": "Because you are under 18, parental consent is required.", + "consentUnderageError": "Sorry, users under 13 are not eligible to make purchases.", + "consentDataNote": "Your date of birth is used solely for age verification and will be shared with Stripe for payment processing.", + "consentContinue": "Agree and continue", + "consentSubmitting": "Verifying..." }, "accountSub": { "title": "Subscription Management", @@ -457,7 +553,15 @@ "changePlanChanging": "Changing...", "changePlanNote": "Changes will take effect from your next billing date.", "downgradeNotAllowed": "Downgrade is not allowed. Please cancel your current plan and resubscribe to a lower tier.", - "addNew": "Add new plan" + "addNew": "Add new plan", + "pagination": { + "prev": "Previous", + "next": "Next" + }, + "syncBtn": "Sync Subscription", + "syncOk": "Subscription info synced successfully", + "syncFail": "Sync failed", + "syncNote": "If your purchased subscription isn't showing up, click the sync button to fetch the latest info" }, "pricing": { "title": "Pricing", @@ -658,6 +762,10 @@ "threads": { "name": "Threads", "desc": "Thread lifecycle changes" + }, + "automod": { + "name": "AutoMod", + "desc": "AutoMod rule create, update, and delete" } } }, @@ -710,6 +818,14 @@ "name": "Message Update", "desc": "Log Message Update events" }, + "message_reaction_add": { + "name": "Message Reaction Add", + "desc": "Log Message Reaction Add events" + }, + "message_reaction_remove": { + "name": "Message Reaction Remove", + "desc": "Log Message Reaction Remove events" + }, "member_kick": { "name": "Member Kick", "desc": "Log Member Kick events" @@ -841,6 +957,18 @@ "thread_delete": { "name": "Thread Delete", "desc": "Log Thread Delete events" + }, + "automod_rule_create": { + "name": "AutoMod Rule Created", + "desc": "Logs AutoMod rule creation events" + }, + "automod_rule_update": { + "name": "AutoMod Rule Updated", + "desc": "Logs AutoMod rule update events" + }, + "automod_rule_delete": { + "name": "AutoMod Rule Deleted", + "desc": "Logs AutoMod rule deletion events" } }, "options": { @@ -865,6 +993,36 @@ "contentOptional": "(optional)", "contentPlaceholder": "Enter message content...", "addEmbed": "Add Embed", + "addActionRow": "Add Action Row", + "actionRow": { + "rowN": "Action Row {n}", + "typeButtons": "Buttons", + "typeSelect": "Select Menu", + "addButton": "Add Button", + "buttonLabel": "Label", + "buttonLabelPlaceholder": "Button text", + "buttonStyle": "Style", + "buttonStylePrimary": "Primary (Blue)", + "buttonStyleSecondary": "Secondary (Gray)", + "buttonStyleSuccess": "Success (Green)", + "buttonStyleDanger": "Danger (Red)", + "buttonStyleLink": "Link (URL)", + "customId": "Custom ID", + "customIdPlaceholder": "ID used in workflow", + "linkUrl": "URL", + "linkUrlPlaceholder": "https://...", + "selectCustomId": "Custom ID", + "selectCustomIdPlaceholder": "ID used in workflow", + "selectPlaceholder": "Placeholder", + "selectPlaceholderPlaceholder": "Please select", + "addOption": "Add Option", + "optionLabel": "Label", + "optionLabelPlaceholder": "Display text", + "optionValue": "Value", + "optionValuePlaceholder": "Value used in workflow", + "optionDescription": "Description (optional)", + "optionN": "Option {n}" + }, "send": "Send", "update": "Update", "cancel": "Cancel", @@ -907,7 +1065,8 @@ "title": "Sent Messages", "desc": "List of messages sent by Cube", "empty": "No sent messages yet", - "embedCount": "{count} embed(s)" + "embedCount": "{count} embed(s)", + "componentCount": "{count} component(s)" } }, "workflow": { @@ -999,6 +1158,36 @@ "messageDeleteTitle": "Message Delete Settings", "modalSubmitTitle": "Modal Submit Settings", "webhookReceiveTitle": "Webhook Receive Settings", + "rssPollTitle": "RSS Monitor Settings", + "youtubeWebsubTitle": "YouTube Post Notification Settings", + "twitchEventsubTitle": "Twitch Event Notification Settings", + "rssFeedUrl": "RSS Feed URL", + "rssFeedUrlHint": "Specify the RSS/Atom feed URL to monitor (http/https)", + "rssFeedUrlPlaceholder": "e.g. https://example.com/feed.xml", + "rssInterval": "Check Interval", + "rssIntervalHint": "Choose how often to check for new posts", + "rssIntervals": { + "5m": "Every 5 minutes", + "15m": "Every 15 minutes", + "30m": "Every 30 minutes", + "1h": "Every 1 hour", + "6h": "Every 6 hours", + "12h": "Every 12 hours", + "24h": "Every 24 hours" + }, + "youtubeChannelId": "YouTube Channel ID", + "youtubeChannelIdHint": "Specify the YouTube channel ID to receive notifications from", + "youtubeChannelIdPlaceholder": "e.g. UCxxxxxxxxxxxxxxxxxxxxxx", + "twitchBroadcasterUserId": "Twitch Broadcaster User ID", + "twitchBroadcasterUserIdHint": "Specify the broadcaster's numeric user ID", + "twitchBroadcasterUserIdPlaceholder": "e.g. 123456789", + "twitchSubscriptionTypes": "Event Types", + "twitchSubscriptionTypesHint": "Select which Twitch events should trigger the workflow", + "twitchSubscriptionTypeLabels": { + "stream_online": "Stream Online (stream.online)", + "stream_offline": "Stream Offline (stream.offline)", + "channel_update": "Channel Update (channel.update)" + }, "customIdFilter": "Custom ID (Optional)", "customIdFilterHint": "Only trigger for custom IDs starting with this value. Empty means all.", "customIdPlaceholder": "e.g. my-button", @@ -1013,6 +1202,8 @@ "webhookNoToken": "Webhook token not yet generated. It will appear after saving.", "allVoiceChannels": "All Voice Channels", "webhookUrlCopy": "Copy URL", + "webhookRegenerateTitle": "Regenerate URL", + "webhookRegenerateConfirm": "Regenerating the Webhook URL will invalidate the current URL. Continue?", "webhookUrlCopied": "Copied!", "webhookUrlDesc": "Send a POST request to this URL to trigger the workflow. JSON body fields are available as '{{webhook.payload.key}}'." }, @@ -1083,6 +1274,18 @@ "webhook_receive": { "label": "Webhook Receive", "desc": "When a webhook request is received" + }, + "rss_poll": { + "label": "RSS Post", + "desc": "When a new item is published in the RSS feed" + }, + "youtube_websub": { + "label": "YouTube Post", + "desc": "When a new video is published on the channel" + }, + "twitch_eventsub": { + "label": "Twitch Event", + "desc": "When a selected Twitch event is received" } }, "conditions": { @@ -1150,7 +1353,18 @@ "validationThreadChannelEmpty": "\"Create Thread\" nodes require a target channel.", "validationRenameChannelEmpty": "\"Rename Channel\" nodes require a channel and a new name.", "validationAccountAgeEmpty": "\"Account Age\" nodes require a minimum number of days.", - "validationVarKeyEmpty": "\"Variable Value\" nodes require a variable name." + "validationVarKeyEmpty": "\"Variable Value\" nodes require a variable name.", + "validationScheduledCronMissing": "Scheduled triggers require a cron expression (the cron field).", + "validationScheduledCronInvalid": "Invalid cron expression. Use standard 5-field format (e.g. */5 * * * *).", + "validationScheduledCronTooFrequent": "Minimum execution interval is 5 minutes (e.g. */5 * * * *).", + "validationRssFeedUrlMissing": "RSS triggers require a feed URL.", + "validationRssFeedUrlInvalid": "RSS feed URL must be a valid http:// or https:// URL.", + "validationRssIntervalInvalid": "RSS interval is invalid.", + "validationYoutubeChannelIdMissing": "YouTube triggers require a channel ID.", + "validationTwitchBroadcasterUserIdMissing": "Twitch triggers require a broadcaster user ID.", + "validationTwitchBroadcasterUserIdInvalid": "Broadcaster user ID must contain numbers only.", + "validationTwitchSubscriptionTypesMissing": "Select at least one Twitch subscription type.", + "validationTwitchSubscriptionTypeInvalid": "Twitch subscription types include an invalid value." }, "logs": { "empty": "No execution logs", @@ -1248,6 +1462,8 @@ "buttonCustomIdPlaceholder": "e.g. confirm-btn", "buttonModeCustomId": "Custom ID", "buttonModeLinked": "Link Workflow", + "buttonModeContinue": "Continue", + "buttonModeContinueHint": "Clicking this button continues the same workflow. Use '{{button.label}}' and '{{button.index}}' to identify which button was pressed.", "buttonLinkedWorkflow": "Linked Workflow", "buttonLinkedWorkflowHint": "Workflow to run when this button is clicked", "buttonLinkedWorkflowPlaceholder": "Select a workflow...", @@ -1335,5 +1551,446 @@ "executionCount": "{count} executions", "planViolationBadge": "Plan limit", "duplicateError": "Failed to duplicate workflow" + }, + "admin": { + "title": "Cube Admin", + "loggedInAs": "Logged in as", + "exitAdmin": "Back to Dashboard", + "cancel": "Cancel", + "create": "Create", + "save": "Save", + "saving": "Saving...", + "add": "Add", + "nav": { + "dashboard": "Dashboard", + "subscriptions": "Subscriptions", + "users": "Users", + "guilds": "Servers", + "blacklist": "Blacklist", + "spamPatterns": "Spam Patterns", + "economy": "Economy", + "features": "Feature Flags", + "testGroups": "Test Groups" + }, + "dashboard": { + "title": "System Status", + "desc": "Real-time shard monitoring and control", + "totalGuilds": "Total Guilds", + "avgPing": "Avg Ping", + "totalMemory": "Total Memory", + "shards": "Shards", + "refresh": "Refresh", + "noShards": "No shard data available", + "errorShards": "Failed to load shard status", + "leaveBtn": "Leave", + "reloadI18nBtn": "Reload i18n", + "restartAllBtn": "Restart All", + "confirmRestartAll": "Are you sure you want to restart ALL shards? This will disconnect all bots momentarily.", + "confirmRestartShard": "Are you sure you want to restart Shard {id}?", + "confirmReloadI18n": "Are you sure you want to reload translation files?", + "confirmLeaveGuild": "Are you sure you want to force leave guild {id}?", + "restartAllOk": "Restart sequence initiated", + "restartAllFail": "Failed to initiate restart", + "restartShardOk": "Shard {id} restart initiated", + "restartShardFail": "Failed to restart shard", + "reloadI18nOk": "Translations reloaded successfully", + "reloadI18nFail": "Failed to reload translations", + "leaveGuildOk": "Left guild {id}", + "leaveGuildFail": "Failed to leave guild" + }, + "subscriptions": { + "title": "Subscriptions", + "create": "Create", + "createTitle": "Create Subscription", + "searchPlaceholder": "Search by name, email or guild...", + "colUser": "User", + "colGuild": "Guild", + "colStatus": "Status", + "colExpiry": "Expires", + "extend": "Extend", + "extendOk": "Subscription extended", + "extendFail": "Failed to extend subscription", + "empty": "No subscriptions found", + "syncBtn": "Sync with Stripe", + "confirmSync": "Sync all subscriptions from Stripe to DB?", + "syncOk": "Synced {synced} subscriptions (errors: {errors})", + "syncFail": "Sync failed", + "cancelAtEnd": "cancels at period end", + "syncUserPlaceholder": "User ID", + "confirmSyncUser": "Sync subscription info for user {userId}?" + }, + "blacklist": { + "title": "Blacklist", + "add": "Add", + "addTitle": "Add to Blacklist", + "addBtn": "Add", + "reason": "Reason", + "isBlacklisted": "Banned", + "isMuted": "GC Muted", + "searchPlaceholder": "Search by User ID or reason...", + "confirmRemove": "Remove user {userId} from blacklist?", + "removeOk": "Removed from blacklist", + "removeFail": "Failed to remove", + "empty": "Blacklist is empty" + }, + "guilds": { + "title": "Server List", + "searchPlaceholder": "Search by name or ID...", + "colName": "Server Name", + "confirmDelete": "Delete all data for {name}? This cannot be undone.", + "deleteOk": "Server data deleted", + "deleteFail": "Failed to delete", + "empty": "No servers found", + "syncBtn": "Sync Bot", + "confirmSync": "Sync servers the Bot has joined to the DB?", + "syncOk": "Synced {synced} servers", + "syncFail": "Sync failed", + "leaveBtn": "Leave", + "confirmLeave": "Remove the Bot from {name}?", + "leaveOk": "Bot left the server", + "leaveFail": "Failed to leave", + "notFound": "Server not found", + "saveOk": "Settings saved", + "saveFail": "Failed to save", + "detailSettings": "Settings", + "detailLang": "Language", + "detailCreated": "Created", + "detailUpdated": "Updated", + "detailCredits": "Credits", + "creditPaid": "Paid", + "creditBonus": "Bonus", + "creditTotal": "Total", + "detailSubscription": "Subscription", + "noSubscription": "No subscription", + "detailExpiry": "Expires", + "detailFeatures": "Feature flags", + "featureFromPlan": "plan", + "featureRawValue": "Raw value", + "addPurge": "Add Auto Purge", + "purgeDesc": "{msgLimit} msgs / every {interval} min", + "msgLimit": "Message Limit", + "msgs": "msgs", + "purgeInterval": "Purge Interval", + "min": "min", + "addReact": "Add Auto React", + "emoji": "Emoji", + "roleKeeperTitle": "Role Keeper", + "rkEnable": "Enable", + "rkEnableDesc": "Enable the Role Keeper module", + "rkExcludeAdmin": "Exclude admin roles", + "rkExcludeAdminDesc": "Skip roles with administrator permissions", + "rkExcludeMod": "Exclude mod roles", + "rkExcludeModDesc": "Skip roles with moderation permissions", + "addSticky": "Add Sticky Message", + "stickyContent": "Message Content", + "workflowTitle": "Workflows", + "noWorkflows": "No workflows found", + "execCount": "{count} executions", + "confirmDeleteWorkflow": "Delete this workflow? This cannot be undone." + }, + "economy": { + "title": "Economy Management", + "grantTitle": "Grant Credits", + "grantAllTitle": "Grant to All Servers", + "grantAllDesc": "Grant bonus credits to all active servers. A confirm key is required.", + "amount": "Amount", + "type": "Type", + "reason": "Reason", + "confirmKey": "Confirm Key", + "confirmGrantAll": "Grant {amount} CC to all servers?", + "confirmKeyMismatch": "Confirm key does not match", + "grantBtn": "Grant", + "grantAllBtn": "Grant to All", + "grantOk": "Credits granted", + "grantFail": "Failed to grant credits", + "grantAllOk": "Bulk grant executed", + "grantAllFail": "Failed to execute bulk grant" + }, + "users": { + "title": "User Lookup", + "searchPlaceholder": "Discord ID or User ID", + "searchBtn": "Search", + "notFound": "User not found", + "economyTitle": "Credit Balance", + "confirmDelete": "Delete all data for {name}? This cannot be undone.", + "deleteBtn": "Delete User", + "deleteOk": "User data deleted", + "deleteFail": "Failed to delete user" + } + }, + "automod": { + "unknownUser": "Unknown", + "title": "Unified Moderation", + "desc": "Configure AutoMod, AntiRaid, and JoinGate settings", + "tabFilters": "Filters", + "tabProtection": "Protection", + "tabVerification": "Verification", + "tabPermissions": "Permissions", + "tabWhitelist": "Whitelists", + "whitelistDesc": "Configure users, roles, and channels to be exempt from each rule", + "automodSection": "AutoMod", + "automodDesc": "Automatically detects and responds to spam and suspicious messages", + "enabled": "Enabled", + "disabled": "Disabled", + "heatPresetLabel": "Heat Preset", + "heatPresetDesc": "Adjust sensitivity to violations and the strength of sanctions", + "lenientLabel": "Lenient", + "lenientDesc": "Tolerates minor violations", + "standardLabel": "Standard", + "standardDesc": "Balanced default configuration", + "strictLabel": "Strict", + "strictDesc": "Responds quickly to even minor violations", + "logChannelLabel": "Log Channel", + "logChannelDesc": "Channel to receive moderation action notifications", + "noChannel": "No channel", + "quarantineRoleLabel": "Quarantine Role", + "quarantineRoleDesc": "Role assigned to quarantined users", + "noRole": "No role", + "panicModeLabel": "Emergency Mode", + "panicModeDesc": "When enabled, significantly lowers the action threshold for all users", + "crossServerOptInLabel": "Cross-Server Risk Sharing", + "crossServerOptInDesc": "When enabled, anonymously contributes violation data to the cross-server risk database to improve threat detection across servers", + "trustedRolesLabel": "Trusted Roles (AutoMod Bypass)", + "trustedRolesDesc": "Members with these roles will bypass all AutoMod detection", + "antiNukeSection": "AntiNuke", + "antiNukeDesc": "Detects and responds to destructive server actions (channel deletion, mass bans, etc.)", + "antiNukeChannelDeleteLabel": "Channel delete", + "antiNukeRoleDeleteLabel": "Role delete", + "antiNukeChannelCreateLabel": "Channel create", + "antiNukeRoleCreateLabel": "Role create", + "antiNukeWebhookCreateLabel": "Webhook create", + "antiNukeBanKickLabel": "Ban/Kick", + "antiNukeRoleGrantLabel": "Role grant", + "antiNukeLimitSuffix": "actions trigger", + "antiNukeWindowSuffix": "sec window", + "antiRaidSection": "AntiRaid", + "antiRaidDesc": "Detects and responds to raid attacks (mass joins)", + "antiRaidJoinRateLabel": "Join Rate Limit", + "antiRaidJoinRateDesc": "Triggers raid detection when this many users join within the time window", + "antiRaidWindowLabel": "Join Window (seconds)", + "antiRaidAccountAgeLabel": "Account Age (days)", + "antiRaidAccountAgeDesc": "Accounts newer than this many days add to the raid score", + "joinGateSection": "JoinGate", + "joinGateDesc": "Quarantines and requires verification from suspicious new joiners", + "joinGateFilterNoAvatarLabel": "Filter Default Avatars", + "joinGateFilterNoAvatarDesc": "Quarantine accounts with no profile picture", + "joinGateFilterNewAccountLabel": "Filter New Accounts (days)", + "joinGateFilterNewAccountDesc": "Quarantine accounts newer than this many days. 0 to disable", + "joinGateFilterAdvertisingLabel": "Filter Advertising Accounts", + "joinGateFilterAdvertisingDesc": "Quarantine accounts with invite links or banned URLs in their profile", + "joinGateFilterUnverifiedBotLabel": "Filter Unverified Bots", + "joinGateFilterUnverifiedBotDesc": "Quarantine bot accounts that are not verified by Discord", + "joinGateFilterUnauthorizedBotLabel": "Filter Unauthorized Bots", + "joinGateFilterUnauthorizedBotDesc": "Quarantine bots added by members without Master permissions", + "powGateSectionInner": "Verification Flow (PoW Gate)", + "powGateRoleReady": "Configured", + "powGateRoleNotReady": "Not set (auto-created after setup)", + "quarantineRoleReady": "Configured", + "quarantineRoleNotReady": "Not configured", + "powGateSection": "PoW Gate (Human Verification)", + "powGateDesc": "Require Cloudflare Turnstile human verification to prevent bots and raiders", + "powGateAllUsersLabel": "Apply to All New Members", + "powGateAllUsersDesc": "When off, only targets users who triggered JoinGate filters", + "powGateRoleLabel": "Restricted Role", + "powGateRoleDesc": "Role assigned before verification (automatically removed after success)", + "powGateChannelLabel": "Verification Channel", + "powGateChannelDesc": "Fallback channel when DM fails (permissions auto-adjusted on save)", + "powGateTimeoutLabel": "Timeout", + "powGateTimeoutDesc": "Minutes before auto-kicking unverified users (0 to disable)", + "minutes": "min", + "messages": "msgs", + "limit": "Limit", + "window": "Window", + "age": "Age", + "automodRules": "Rule Settings", + "quarantineSetupBanner": "Quarantine Role Not Configured", + "quarantineSetupBannerDesc": "Moderation features are enabled but the quarantine role is not set up. Click the button to have the bot auto-create the role and configure channel permissions.", + "quarantineSetupBtn": "Setup Now", + "quarantineSetupRequesting": "Setting up...", + "quarantineSetupDone": "Setup requested. Changes will apply in a few seconds.", + "setupBtn": "Setup", + "requesting": "Processing...", + "setupDone": "Done", + "discordRegistered": "Synced with Discord", + "discordNotRegistered": "Not synced with Discord", + "discordRegisterBtn": "Sync with Discord", + "discordRegistering": "Syncing...", + "ruleMentionSpam": "Mention Spam", + "ruleMentionSpamDesc": "Adds heat for @user / @role / @here / @everyone mentions", + "ruleInviteLink": "Invite Links", + "ruleInviteLinkDesc": "Detect unauthorized Discord invite URLs", + "ruleEmojiSpam": "Emoji Spam", + "ruleEmojiSpamDesc": "+1% per emoji, capped at +20% per message", + "ruleCharSpam": "Character Spam", + "ruleCharSpamDesc": "Detect repeated characters or Zalgo text", + "ruleUrlScan": "URL Scanning", + "ruleUrlScanDesc": "Expand short URLs → check with Safe Browsing API", + "ruleImageHash": "Spam Image Blocking", + "ruleImageHashDesc": "Compares images against Cube's spam/NSFW database and auto-removes matches", + "ruleCrossChannel": "Cross-Channel", + "ruleCrossChannelDesc": "Detect similar posts across multiple channels in short time", + "rulePhishing": "Phishing", + "rulePhishingDesc": "Detect known phishing domains and scam URL patterns", + "ruleBlacklistWord": "Blacklist Words", + "ruleBlacklistWordDesc": "Add heat to messages containing admin-configured words", + "blacklistWordAdd": "Add", + "blacklistWordPlaceholder": "Enter forbidden word", + "blacklistWordPlaceholder_text": "Enter forbidden word (substring match)", + "blacklistWordPlaceholder_wildcard": "e.g. *badword* or spam*", + "blacklistWordPlaceholder_regex": "e.g. (bad|spam)\\w+", + "blacklistWordType_text": "Text", + "blacklistWordType_wildcard": "Wildcard", + "blacklistWordType_regex": "Regex", + "blacklistWordWildcardHint": "* matches any sequence of characters. e.g. *word* for substring, word* for prefix", + "blacklistWordRegexHint": "JavaScript regex supported (up to 10 regex patterns are synced to Discord AutoMod)", + "blacklistWordHeat": "Heat Value", + "blacklistWordHeatHelp": "1–100 (default 30%)", + "ruleInactiveChannel": "Inactive Channel Post", + "ruleInactiveChannelDesc": "Add +3% heat for posting in channels with no recent activity", + "inactiveChannelThreshold": "Inactivity threshold (days)", + "nightTimeRange": "Night Hours (JST)", + "nightTimeRangeDesc": "Severity threshold is lowered during this window (night-time policy)", + "nightTimeRangeTo": "to", + "spamHashManagement": "Known Spam Image Hashes", + "spamHashAdd": "Add Hash", + "spamHashPlaceholder": "dHash bit string (64 chars)", + "spamHashLabelPlaceholder": "Label (optional)", + "save": "Save", + "saving": "Saving...", + "saved": "Saved", + "saveError": "Failed to save", + "days": "days", + "people": "people", + "seconds": "sec", + "alwaysOnRulesWhitelist": "Always-on Rule Exemptions", + "ruleMessageSend": "Message Send", + "ruleMessageSendDesc": "Every message sent (+2% always)", + "ruleMessageRepeat": "Repeated Messages", + "ruleMessageRepeatDesc": "Content similar to the previous message (+8% always)", + "ruleAttachment": "Attachments", + "ruleAttachmentDesc": "Image and file attachments (+4% each, always)", + "whitelistSection": "Whitelist", + "whitelistRoles": "Exempt Roles", + "whitelistChannels": "Exempt Channels", + "whitelistAddPlaceholder": "Enter ID", + "whitelistEmpty": "No exemptions set", + "mastersSection": "Moderation Admins (Master)", + "mastersDesc": "Users who can modify moderation settings (independent of Discord admin permissions)", + "trustedSection": "Exempt Users (Trusted)", + "trustedDesc": "Users exempt from Heat, AI, AntiNuke and other enforcement actions", + "addMaster": "Add Master", + "addTrusted": "Add Trusted", + "userIdPlaceholder": "Discord UserID", + "remove": "Remove", + "permissionDenied": "You don't have Master permission to change settings", + "exemptHeatLane": "Heat Lane Exempt", + "exemptAiLane": "AI Lane Exempt", + "exemptAntinuke": "AntiNuke Exempt", + "exemptAntiraid": "AntiRaid Exempt", + "tabSchedule": "Schedule", + "scheduleSection": "Scheduled Security Rules", + "scheduleSectionDesc": "Automatically change server security settings during specific times or periods.", + "scheduleAddRule": "Add Rule", + "scheduleRuleType": "Action", + "scheduleRuleTypeInviteDisable": "Disable Invites", + "scheduleRuleTypeDmDisable": "Disable DMs", + "scheduleRuleTypeSecurityLevel": "Change Verification Level", + "scheduleScheduleType": "Schedule Type", + "scheduleTimeRange": "Daily Time Range", + "scheduleDateRange": "One-time Date Range", + "scheduleStartTime": "Start Time (JST)", + "scheduleEndTime": "End Time (JST)", + "scheduleStartDate": "Start Date", + "scheduleEndDate": "End Date", + "scheduleSecurityLevel": "Verification Level", + "scheduleSecurityLevelNone": "None (0)", + "scheduleSecurityLevelLow": "Low (1)", + "scheduleSecurityLevelMedium": "Medium (2)", + "scheduleSecurityLevelHigh": "High (3)", + "scheduleSecurityLevelVeryHigh": "Very High (4)", + "scheduleLabel": "Label (optional)", + "scheduleLabelPlaceholder": "e.g. Nightly security boost", + "scheduleEnabled": "Enabled", + "scheduleDeleteConfirm": "Delete this rule?", + "scheduleNoRules": "No schedule rules", + "scheduleRuleTypeInviteDisableDesc": "Pauses server invite links during the selected time window.", + "scheduleRuleTypeDmDisableDesc": "Pauses member-to-member DMs through the server during the selected time window.", + "scheduleRuleTypeSecurityLevelDesc": "Raises the verification level only during the window, then restores the original level automatically.", + "scheduleTimeRangeHint": "Applied repeatedly every day during this window (JST). Overnight ranges (e.g. 22:00→08:00) are supported.", + "scheduleDateRangeHint": "Applied once between the start and end date/time.", + "schedulePreviewLabel": "Preview", + "schedulePreviewTimeRange": "Every day from {start} to {end} JST, {action}", + "schedulePreviewDateRange": "Between {start} and {end}, {action}", + "scheduleActionInviteDisable": "invite links are paused.", + "scheduleActionDmDisable": "member DMs are paused.", + "scheduleActionSecurityLevel": "the verification level is raised to \"{level}\".", + "scheduleAddRuleTitle": "Add Rule", + "scheduleEditRuleTitle": "Edit Rule", + "scheduleSave": "Save", + "scheduleSaved": "Saved", + "scheduleDailyHint": "Applied automatically during this window every day (JST). Overnight ranges (e.g. 22:00 → 08:00 next day) are supported.", + "scheduleEnableLog": "Enable logging", + "scheduleEnableLogDesc": "Send a log when this starts and ends.", + "scheduleLogChannel": "Log channel", + "scheduleSelectChannel": "Select a channel", + "scheduleLevelLowDesc": "Only email-verified accounts", + "scheduleLevelMediumDesc": "Only accounts registered on Discord for more than 5 minutes", + "scheduleLevelHighDesc": "Only accounts in this server for more than 10 minutes", + "scheduleLevelVeryHighDesc": "Only phone-verified accounts" + }, + "accountSecurity": { + "title": "Security", + "desc": "Register passkeys to log in even if you lose access to Discord", + "passkeyTitle": "Passkeys", + "passkeyDesc": "Use registered passkeys to log in during emergencies", + "addPasskey": "Add Passkey", + "adding": "Registering...", + "noPasskeys": "No passkeys registered", + "noPasskeysDesc": "Add a passkey so you can log in even if you lose your Discord account", + "deletePasskey": "Delete", + "deleting": "Deleting...", + "addSuccess": "Passkey registered", + "addError": "Failed to register passkey", + "deleteSuccess": "Passkey deleted", + "deleteError": "Failed to delete passkey", + "registeredAt": "Registered", + "addModalTitle": "Name your Passkey", + "addModalDesc": "Enter a name that helps you identify this device.", + "addModalPlaceholder": "e.g. My iPhone, Work PC", + "addModalBtn": "Start Registration" + }, + "activityLog": { + "title": "Activity Log", + "desc": "View the history of settings changes and actions performed in the dashboard", + "empty": "No activity logs found", + "loadMore": "Load more", + "loading": "Loading...", + "filterAll": "All", + "page": "Page", + "of": "of", + "total": "entries", + "categories": { + "module": "Module", + "workflow": "Workflow", + "audit_log": "Audit Log Settings", + "guild": "Server Settings", + "moderation": "Moderation", + "ai_moderation": "AI Moderation", + "general": "General" + }, + "actions": { + "auto_purge_updated": "Updated auto purge settings", + "auto_purge_deleted": "Deleted auto purge settings", + "auto_react_updated": "Updated auto react settings", + "auto_react_deleted": "Deleted auto react settings", + "role_keeper_updated": "Updated role keeper settings", + "role_keeper_deleted": "Deleted role keeper settings", + "workflow_created": "Created workflow", + "workflow_updated": "Updated workflow", + "workflow_deleted": "Deleted workflow", + "audit_log_channel_set": "Set audit log channel", + "guild_settings_updated": "Updated server settings", + "moderation_settings_updated": "Updated moderation settings" + } } } diff --git a/ja/bot.json b/ja/bot.json index 5c9bc05..25593f1 100644 --- a/ja/bot.json +++ b/ja/bot.json @@ -378,6 +378,67 @@ }, "ping": { "description": "Ping値を表示します" + }, + "sus": { + "description": "不審者(Suspicion)レベルを手動で管理します。", + "add": { + "description": "ユーザーに不審者レベルを付与します。", + "options": { + "user": { + "description": "対象のユーザー" + }, + "level": { + "description": "付与するレベル (1:GRAY, 2:BLACKISH, 3:DANGER)" + } + } + }, + "remove": { + "description": "ユーザーの不審者レベルを解除します。", + "options": { + "user": { + "description": "対象のユーザー" + } + } + } + }, + "mod": { + "description": "高度なモデレーションコマンド", + "quarantine": { + "description": "ユーザーを隔離(隔離ロール付与+権限剥奪)します。", + "options": { + "user": { + "description": "隔離するユーザー" + }, + "reason": { + "description": "隔離の理由" + } + } + }, + "unquarantine": { + "description": "ユーザーの隔離を解除します。", + "options": { + "user": { + "description": "解除するユーザー" + }, + "reason": { + "description": "解除の理由" + } + } + }, + "info": { + "description": "ユーザーのモデレーションステータス(Heat, Suspicion等)を表示します。", + "title": "{user} のモデレーション情報", + "heat": "現在のHeat", + "suspicion": "不審者レベル", + "last_violation": "最終違反日時", + "trust_status": "信頼ステータス", + "violations": "違反履歴カウント", + "options": { + "user": { + "description": "情報を表示するユーザー" + } + } + } } }, "context": { @@ -490,7 +551,8 @@ "success": "✅ {user} にロールを与えました。", "cant_find_role_or_member": "❌ ロールまたはメンバーが見つかりませんでした。", "failed_add_role": "❌ {user}にロールを与えられませんでした。\nロールの順序と権限を確認してください。", - "already_has_role": "❌ {user} already has the role." + "already_has_role": "❌ {user} already has the role.", + "dangerous_role_blocked": "❌ このロールは危険な権限を持っているため、AntiNuke免除のないユーザーは付与できません。" }, "remove": { "success": "✅ {user} からロールを削除しました。", @@ -548,6 +610,53 @@ "delete": { "success": "ピン留めメッセージを削除しました。" } + }, + "sus": { + "added": "✅ <@{userId}> に Suspicion Level {level} を付与しました。", + "removed": "✅ <@{userId}> の Suspicion Level を解除しました。", + "already_exists": "ユーザー <@{userId}> はすでにその状態であるか、処罰をスキップしました。" + }, + "report": { + "self_error": "自分自身やBotを通報することはできません。", + "reporter_prefix": "通報者: {moderatorTag} — {reason}", + "success": "✅ <@{userId}> を通報しました。モデレーターが確認します。", + "modal_title": "メッセージを通報", + "modal_reason_label": "通報理由", + "modal_reason_placeholder": "スパム、ハラスメント、規約違反など…", + "no_content": "テキストなし", + "log_title": "メッセージ通報", + "log_reporter": "通報者", + "log_target": "対象ユーザー", + "log_channel": "チャンネル", + "log_reason": "理由", + "log_message": "メッセージ内容" + }, + "verify": { + "not_found": "メンバーが見つかりませんでした。", + "no_role_configured": "認証ロール(PoW Gate)が設定されていません。", + "not_in_gate": "<@{userId}> は認証待ちではありません。", + "success": "✅ <@{userId}> の認証を完了しました。" + }, + "quarantine": { + "cannot_quarantine_self": "自分自身またはBotを隔離することはできません。", + "modal_title": "メンバーを隔離", + "modal_reason_label": "理由(任意)", + "modal_reason_placeholder": "例: スパム行為、不審な行動など", + "not_found": "メンバーが見つかりませんでした。", + "manual_prefix": "モデレーターによる手動隔離", + "success": "✅ <@{userId}> を隔離しました。", + "already_quarantined": "<@{userId}> はすでに隔離されています。" + }, + "flag_suspicious": { + "cannot_flag_self": "自分自身またはBotにSuspicion Levelを付与することはできません。", + "success": "✅ <@{userId}> にSuspicion Level 1(グレー)を付与しました。" + }, + "setup": { + "owner_only": "❌ このコマンドはサーバーオーナーのみ実行できます。", + "already_setup": "❌ 既にセットアップ済みです。", + "success": "✅ セットアップが完了しました。", + "no_manage_roles": "❌ Botに **ロールの管理** 権限がありません。権限を付与してから再度お試しください。", + "role_too_low": "❌ Botのロール(**{roleName}**)が低すぎます。ロール一覧の上から3番目以内に移動してから再度お試しください。" } }, "info": { @@ -881,7 +990,40 @@ "message_content": "メッセージ内容", "before_embed_preview": "編集前Embed", "after_embed_preview": "編集後Embed", - "removed": "削除" + "removed": "削除", + "embeds_deleted_threaded": "削除されたメッセージのEmbed(詳細はスレッド)", + "embed_deleted_thread_name": "deleted-embed-{id}", + "embed_deleted_thread_intro": "このスレッドには削除されたメッセージのEmbedプレビューが保存されています。", + "deleted_embed_preview": "削除前Embed", + "emoji": "絵文字", + "message": "メッセージ", + "enabled": "有効", + "disabled": "無効", + "afk_channel": "AFKチャンネル", + "afk_timeout": "AFKタイムアウト", + "mfa_level": "2段階認証要件", + "widget_enabled": "ウィジェット", + "widget_channel": "ウィジェットチャンネル", + "preferred_locale": "優先言語", + "safety_alerts_channel": "セーフティアラートチャンネル", + "nsfw_level": "NSFWレベル", + "public_updates_channel": "コミュニティアップデートチャンネル", + "features_added": "追加された機能", + "features_removed": "削除された機能", + "automod_trigger": "トリガータイプ", + "automod_trigger_keyword": "キーワード", + "automod_trigger_spam": "スパム", + "automod_trigger_preset": "キーワードプリセット", + "automod_trigger_mention_spam": "メンションスパム", + "automod_trigger_member_profile": "メンバープロフィール", + "automod_actions": "アクション", + "automod_action_block": "メッセージをブロック", + "automod_action_alert": "アラート送信", + "automod_action_timeout": "タイムアウト", + "automod_action_block_interaction": "インタラクションをブロック", + "automod_enabled": "有効化", + "automod_exempt_roles": "除外ロール", + "automod_exempt_channels": "除外チャンネル" }, "events": { "guild_update": "サーバー設定更新", @@ -898,6 +1040,8 @@ "message_update": "メッセージ編集", "message_update_embed_before": "編集前Embedプレビュー", "message_update_embed_after": "編集後Embedプレビュー", + "message_reaction_add": "リアクション追加", + "message_reaction_remove": "リアクション削除", "member_add": "メンバー参加", "member_remove": "メンバー退出", "member_kick": "メンバーキック", @@ -930,7 +1074,230 @@ "guild_scheduled_event_delete": "イベント削除", "thread_create": "スレッド作成", "thread_update": "スレッド更新", - "thread_delete": "スレッド削除" + "thread_delete": "スレッド削除", + "automod_rule_create": "AutoModルール作成", + "automod_rule_update": "AutoModルール更新", + "automod_rule_delete": "AutoModルール削除" + }, + "reason": { + "role_keeper_regrant": "RoleKeeper: 以前保持していたロールの再付与", + "pow_gate_success": "PoW Gate: 認証成功", + "role_add_manual": "Role コマンド: {userTag} により付与", + "role_remove_manual": "Role コマンド: {userTag} により剥奪", + "role_add_bulk": "Role コマンド (一括): {userTag} により付与", + "role_remove_bulk": "Role コマンド (一括): {userTag} により剥奪", + "workflow_role_add": "ワークフロー: ロール付与", + "workflow_role_remove": "ワークフロー: ロール剥奪", + "workflow_timeout_add": "ワークフロー: タイムアウト", + "workflow_timeout_remove": "ワークフロー: タイムアウト解除", + "workflow_thread_create": "ワークフロー: スレッド作成", + "workflow_thread_delete": "ワークフロー: スレッド削除", + "workflow_kick": "ワークフロー: キック", + "workflow_ban": "ワークフロー: BAN", + "join_gate_pow": "JoinGate: PoW Gate による要求", + "verify_manual": "Context Verify: {userTag} による手動認証", + "audit_test": "監査ログテスト" + } + }, + "moderation": { + "mod_log": { + "title": "🚨 モデレーション実行", + "body": "**対象:** <@{userId}> ({userTag})\n**実施アクション:** {actions}\n**理由:** {reason}", + "default_reason": "自動モデレーションによる処罰", + "failed_title": "⚠️ モデレーション実行失敗", + "failed_body": "**対象:** <@{userId}> ({userTag})\n**試行アクション:** {actions}\n**理由:** {reason}\n\n対象が管理者権限を持っている、またはBotより上位のロールを持っているため、アクションを実行できませんでした。手動で対応してください。", + "btn_ban": "BAN", + "btn_kick": "キック", + "btn_unquarantine": "隔離解除", + "btn_untimeout": "タイムアウト解除", + "btn_false_positive": "誤検知として解除", + "btn_confirm_spam": "スパム確認" + }, + "review_queue": { + "title": "🔍 要審査(グレーゾーン)", + "body": "**対象:** <@{userId}> ({userTag})\n**理由:** {reason}\n\n自動判定の信頼度が低いため、モデレーターによる手動確認が必要です。" + }, + "warn": { + "dm_title": "⚠️ 警告", + "dm_body": "**{guildName}** の自動モデレーションにより警告を受けました。サーバーのルールを確認してください。" + }, + "notify_owner": { + "dm_title": "🛡️ Anti-Nuke 検知(オーナー通知)", + "dm_body": "**サーバー:** {guildName}\n**対象:** <@{userId}> ({userTag})\n**理由:** {reason}\n**適用アクション:** {action}\n\nAnti-Nuke が破壊的な操作を検知しました。誤検知でないか手動でご確認ください。", + "no_action": "適用できませんでした(手動対応が必要)" + }, + "scheduled_security": { + "started_title": "🔒 スケジュールセキュリティ開始", + "started_body": "**{action}** を開始しました。\n適用時間帯: {range}", + "ended_title": "🔓 スケジュールセキュリティ終了", + "ended_body": "**{action}** を終了し、元の状態に戻しました。", + "type": { + "invite_disable": "招待リンクの一時停止", + "dm_disable": "メンバー間DMの一時停止", + "security_level": "認証レベルの引き上げ" + } + }, + "appeal_dm": { + "quarantine_title": "⚠️ 隔離(Quarantine)が適用されました", + "timeout_title": "⚠️ タイムアウトが適用されました", + "body": "**サーバー:** {guildName}\n**理由:** {reason}\n\n自動モデレーションにより {label} が適用されました。誤検知と思われる場合は、下のボタンから異議申し立てができます。", + "quarantine_label": "隔離(Quarantine)", + "timeout_label": "タイムアウト", + "btn_appeal": "異議申し立て" + }, + "notify": { + "channel_title": "🚨 自動モデレーション", + "channel_body": "<@{userId}> に対して処罰を実施しました。\n**処罰:** {action}\n**理由:** {reason}" + }, + "appeal_modal": { + "title": "異議申し立て", + "reason_label": "申し立ての理由", + "reason_placeholder": "誤検知と思われる理由や状況を詳しく入力してください。", + "success": "✅ 異議申し立てを受け付けました。モデレーターが確認次第、対応します。", + "already_submitted": "❌ 異議申し立てはすでに送信済みです。モデレーターの確認をお待ちください。", + "log_title": "📩 異議申し立て", + "log_body": "**申立人:** <@{userId}> ({userTag})\n**内容:**\n{reason}" + }, + "mod_ban": { + "success": "ユーザー <@{userId}> をBANしました。", + "failed": "ユーザー <@{userId}> のBANに失敗しました。", + "reason": "{moderatorTag} が Mod-Log からBANしました" + }, + "mod_kick": { + "success": "ユーザー <@{userId}> をKickしました。", + "failed": "ユーザー <@{userId}> のKickに失敗しました。", + "reason": "{moderatorTag} が Mod-Log からKickしました" + }, + "mod_unquarantine": { + "not_found": "ユーザー <@{userId}> の隔離スナップショットが見つかりません。", + "not_in_server": "ユーザー <@{userId}> はすでにサーバーにいません。", + "success": "ユーザー <@{userId}> の隔離を解除し、ロールを復元しました。", + "failed": "ユーザー <@{userId}> の隔離解除に失敗しました。", + "already_exists": "ユーザー <@{userId}> は現在隔離されていません。" + }, + "mod_untimeout": { + "success": "ユーザー <@{userId}> のタイムアウトを解除しました。", + "not_timed_out": "ユーザー <@{userId}> は現在タイムアウト中ではありません。", + "not_found": "ユーザー <@{userId}> が見つかりません。", + "failed": "ユーザー <@{userId}> のタイムアウト解除に失敗しました。" + }, + "mod_false_positive": { + "success": "ユーザー <@{userId}> を誤検知として隔離解除しました。", + "failed": "ユーザー <@{userId}> の隔離解除に失敗しました。", + "already_exists": "ユーザー <@{userId}> は現在隔離されていません。" + }, + "mod_confirm_spam": { + "success": "✅ スパムパターンを登録しました。", + "no_data": "パターンデータが見つかりませんでした(有効期限切れの可能性があります)。" + }, + "join_gate": { + "dm_title": "🔒 認証が必要です", + "dm_body": "**{guildName}** に参加するには認証が必要です。\n\n[こちらをクリックして認証してください]({verifyUrl})\n\nリンクは **10分間** 有効です。", + "channel_fallback": "<@{userId}> 認証が必要です。下のボタンをクリックして認証リンクを取得してください。" + }, + "pow_gate": { + "channel_title": "🔒 認証が必要です", + "channel_body": "このサーバーに参加するには認証が必要です。\n下のボタンをクリックして認証リンクを取得してください。", + "channel_note": "-# 認証リンクは10分間有効です", + "btn_label": "認証リンクを取得", + "no_guild": "認証情報を取得できませんでした。", + "no_settings": "認証設定が見つかりません。", + "not_needed": "認証は不要です。", + "link_reply": "以下のリンクから認証してください(**10分間有効**):\n{verifyUrl}", + "log_title": "認証完了 (PoW Gate)", + "log_body": "ユーザー: <@{userId}> ({userTag})\n**日時:** " + }, + "actions": { + "QUARANTINE": "隔離(Quarantine)", + "UNQUARANTINE": "隔離解除", + "TIMEOUT_5M": "5分のタイムアウト", + "TIMEOUT_10M": "10分のタイムアウト", + "TIMEOUT_30M": "30分のタイムアウト", + "TIMEOUT_1H": "1時間のタイムアウト", + "TIMEOUT_24H": "24時間のタイムアウト", + "DELETE_MESSAGE": "メッセージ削除", + "WARN": "警告", + "SEND_TO_REVIEW_QUEUE": "手動レビューへ送信", + "ADD_SUSPICION_LEVEL_1": "監視レベル1追加", + "NOTIFY_OWNER": "オーナー通知", + "MARK_COHORT_SUSPICION_LV2": "連座制による監視レベル2付与" + }, + "rules": { + "MESSAGE_SEND": "メッセージの連続送信", + "MESSAGE_REPEAT": "同一メッセージの反復", + "LINE_BREAK_SPAM": "改行スパム", + "ATTACHMENT": "添付ファイル送信", + "EMOJI": "絵文字スパム", + "ZALGO": "Zalgoテキスト", + "LONG_TEXT": "長文送信", + "URL": "URL送信", + "MENTION_USER": "ユーザーメンション", + "MENTION_ROLE": "ロールメンション", + "MENTION_HERE": "Hereメンション", + "MENTION_EVERYONE": "Everyoneメンション", + "INVITATION": "招待リンク", + "PHISHING": "フィッシングリンク", + "IMAGE_HASH": "不適切画像", + "CROSS_CHANNEL": "複数チャンネルへのスパム", + "BLACKLIST_WORD": "禁止ワード", + "INACTIVE_CHANNEL": "非アクティブチャンネルへの投稿", + "NSFW_URL": "NSFWリンク", + "ANTINUKE": "破壊行為(Anti-Nuke)の検出", + "ANTINUKE_CHANNEL_DELETE": "チャンネルの大量削除", + "ANTINUKE_ROLE_DELETE": "ロールの大量削除", + "ANTINUKE_CHANNEL_CREATE": "チャンネルの大量作成", + "ANTINUKE_ROLE_CREATE": "ロールの大量作成", + "ANTINUKE_WEBHOOK_CREATE": "Webhookの大量作成", + "ANTINUKE_BAN_KICK": "メンバーの大量BAN/キック", + "ANTINUKE_ROLE_GRANT": "ロールへの危険な権限の付与" + }, + "legacy_automod": { + "category": { + "harassment": "嫌がらせ", + "harassment/threatening": "嫌がらせ(脅迫)", + "hate": "ヘイト", + "hate/threatening": "ヘイト(脅迫)", + "sexual": "性的", + "sexual/minors": "性的(未成年)", + "violence": "暴力", + "violence/graphic": "暴力(描写)", + "self-harm": "自傷", + "self-harm/intent": "自傷(意図)", + "self-harm/instructions": "自傷(手段)", + "illicit": "違法行為", + "illicit/violent": "違法行為(暴力)" + }, + "thread_delete_reason": "レガシーAIモデレーションによる自動削除", + "report": { + "title": "🛡️ レガシーAIモデレーション検知", + "thread_title": "🛡️ レガシーAIモデレーション検知(スレッド)", + "author": "**送信者:** <@{userId}> (`{userTag}`)", + "content": "**内容:**\n{content}", + "high_score": "**高スコアカテゴリ:** {categories}", + "flagged": "**フラグ付きカテゴリ:** {categories}", + "auto_action": "**自動対応:** {action}", + "action_deleted": "削除", + "action_none": "なし", + "jump": "[メッセージへ移動]({url})", + "btn_delete": "メッセージ削除", + "btn_warn": "警告を送信" + }, + "delete": { + "success": "メッセージを削除しました。", + "failed": "メッセージの削除に失敗しました。", + "not_found": "対象のメッセージが見つかりませんでした。" + }, + "warn": { + "modal_title": "警告の送信", + "reason_label": "警告理由", + "reason_placeholder": "警告の理由を入力してください", + "bot_not_allowed": "Botへ警告を送信することはできません。", + "success": "<@{userId}> へ警告を送信しました。", + "dm_failed": "<@{userId}> へのDM送信に失敗しました(DMが閉じられている可能性があります)。", + "dm_title": "⚠️ 警告", + "dm_body": "**{guildName}** から警告を受けました。\n**理由:** {reason}", + "log_appended": "✅ <@{moderatorId}> が <@{userId}> へ警告を送信しました。\n**理由:** {reason}" + } } } } diff --git a/ja/web.json b/ja/web.json index c9e6334..f4547c7 100644 --- a/ja/web.json +++ b/ja/web.json @@ -18,6 +18,9 @@ "save": "保存", "saving": "保存中...", "saved": "保存しました", + "unsavedChanges": "未保存の変更があります", + "leaveWarning": "未保存の変更があります。ページを離れますか?", + "discard": "変更を破棄", "cancel": "キャンセル", "close": "閉じる", "loading": "読み込み中...", @@ -25,7 +28,8 @@ "notSet": "未設定", "buy": "購入する", "processing": "処理中...", - "soon": "近日公開" + "soon": "近日公開", + "back": "戻る" }, "authBlocked": { "title": "アクセスが制限されています", @@ -43,7 +47,9 @@ "inviteBot": "Botを招待", "viewDashboard": "ダッシュボードを見る", "pricing": "料金プラン", - "changelog": "更新履歴" + "changelog": "更新履歴", + "security": "セキュリティ", + "subscription": "サブスクリプション" }, "top": { "featuresSectionLabel": "機能", @@ -150,7 +156,9 @@ "open": "開く", "invite": "Botを追加", "reload": "再読み込み", - "refreshHint": "サーバーが表示されない場合は、Bot追加後に更新してください。" + "refreshHint": "サーバーが表示されない場合は、Bot追加後に更新してください。", + "passkeyBtn": "パスキーでログイン", + "orDivider": "または" }, "sidebar": { "overview": "概要", @@ -162,10 +170,19 @@ "subscription": "サブスクリプション", "credits": "クレジット", "allServers": "すべてのサーバー", + "searchServers": "サーバーを検索...", "manageSubscription": "サブスクリプション管理", + "security": "セキュリティ", "logout": "ログアウト", "messages": "メッセージ送信", - "workflow": "ワークフロー" + "workflow": "ワークフロー", + "automod": "統合モデレーション", + "activityLog": "操作ログ" + }, + "featureGate": { + "title": "この機能はご利用いただけません", + "desc": "このページの機能を使用するには、対応するプランまたは機能フラグが必要です。", + "upgrade": "プランをアップグレード" }, "overview": { "desc": "サーバーの状態と利用可能な機能を確認できます", @@ -183,6 +200,38 @@ "aimod": { "label": "AI モデレーション", "desc": "AI がリアルタイムでチャットを監視・対応" + }, + "analytics": { + "title": "アナリティクス", + "messages": "メッセージ数", + "members": "メンバー増減", + "joins": "参加", + "leaves": "退出", + "range7": "7日間", + "range30": "30日間", + "noData": "データがありません" + }, + "widget": { + "customize": "カスタマイズ", + "done": "完了" + }, + "fastaccess": { + "title": "クイックアクセス" + }, + "recentwork": { + "title": "最近の作業", + "empty": "まだ作業履歴がありません", + "justNow": "たった今", + "minutesAgo": "{n}分前", + "hoursAgo": "{n}時間前", + "daysAgo": "{n}日前" + }, + "analyticsummary": { + "title": "今週のサマリー", + "messages": "メッセージ数", + "joins": "参加", + "leaves": "退出", + "netChange": "純増減" } }, "general": { @@ -263,7 +312,37 @@ "statusRunning": "実行中", "statusStopped": "停止中", "logTitle": "モデレーションログ", - "logEmpty": "ログはありません" + "logEmpty": "ログはありません", + "legacyAiSection": "レガシーAIモデレーション設定", + "legacyAiDesc": "omni-moderationのスコアを基に自動でレポート・削除を行います", + "legacyAiLogChannelLabel": "ログチャンネル", + "legacyAiReportScoreLabel": "レポートスコア閾値", + "legacyAiReportScoreDesc": "低いほど敏感に検知し、ログに通知します", + "legacyAiDeleteScoreLabel": "削除スコア閾値", + "legacyAiDeleteScoreDesc": "この値を超えたメッセージを自動削除します(通知の値以上を推奨)", + "legacyAiScoreRecommend": "削除スコアはレポートスコア以上を推奨します", + "legacyAiBypassChannelsLabel": "バイパスチャンネル", + "legacyAiBypassChannelsDesc": "このチャンネルのメッセージはAIモデレーションをスキップします", + "legacyAiBypassRolesLabel": "バイパスロール", + "legacyAiBypassRolesDesc": "このロールを持つユーザーはAIモデレーションをスキップします", + "legacyAiBypassStringsLabel": "バイパス文字列", + "legacyAiBypassStringsDesc": "この文字列を含むメッセージはスキップします", + "legacyAiBypassStringPlaceholder": "バイパスする文字列を入力", + "legacyAiBypassStringAdd": "追加", + "noChannel": "チャンネルなし", + "noRole": "ロールなし", + "permissionDenied": "Master権限がないため設定を変更できません", + "saveError": "保存に失敗しました", + "forbiddenTitle": "アクセス権限がありません", + "forbiddenDesc": "このサーバーのモデレーション設定を閲覧・編集するにはMaster権限が必要です。", + "modeLabel": "モデレーションモード", + "modeDesc": "メッセージの自動監視方法を選択します", + "modeOff": "なし", + "modeOffDesc": "自動監視を行いません", + "modeLegacy": "レガシー版", + "modeLegacyDesc": "不適切なメッセージを自動で検知・通知・削除します(無料)", + "modeAdvanced": "次世代", + "modeAdvancedDesc": "文脈を理解する高度な AI モデレーション" }, "subscription": { "title": "サブスクリプション", @@ -317,6 +396,10 @@ "selectDesc": "購入するサーバーを選んでください" }, "purchaseFlow": { + "purchaseFailed": "購入処理が完了していないか、セッションが無効です。", + "purchaseSuccess": "ご購入ありがとうございます!", + "purchaseSuccessDesc": "{seconds}秒後にダッシュボードに戻ります...", + "backToDashboard": "ダッシュボードに戻る", "subscriptionTitle": "サブスクリプション", "ccTitle": "Cubeクレジットを購入", "popular": "人気", @@ -376,7 +459,20 @@ "優先サポート" ], "confirmTitle": "{plan} プランを購入しますか?", - "confirmDesc": "月額 ¥{price} が請求されます。いつでもキャンセルできます。" + "confirmDesc": "月額 ¥{price} が請求されます。いつでもキャンセルできます。", + "consentTitle": "購入前の確認", + "consentDesc": "購入手続きを進めるにあたり、生年月日の確認と利用規約への同意が必要です。", + "consentDob": "生年月日", + "consentYear": "年", + "consentMonth": "月", + "consentDay": "日", + "consentTermsLabel": "利用規約およびプライバシーポリシーに同意します", + "consentParentalLabel": "保護者から購入の許可を得ています", + "consentMinorNotice": "18歳未満の方は、保護者の同意が必要です。", + "consentUnderageError": "申し訳ありませんが、13歳未満の方はご購入いただけません。", + "consentDataNote": "入力された生年月日は年齢確認のためにのみ使用され、決済処理のためStripeと共有されます。", + "consentContinue": "同意して続ける", + "consentSubmitting": "確認中..." }, "accountSub": { "title": "サブスクリプション管理", @@ -457,7 +553,15 @@ "changePlanChanging": "変更中...", "changePlanNote": "変更は次の請求日から適用されます。", "downgradeNotAllowed": "ダウングレードはできません。一度解約してから下位プランに再契約してください。", - "addNew": "新しいプランを追加" + "addNew": "新しいプランを追加", + "pagination": { + "prev": "前へ", + "next": "次へ" + }, + "syncBtn": "サブスクリプションを同期", + "syncOk": "サブスクリプション情報を同期しました", + "syncFail": "同期に失敗しました", + "syncNote": "購入済みのサブスクリプションが表示されない場合は、同期ボタンで最新情報を取得できます" }, "pricing": { "title": "料金プラン", @@ -658,6 +762,10 @@ "threads": { "name": "スレッド", "desc": "スレッドの作成・更新・削除" + }, + "automod": { + "name": "AutoMod", + "desc": "AutoModルールの作成・更新・削除" } } }, @@ -710,6 +818,14 @@ "name": "メッセージ編集", "desc": "メッセージ編集のログを記録します" }, + "message_reaction_add": { + "name": "リアクション追加", + "desc": "メッセージへのリアクション追加のログを記録します" + }, + "message_reaction_remove": { + "name": "リアクション削除", + "desc": "メッセージへのリアクション削除のログを記録します" + }, "member_kick": { "name": "メンバーキック", "desc": "メンバーキックのログを記録します" @@ -841,6 +957,18 @@ "thread_delete": { "name": "スレッド削除", "desc": "スレッド削除のログを記録します" + }, + "automod_rule_create": { + "name": "AutoModルール作成", + "desc": "AutoModルール作成のログを記録します" + }, + "automod_rule_update": { + "name": "AutoModルール更新", + "desc": "AutoModルール更新のログを記録します" + }, + "automod_rule_delete": { + "name": "AutoModルール削除", + "desc": "AutoModルール削除のログを記録します" } }, "options": { @@ -865,6 +993,36 @@ "contentOptional": "(任意)", "contentPlaceholder": "メッセージの内容を入力...", "addEmbed": "Embedを追加", + "addActionRow": "Action Row を追加", + "actionRow": { + "rowN": "アクション行{n}", + "typeButtons": "ボタン", + "typeSelect": "セレクトメニュー", + "addButton": "ボタンを追加", + "buttonLabel": "ラベル", + "buttonLabelPlaceholder": "ボタンのテキスト", + "buttonStyle": "スタイル", + "buttonStylePrimary": "Primary(青)", + "buttonStyleSecondary": "Secondary(グレー)", + "buttonStyleSuccess": "Success(緑)", + "buttonStyleDanger": "Danger(赤)", + "buttonStyleLink": "Link(URL)", + "customId": "カスタムID", + "customIdPlaceholder": "ワークフローで使用するID", + "linkUrl": "URL", + "linkUrlPlaceholder": "https://...", + "selectCustomId": "カスタムID", + "selectCustomIdPlaceholder": "ワークフローで使用するID", + "selectPlaceholder": "プレースホルダー", + "selectPlaceholderPlaceholder": "選択してください", + "addOption": "オプションを追加", + "optionLabel": "ラベル", + "optionLabelPlaceholder": "表示テキスト", + "optionValue": "値", + "optionValuePlaceholder": "ワークフローで使用する値", + "optionDescription": "説明(任意)", + "optionN": "オプション {n}" + }, "send": "送信", "update": "更新", "cancel": "キャンセル", @@ -907,7 +1065,8 @@ "title": "送信済みメッセージ", "desc": "送信済みのメッセージ一覧です", "empty": "送信済みメッセージはありません", - "embedCount": "{count}件のEmbed" + "embedCount": "{count}件のEmbed", + "componentCount": "{count}個のコンポーネント" } }, "workflow": { @@ -999,6 +1158,36 @@ "messageDeleteTitle": "メッセージ削除設定", "modalSubmitTitle": "モーダル送信設定", "webhookReceiveTitle": "Webhook受信設定", + "rssPollTitle": "RSS監視設定", + "youtubeWebsubTitle": "YouTube投稿通知設定", + "twitchEventsubTitle": "Twitchイベント通知設定", + "rssFeedUrl": "RSSフィードURL", + "rssFeedUrlHint": "監視するRSS/AtomフィードのURLを指定します(http/https)", + "rssFeedUrlPlaceholder": "例: https://example.com/feed.xml", + "rssInterval": "確認間隔", + "rssIntervalHint": "新着投稿の確認頻度を選択します", + "rssIntervals": { + "5m": "5分ごと", + "15m": "15分ごと", + "30m": "30分ごと", + "1h": "1時間ごと", + "6h": "6時間ごと", + "12h": "12時間ごと", + "24h": "24時間ごと" + }, + "youtubeChannelId": "YouTubeチャンネルID", + "youtubeChannelIdHint": "通知を受け取りたいYouTubeチャンネルのIDを指定します", + "youtubeChannelIdPlaceholder": "例: UCxxxxxxxxxxxxxxxxxxxxxx", + "twitchBroadcasterUserId": "Twitch配信者ユーザーID", + "twitchBroadcasterUserIdHint": "通知を受け取りたい配信者の数値ユーザーIDを指定します", + "twitchBroadcasterUserIdPlaceholder": "例: 123456789", + "twitchSubscriptionTypes": "通知タイプ", + "twitchSubscriptionTypesHint": "受け取りたいTwitchイベントを選択します", + "twitchSubscriptionTypeLabels": { + "stream_online": "配信開始 (stream.online)", + "stream_offline": "配信終了 (stream.offline)", + "channel_update": "チャンネル更新 (channel.update)" + }, "customIdFilter": "カスタムID(任意)", "customIdFilterHint": "特定のカスタムIDから始まるものだけを対象にします。空欄で全て対象", "customIdPlaceholder": "例: my-button", @@ -1013,6 +1202,8 @@ "webhookNoToken": "Webhookトークンはまだ生成されていません。保存後に表示されます。", "allVoiceChannels": "すべてのVCチャンネル", "webhookUrlCopy": "URLをコピー", + "webhookRegenerateTitle": "URLを再生成", + "webhookRegenerateConfirm": "Webhook URLを再生成すると、現在のURLは無効になります。続行しますか?", "webhookUrlCopied": "コピーしました", "webhookUrlDesc": "このURLにPOSTリクエストを送るとワークフローが起動します。JSONボディは '{{webhook.payload.key}}' で参照できます。" }, @@ -1083,6 +1274,18 @@ "webhook_receive": { "label": "Webhook受信", "desc": "Webhookリクエストを受信したとき" + }, + "rss_poll": { + "label": "RSS投稿", + "desc": "RSSフィードに新着記事が追加されたとき" + }, + "youtube_websub": { + "label": "YouTube投稿", + "desc": "指定チャンネルに新しい動画が公開されたとき" + }, + "twitch_eventsub": { + "label": "Twitchイベント", + "desc": "Twitchの指定イベントを受信したとき" } }, "conditions": { @@ -1150,7 +1353,18 @@ "validationThreadChannelEmpty": "「スレッド作成」ノードには対象チャンネルが必要です。", "validationRenameChannelEmpty": "「チャンネル名変更」ノードにはチャンネルと新しい名前が必要です。", "validationAccountAgeEmpty": "「アカウント作成日数」ノードには最小日数が必要です。", - "validationVarKeyEmpty": "「変数の値」ノードには変数名が必要です。" + "validationVarKeyEmpty": "「変数の値」ノードには変数名が必要です。", + "validationScheduledCronMissing": "scheduledトリガーにはcron式(cron フィールド)の指定が必要です", + "validationScheduledCronInvalid": "無効なcron式です。標準の5フィールド形式(例: */5 * * * *)で指定してください", + "validationScheduledCronTooFrequent": "最短実行間隔は5分です(例: */5 * * * *)", + "validationRssFeedUrlMissing": "RSSトリガーにはフィードURLの指定が必要です。", + "validationRssFeedUrlInvalid": "RSSフィードURLは http:// または https:// で始まる有効なURLを指定してください。", + "validationRssIntervalInvalid": "RSSの実行間隔が不正です。", + "validationYoutubeChannelIdMissing": "YouTubeトリガーにはチャンネルIDの指定が必要です。", + "validationTwitchBroadcasterUserIdMissing": "Twitchトリガーには配信者ユーザーIDの指定が必要です。", + "validationTwitchBroadcasterUserIdInvalid": "配信者ユーザーIDは数字のみで指定してください。", + "validationTwitchSubscriptionTypesMissing": "Twitchトリガーには少なくとも1つの購読タイプが必要です。", + "validationTwitchSubscriptionTypeInvalid": "Twitchの購読タイプに不正な値が含まれています。" }, "logs": { "empty": "実行ログがありません", @@ -1217,7 +1431,7 @@ "variableKey": "変数名", "variableKeyPlaceholder": "例: myVar", "variableValue": "値", - "variableValuePlaceholder": "例: '{{user.name}}'", + "variableValuePlaceholder": "例: {{user.name}}'", "ephemeral": "エフェメラル(本人のみ表示)", "replyContent": "返信内容(省略可)", "replyContentPlaceholder": "返信メッセージ...", @@ -1247,11 +1461,13 @@ "buttonCustomIdHint": "内部識別子(英数字・ハイフン)", "buttonCustomIdPlaceholder": "例: confirm-btn", "buttonModeCustomId": "カスタムID", - "buttonModeLinked": "ワークフロー連携", - "buttonLinkedWorkflow": "連携するワークフロー", - "buttonLinkedWorkflowHint": "ボタンを押したときに実行されるワークフロー", + "buttonModeLinked": "ワークフローを連携する", + "buttonModeContinue": "続けて実行", + "buttonModeContinueHint": "このボタンが押されると、同じワークフローの続きが実行されます。'{{button.label}}' と '{{button.index}}' で押されたボタンを判別できます。", + "buttonLinkedWorkflow": "ワークフローを連携しました", + "buttonLinkedWorkflowHint": "ボタンがクリックされたときに実行するワークフロー", "buttonLinkedWorkflowPlaceholder": "ワークフローを選択...", - "buttonLinkedWorkflowNone": "ワークフローが見つかりません", + "buttonLinkedWorkflowNone": "ワークフローが見つかりませんでした。", "buttonStyle": "スタイル", "buttonStylePrimary": "プライマリ(青)", "buttonStyleSecondary": "セカンダリ(灰)", @@ -1301,8 +1517,8 @@ "enabled": "有効", "disabled": "無効", "noSettings": "設定項目はありません", - "varNote": "set_variableノードでセットした変数は '{{変数名}}' で参照できます", - "webhookPayloadHint": "受信したJSONの各キーは '{{webhook.payload.keyName}}' で参照できます", + "varNote": "Set Variable ノードで設定された変数は、'{{変数名}} ' として参照できます。", + "webhookPayloadHint": "受信した JSON の各キーは '{{webhook.payload.keyName}}' として利用できます", "webhookHeaders": "カスタムヘッダー", "webhookHeadersHint": "Authorization: Bearer token など", "webhookAddHeader": "ヘッダーを追加", @@ -1335,5 +1551,446 @@ "executionCount": "{count} 回実行", "planViolationBadge": "プラン制限", "duplicateError": "複製に失敗しました" + }, + "admin": { + "title": "Cube 管理者", + "loggedInAs": "ログイン中", + "exitAdmin": "ダッシュボードへ戻る", + "cancel": "キャンセル", + "create": "作成", + "save": "保存", + "saving": "保存中...", + "add": "追加", + "nav": { + "dashboard": "ダッシュボード", + "subscriptions": "サブスクリプション", + "users": "ユーザー", + "guilds": "サーバー", + "blacklist": "ブラックリスト", + "spamPatterns": "スパムパターン", + "economy": "エコノミー", + "features": "フィーチャーフラグ", + "testGroups": "テストグループ" + }, + "dashboard": { + "title": "システム状況", + "desc": "シャードのリアルタイム監視と管理", + "totalGuilds": "総サーバー数", + "avgPing": "平均 Ping", + "totalMemory": "合計メモリ", + "shards": "シャード", + "refresh": "更新", + "noShards": "シャード情報がありません", + "errorShards": "シャード情報の取得に失敗しました", + "leaveBtn": "退出", + "reloadI18nBtn": "i18n 再読み込み", + "restartAllBtn": "全再起動", + "confirmRestartAll": "全シャードを再起動しますか?Botが一時的に切断されます。", + "confirmRestartShard": "Shard {id} を再起動しますか?", + "confirmReloadI18n": "翻訳ファイルを再読み込みしますか?", + "confirmLeaveGuild": "ギルド {id} から強制退出しますか?", + "restartAllOk": "全シャードの再起動を開始しました", + "restartAllFail": "再起動の開始に失敗しました", + "restartShardOk": "Shard {id} の再起動を開始しました", + "restartShardFail": "シャードの再起動に失敗しました", + "reloadI18nOk": "翻訳ファイルを再読み込みしました", + "reloadI18nFail": "再読み込みに失敗しました", + "leaveGuildOk": "ギルド {id} から退出しました", + "leaveGuildFail": "ギルドからの退出に失敗しました" + }, + "subscriptions": { + "title": "サブスクリプション", + "create": "作成", + "createTitle": "サブスクリプション作成", + "searchPlaceholder": "ユーザー名・メール・ギルド名で検索...", + "colUser": "ユーザー", + "colGuild": "ギルド", + "colStatus": "ステータス", + "colExpiry": "有効期限", + "extend": "期間延長", + "extendOk": "期間を延長しました", + "extendFail": "期間延長に失敗しました", + "empty": "サブスクリプションがありません", + "syncBtn": "Stripe同期", + "confirmSync": "StripeとDBのサブスクリプション情報を同期しますか?", + "syncOk": "{synced}件同期しました(エラー: {errors}件)", + "syncFail": "同期に失敗しました", + "cancelAtEnd": "期間終了時にキャンセル", + "syncUserPlaceholder": "ユーザーID", + "confirmSyncUser": "ユーザー {userId} のサブスクリプション情報を同期しますか?" + }, + "blacklist": { + "title": "ブラックリスト", + "add": "追加", + "addTitle": "ブラックリストに追加", + "addBtn": "追加", + "reason": "理由", + "isBlacklisted": "BAN", + "isMuted": "グロチャミュート", + "searchPlaceholder": "User ID・理由で検索...", + "confirmRemove": "ユーザー {userId} をブラックリストから削除しますか?", + "removeOk": "ブラックリストから削除しました", + "removeFail": "削除に失敗しました", + "empty": "ブラックリストが空です" + }, + "guilds": { + "title": "サーバー一覧", + "searchPlaceholder": "サーバー名・IDで検索...", + "colName": "サーバー名", + "confirmDelete": "{name} のデータを削除しますか?この操作は取り消せません。", + "deleteOk": "サーバーデータを削除しました", + "deleteFail": "削除に失敗しました", + "empty": "サーバーがありません", + "syncBtn": "Bot同期", + "confirmSync": "Botが参加しているサーバーをDBに同期しますか?", + "syncOk": "{synced} 件のサーバーを同期しました", + "syncFail": "同期に失敗しました", + "leaveBtn": "退出", + "confirmLeave": "{name} からBotを退出させますか?", + "leaveOk": "Botがサーバーから退出しました", + "leaveFail": "退出に失敗しました", + "notFound": "サーバーが見つかりません", + "saveOk": "設定を保存しました", + "saveFail": "保存に失敗しました", + "detailSettings": "設定", + "detailLang": "言語", + "detailCreated": "作成日", + "detailUpdated": "更新日", + "detailCredits": "クレジット", + "creditPaid": "有料", + "creditBonus": "ボーナス", + "creditTotal": "合計", + "detailSubscription": "サブスクリプション", + "noSubscription": "サブスクリプションなし", + "detailExpiry": "有効期限", + "detailFeatures": "機能フラグ", + "featureFromPlan": "プラン", + "featureRawValue": "フラグ値", + "addPurge": "Auto Purge 追加", + "purgeDesc": "{msgLimit}件 / {interval}分ごとに削除", + "msgLimit": "メッセージ上限", + "msgs": "件", + "purgeInterval": "削除間隔", + "min": "分", + "addReact": "Auto React 追加", + "emoji": "絵文字", + "roleKeeperTitle": "ロールキーパー", + "rkEnable": "有効化", + "rkEnableDesc": "Role Keeper を有効にします", + "rkExcludeAdmin": "管理者権限を除外", + "rkExcludeAdminDesc": "管理者権限のあるロールの自動ロール保持を除外します", + "rkExcludeMod": "モデレーター権限を除外", + "rkExcludeModDesc": "モデレーター権限のあるロールの自動ロール保持を除外します", + "addSticky": "Sticky Message 追加", + "stickyContent": "メッセージ内容", + "workflowTitle": "ワークフロー", + "noWorkflows": "ワークフローがありません", + "execCount": "{count} 回実行", + "confirmDeleteWorkflow": "このワークフローを削除しますか?この操作は取り消せません。" + }, + "economy": { + "title": "エコノミー管理", + "grantTitle": "クレジット付与", + "grantAllTitle": "全サーバーへ一括付与", + "grantAllDesc": "稼働中の全サーバーへボーナスクレジットを付与します。確認キーの入力が必要です。", + "amount": "付与量", + "type": "種別", + "reason": "理由", + "confirmKey": "確認キー", + "confirmGrantAll": "{amount} CC を全サーバーへ付与しますか?", + "confirmKeyMismatch": "確認キーが一致しません", + "grantBtn": "付与する", + "grantAllBtn": "全サーバーへ付与", + "grantOk": "クレジットを付与しました", + "grantFail": "付与に失敗しました", + "grantAllOk": "一括付与を実行しました", + "grantAllFail": "一括付与に失敗しました" + }, + "users": { + "title": "ユーザー検索", + "searchPlaceholder": "Discord ID または User ID", + "searchBtn": "検索", + "notFound": "ユーザーが見つかりません", + "economyTitle": "クレジット残高", + "confirmDelete": "{name} の全データを削除しますか?この操作は取り消せません。", + "deleteBtn": "ユーザー削除", + "deleteOk": "ユーザーデータを削除しました", + "deleteFail": "削除に失敗しました" + } + }, + "automod": { + "unknownUser": "不明", + "title": "統合モデレーション", + "desc": "AutoMod・AntiRaid・JoinGate の設定を行います", + "tabFilters": "フィルター", + "tabProtection": "保護", + "tabVerification": "認証", + "tabPermissions": "権限", + "tabWhitelist": "除外設定", + "whitelistDesc": "特定のユーザー、ロール、チャンネルを各ルールの対象外に設定します", + "automodSection": "AutoMod", + "automodDesc": "スパムや不審なメッセージを自動検知・対応します", + "enabled": "有効", + "disabled": "無効", + "heatPresetLabel": "熱量プリセット", + "heatPresetDesc": "違反への感度と制裁の強さを調整します", + "lenientLabel": "緩め", + "lenientDesc": "軽微な違反は許容", + "standardLabel": "標準", + "standardDesc": "バランスの取れたデフォルト", + "strictLabel": "厳格", + "strictDesc": "軽い違反にも即対応", + "logChannelLabel": "ログチャンネル", + "logChannelDesc": "モデレーションアクションを通知するチャンネル", + "noChannel": "チャンネルなし", + "quarantineRoleLabel": "隔離ロール", + "quarantineRoleDesc": "隔離対象ユーザーに付与するロール", + "noRole": "ロールなし", + "panicModeLabel": "エマージェンシーモード", + "panicModeDesc": "有効時、全ユーザーへの制裁閾値を大幅に下げます", + "crossServerOptInLabel": "サーバー間のリスク共有", + "crossServerOptInDesc": "有効時、このサーバーの違反情報を匿名でクロスサーバーリスクデータベースに提供し、他サーバーの脅威検知精度を向上します", + "trustedRolesLabel": "信頼ロール(AutoMod完全免除)", + "trustedRolesDesc": "このロールを持つメンバーはすべてのAutoMod検知をスキップします", + "antiNukeSection": "AntiNuke", + "antiNukeDesc": "サーバーへの破壊的な操作(チャンネル削除・一括BAN等)を検知・対応します", + "antiNukeChannelDeleteLabel": "チャンネル削除", + "antiNukeRoleDeleteLabel": "ロール削除", + "antiNukeChannelCreateLabel": "チャンネル作成", + "antiNukeRoleCreateLabel": "ロール作成", + "antiNukeWebhookCreateLabel": "Webhook作成", + "antiNukeBanKickLabel": "BAN/Kick", + "antiNukeRoleGrantLabel": "ロール一括付与", + "antiNukeLimitSuffix": "回で発動", + "antiNukeWindowSuffix": "秒以内", + "antiRaidSection": "AntiRaid", + "antiRaidDesc": "レイド攻撃(大量参加)を検知・対応します", + "antiRaidJoinRateLabel": "参加レート上限", + "antiRaidJoinRateDesc": "設定した時間内にこの人数以上が参加するとレイドと判定します", + "antiRaidWindowLabel": "参加ウィンドウ(秒)", + "antiRaidAccountAgeLabel": "アカウント年齢(日)", + "antiRaidAccountAgeDesc": "この日数未満のアカウントはレイドスコアが加算されます", + "joinGateSection": "JoinGate", + "joinGateDesc": "不審な条件に合致した新規参加者を隔離・認証させます", + "joinGateFilterNoAvatarLabel": "デフォルトアバターをフィルター", + "joinGateFilterNoAvatarDesc": "プロフィール画像を設定していないアカウントを隔離", + "joinGateFilterNewAccountLabel": "新規アカウントをフィルター(日数)", + "joinGateFilterNewAccountDesc": "指定日数未満のアカウントを隔離。0で無効", + "joinGateFilterAdvertisingLabel": "広告アカウントをフィルター", + "joinGateFilterAdvertisingDesc": "プロフィールに招待リンク等を含むアカウントを隔離", + "joinGateFilterUnverifiedBotLabel": "未認証Botをフィルター", + "joinGateFilterUnverifiedBotDesc": "Discordで認証されていないBotアカウントを隔離する", + "joinGateFilterUnauthorizedBotLabel": "未承認Botをフィルター", + "joinGateFilterUnauthorizedBotDesc": "Masterでないメンバーが追加したBotを隔離", + "powGateSectionInner": "認証フロー(PoW Gate)", + "powGateRoleReady": "設定済み", + "powGateRoleNotReady": "未設定(セットアップ後に自動作成)", + "quarantineRoleReady": "設定済み", + "quarantineRoleNotReady": "未設定", + "powGateSection": "PoW Gate(人間証明)", + "powGateDesc": "Cloudflare Turnstileで人間確認を要求し、BOTや荒らしを防ぐ", + "powGateAllUsersLabel": "全新規メンバーに適用", + "powGateAllUsersDesc": "オフ時はJoinGateフィルターに引っかかったユーザーのみ対象", + "powGateRoleLabel": "制限ロール", + "powGateRoleDesc": "認証前のユーザーに付与するロール(認証後に自動削除)", + "powGateChannelLabel": "認証チャンネル", + "powGateChannelDesc": "DMが届かない場合の案内チャンネル(設定時に自動権限調整)", + "powGateTimeoutLabel": "タイムアウト", + "powGateTimeoutDesc": "認証未完了ユーザーを自動キックするまでの時間(0で無効)", + "minutes": "分", + "messages": "件", + "limit": "上限", + "window": "期間", + "age": "年齢", + "automodRules": "ルール設定", + "quarantineSetupBanner": "隔離ロールが未セットアップです", + "quarantineSetupBannerDesc": "モデレーション機能が有効ですが、隔離ロールが設定されていません。ボタンを押すとBotが自動でロール作成・チャンネル権限設定を行います。", + "quarantineSetupBtn": "今すぐセットアップ", + "quarantineSetupRequesting": "セットアップ中...", + "quarantineSetupDone": "セットアップをリクエストしました。数秒後に反映されます。", + "setupBtn": "セットアップ", + "requesting": "処理中...", + "setupDone": "完了", + "discordRegistered": "Discordと同期済み", + "discordNotRegistered": "Discord未同期", + "discordRegisterBtn": "Discordと同期", + "discordRegistering": "同期中...", + "ruleMentionSpam": "メンションスパム", + "ruleMentionSpamDesc": "@user / @role / @here / @everyone のメンションをheatとして加算", + "ruleInviteLink": "招待リンク", + "ruleInviteLinkDesc": "Discord 招待URLを検知", + "ruleEmojiSpam": "絵文字スパム", + "ruleEmojiSpamDesc": "絵文字1個につき+1%(上限20%/メッセージ)", + "ruleCharSpam": "文字スパム", + "ruleCharSpamDesc": "同一文字の連続・Zalgoテキストを検知", + "ruleUrlScan": "URLスキャン", + "ruleUrlScanDesc": "短縮URL展開 → Safe Browsing APIで悪意あるURLを検知", + "ruleImageHash": "スパム画像ブロック", + "ruleImageHashDesc": "Cubeのスパム・NSFW画像データベースと照合し、一致した画像を自動削除します", + "ruleCrossChannel": "クロスチャンネル", + "ruleCrossChannelDesc": "短時間に複数チャンネルへの類似投稿を検知", + "rulePhishing": "フィッシング", + "rulePhishingDesc": "既知フィッシングドメイン・詐欺URLパターンを検知", + "ruleBlacklistWord": "ブラックリストワード", + "ruleBlacklistWordDesc": "管理者が設定したワードを含むメッセージにheatを加算", + "blacklistWordAdd": "追加", + "blacklistWordPlaceholder": "禁止ワードを入力", + "blacklistWordPlaceholder_text": "禁止ワードを入力(部分一致)", + "blacklistWordPlaceholder_wildcard": "例: *悪い言葉* または spam*", + "blacklistWordPlaceholder_regex": "例: (bad|spam)\\w+", + "blacklistWordType_text": "テキスト", + "blacklistWordType_wildcard": "ワイルドカード", + "blacklistWordType_regex": "正規表現", + "blacklistWordWildcardHint": "* は任意の文字列に一致します。例: *word* で部分一致、word* で前方一致", + "blacklistWordRegexHint": "JavaScript 正規表現が使用できます(最大10件まで Discord AutoMod に同期されます)", + "blacklistWordHeat": "Heat値", + "blacklistWordHeatHelp": "1〜100(デフォルト30%)", + "ruleInactiveChannel": "活発でないチャンネルへの投稿", + "ruleInactiveChannelDesc": "長時間投稿がなかったチャンネルへの投稿に+3%を加算", + "inactiveChannelThreshold": "非活性判定時間(日)", + "nightTimeRange": "夜間時間帯(JST)", + "nightTimeRangeDesc": "この時間帯は深刻度閾値が低く設定される(夜間ポリシー)", + "nightTimeRangeTo": "〜", + "spamHashManagement": "既知スパム画像ハッシュ管理", + "spamHashAdd": "ハッシュを追加", + "spamHashPlaceholder": "dHashビット列(64文字)", + "spamHashLabelPlaceholder": "ラベル(任意)", + "save": "保存", + "saving": "保存中...", + "saved": "保存しました", + "saveError": "保存に失敗しました", + "days": "日", + "people": "人", + "seconds": "秒", + "alwaysOnRulesWhitelist": "常時適用ルールの除外設定", + "ruleMessageSend": "メッセージ送信", + "ruleMessageSendDesc": "すべてのメッセージ送信ごとに +2%(常時適用)", + "ruleMessageRepeat": "繰り返しメッセージ", + "ruleMessageRepeatDesc": "直前と類似した内容の繰り返し送信に +8%(常時適用)", + "ruleAttachment": "添付ファイル", + "ruleAttachmentDesc": "画像・ファイルの添付ごとに +4%(常時適用)", + "whitelistSection": "ホワイトリスト", + "whitelistRoles": "ロール除外", + "whitelistChannels": "チャンネル除外", + "whitelistAddPlaceholder": "IDを入力", + "whitelistEmpty": "除外設定なし", + "mastersSection": "モデレーション管理者(Master)", + "mastersDesc": "統合モデレーション設定を変更できるユーザー(Discord管理者権限とは独立)", + "trustedSection": "免除ユーザー(Trusted)", + "trustedDesc": "Heat・AI・AntiNukeなどの処罰アクションを免除するユーザー", + "addMaster": "Masterを追加", + "addTrusted": "Trustedを追加", + "userIdPlaceholder": "Discord ユーザーID", + "remove": "削除", + "permissionDenied": "Master権限がないため設定を変更できません", + "exemptHeatLane": "Heatレーン免除", + "exemptAiLane": "AIレーン免除", + "exemptAntinuke": "AntiNuke免除", + "exemptAntiraid": "AntiRaid免除", + "tabSchedule": "スケジュール", + "scheduleSection": "スケジュールセキュリティルール", + "scheduleSectionDesc": "特定の時間帯・期間にサーバーのセキュリティ設定を自動で変更します", + "scheduleAddRule": "ルールを追加", + "scheduleRuleType": "アクション", + "scheduleRuleTypeInviteDisable": "招待リンクを無効化", + "scheduleRuleTypeDmDisable": "DM を無効化", + "scheduleRuleTypeSecurityLevel": "認証レベルを変更", + "scheduleScheduleType": "スケジュール種別", + "scheduleTimeRange": "毎日繰り返し(時間帯)", + "scheduleDateRange": "一回限り(期間指定)", + "scheduleStartTime": "開始時刻 (JST)", + "scheduleEndTime": "終了時刻 (JST)", + "scheduleStartDate": "開始日時", + "scheduleEndDate": "終了日時", + "scheduleSecurityLevel": "認証レベル", + "scheduleSecurityLevelNone": "なし (0)", + "scheduleSecurityLevelLow": "低 (1)", + "scheduleSecurityLevelMedium": "中 (2)", + "scheduleSecurityLevelHigh": "高 (3)", + "scheduleSecurityLevelVeryHigh": "最高 (4)", + "scheduleLabel": "ラベル(任意)", + "scheduleLabelPlaceholder": "例: 深夜帯セキュリティ強化", + "scheduleEnabled": "有効", + "scheduleDeleteConfirm": "このルールを削除しますか?", + "scheduleNoRules": "スケジュールルールがありません", + "scheduleRuleTypeInviteDisableDesc": "指定した時間帯はサーバーの招待リンクを一時停止します。", + "scheduleRuleTypeDmDisableDesc": "指定した時間帯はサーバー経由のメンバー間 DM を一時停止します。", + "scheduleRuleTypeSecurityLevelDesc": "指定した時間帯だけ認証レベルを引き上げ、時間外は元のレベルへ自動で戻します。", + "scheduleTimeRangeHint": "毎日この時間帯に繰り返し適用されます(JST)。日をまたぐ指定(例: 22:00→08:00)も可能です。", + "scheduleDateRangeHint": "指定した開始〜終了日時の一度きりで適用されます。", + "schedulePreviewLabel": "プレビュー", + "schedulePreviewTimeRange": "毎日 {start}〜{end} JST の間、{action}", + "schedulePreviewDateRange": "{start} 〜 {end} の間、{action}", + "scheduleActionInviteDisable": "招待リンクを一時停止します。", + "scheduleActionDmDisable": "メンバー間 DM を一時停止します。", + "scheduleActionSecurityLevel": "認証レベルを「{level}」に引き上げます。", + "scheduleAddRuleTitle": "ルールを追加", + "scheduleEditRuleTitle": "ルールを編集", + "scheduleSave": "保存", + "scheduleSaved": "保存しました", + "scheduleDailyHint": "毎日この時間帯に自動で適用されます(JST)。日をまたぐ指定(例: 22:00→翌08:00)も可能です。", + "scheduleEnableLog": "ログを有効にする", + "scheduleEnableLogDesc": "開始・終了時にログを送信します。", + "scheduleLogChannel": "ログを送信するチャンネル", + "scheduleSelectChannel": "チャンネルを選択", + "scheduleLevelLowDesc": "メール認証済みのアカウントのみ", + "scheduleLevelMediumDesc": "Discord登録から5分以上経過したアカウントのみ", + "scheduleLevelHighDesc": "サーバー参加から10分以上経過したアカウントのみ", + "scheduleLevelVeryHighDesc": "電話番号認証済みのアカウントのみ" + }, + "accountSecurity": { + "title": "セキュリティ", + "desc": "パスキーを登録して、Discordにアクセスできない場合でもログインできます", + "passkeyTitle": "パスキー", + "passkeyDesc": "登録済みのパスキーを使って緊急時にログインできます", + "addPasskey": "パスキーを追加", + "adding": "登録中...", + "noPasskeys": "パスキーが登録されていません", + "noPasskeysDesc": "パスキーを追加すると、Discordアカウントを失った場合でもログインできます", + "deletePasskey": "削除", + "deleting": "削除中...", + "addSuccess": "パスキーを登録しました", + "addError": "パスキーの登録に失敗しました", + "deleteSuccess": "パスキーを削除しました", + "deleteError": "パスキーの削除に失敗しました", + "registeredAt": "登録日", + "addModalTitle": "パスキーに名前を付ける", + "addModalDesc": "このデバイスを識別しやすい名前を入力してください。", + "addModalPlaceholder": "例: 私のiPhone、メインPC", + "addModalBtn": "登録を開始" + }, + "activityLog": { + "title": "操作ログ", + "desc": "ダッシュボードでの設定変更・操作の履歴を確認できます", + "empty": "操作ログがありません", + "loadMore": "さらに読み込む", + "loading": "読み込み中...", + "filterAll": "すべて", + "page": "ページ", + "of": "/", + "total": "件", + "categories": { + "module": "モジュール", + "workflow": "ワークフロー", + "audit_log": "監査ログ設定", + "guild": "サーバー設定", + "moderation": "モデレーション", + "ai_moderation": "AIモデレーション", + "general": "一般" + }, + "actions": { + "auto_purge_updated": "自動削除設定を更新", + "auto_purge_deleted": "自動削除設定を削除", + "auto_react_updated": "自動リアクション設定を更新", + "auto_react_deleted": "自動リアクション設定を削除", + "role_keeper_updated": "ロールキーパー設定を更新", + "role_keeper_deleted": "ロールキーパー設定を削除", + "workflow_created": "ワークフローを作成", + "workflow_updated": "ワークフローを更新", + "workflow_deleted": "ワークフローを削除", + "audit_log_channel_set": "監査ログチャンネルを設定", + "guild_settings_updated": "サーバー設定を更新", + "moderation_settings_updated": "モデレーション設定を更新" + } } }