From b0f50235573c02b92ea02d09bfae17b33c2d841e Mon Sep 17 00:00:00 2001 From: Cube Team Date: Tue, 7 Jul 2026 23:38:16 +0900 Subject: [PATCH 01/13] New translations bot.json (Japanese) [ci skip] --- ja/bot.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ja/bot.json b/ja/bot.json index 0495744..2522059 100644 --- a/ja/bot.json +++ b/ja/bot.json @@ -427,7 +427,7 @@ }, "info": { "description": "ユーザーのモデレーションステータス(Heat, Suspicion等)を表示します。", - "title": "{user} のモデレーション情報", + "title": "{{user}} のモデレーション情報", "heat": "現在のHeat", "suspicion": "不審者レベル", "last_violation": "最終違反日時", @@ -623,7 +623,7 @@ "already_exists": "ユーザー <@{userId}> はすでにその状態であるか、処罰をスキップしました。" }, "report": { - "self_error": "自分自身やBotを通報することはできません。", + "self_error": "自分自身を通報することはできません。", "reporter_prefix": "通報者: {moderatorTag} — {reason}", "success": "✅ <@{userId}> を通報しました。モデレーターが確認します。", "modal_title": "メッセージを通報", @@ -1139,7 +1139,7 @@ "v2_failed_hint": "-# 対象が管理者権限を持っている、またはBotより上位のロールを持っているため自動処罰できませんでした。下のボタンから手動で対応してください。", "btn_ban": "BAN", "btn_kick": "キック", - "btn_unquarantine": "隔離解除", + "btn_unquarantine": "誤検知(隔離解除)", "btn_untimeout": "タイムアウト解除", "btn_false_positive": "誤検知として解除", "btn_confirm_spam": "スパム確認", @@ -1154,15 +1154,15 @@ "ai_lane": { "review": { "title": "🤖 AIモデレーション 要確認", - "author": "**対象:** <@{userId}>\n`{userTag}`", + "author": "**対象:** <@{userId}> ({userTag})", "verdict": "**判定:** {label}(信頼度 {confidence}%)", "verdict_label": "**⚖️ 判定:** {label}", "confidence": "**🎯 信頼度:** `{gauge}`", "severity": "**🔥 深刻度:** `{gauge}`", - "categories": "**🏷️ カテゴリ:** {categories}", + "categories": "**カテゴリ:** {categories}", "triggers": "**🚦 発火ルール:** {triggers}", - "reason": "**📝 理由:** {reason}", - "jump": "[📨 メッセージへ移動]({url})", + "reason": "**理由:** {reason}", + "jump": "[メッセージへ移動]({url})", "btn_jump": "📨 対象メッセージへ移動", "label_gray": "グレー", "label_violation": "違反", @@ -1212,8 +1212,8 @@ "v2_guide": "-# サーバーのルールを今一度ご確認ください。違反が続くと、より重い措置が取られる場合があります。" }, "notify_owner": { - "dm_title": "🛡️ Anti-Nuke 検知(オーナー通知)", - "dm_body": "**サーバー:** {guildName}\n**対象:** <@{userId}> ({userTag})\n**理由:** {reason}\n**適用アクション:** {action}\n\nAnti-Nuke が破壊的な操作を検知しました。誤検知でないか手動でご確認ください。", + "dm_title": "⚠️ 管理者通知", + "dm_body": "**サーバー:** {guildName}\n**対象:** <@{userId}> ({userTag})\n**理由:** {reason}\n\nこのユーザーは信頼スコアが高いため24時間タイムアウトを適用しました。手動確認してください。", "no_action": "適用できませんでした(手動対応が必要)" }, "scheduled_security": { @@ -1230,7 +1230,7 @@ "appeal_dm": { "quarantine_title": "⚠️ 隔離(Quarantine)が適用されました", "timeout_title": "⚠️ タイムアウトが適用されました", - "body": "自動モデレーションにより **{label}** が適用されました。\n\n**🏠 サーバー:** {guildName}\n**📝 理由:** {reason}\n\n-# 誤検知と思われる場合は、下のボタンから異議申し立てができます。", + "body": "**サーバー:** {guildName}\n\n自動モデレーションにより {label} が適用されました。誤検知と思われる場合は、下のボタンから異議申し立てができます。", "quarantine_label": "隔離(Quarantine)", "timeout_label": "タイムアウト", "btn_appeal": "異議申し立て" From f1d78ec8a5c74e8d5cd7319653494ffe406aae2f Mon Sep 17 00:00:00 2001 From: Cube Team Date: Tue, 7 Jul 2026 23:38:19 +0900 Subject: [PATCH 02/13] New translations web.json (Japanese) [ci skip] --- ja/web.json | 111 +++++++++++++++++++++++++--------------------------- 1 file changed, 54 insertions(+), 57 deletions(-) diff --git a/ja/web.json b/ja/web.json index b15730e..1013ef0 100644 --- a/ja/web.json +++ b/ja/web.json @@ -351,9 +351,9 @@ "legacyAiDesc": "omni-moderationのスコアを基に自動でレポート・削除を行います", "legacyAiLogChannelLabel": "ログチャンネル", "legacyAiReportScoreLabel": "レポートスコア閾値", - "legacyAiReportScoreDesc": "低いほど敏感に検知し、ログに通知します", + "legacyAiReportScoreDesc": "このスコア以上でログに報告します(0〜1)", "legacyAiDeleteScoreLabel": "削除スコア閾値", - "legacyAiDeleteScoreDesc": "この値を超えたメッセージを自動削除します(通知の値以上を推奨)", + "legacyAiDeleteScoreDesc": "このスコア以上でメッセージを自動削除します(0〜1、レポート以上推奨)", "legacyAiScoreRecommend": "削除スコアはレポートスコア以上を推奨します", "legacyAiBypassChannelsLabel": "バイパスチャンネル", "legacyAiBypassChannelsDesc": "このチャンネルのメッセージはAIモデレーションをスキップします", @@ -385,8 +385,8 @@ "naturalLanguageRulesNoSurcharge": "ルール未設定のため追加CCはありません", "naturalLanguageRulesPlaceholder": "例:\n- 政治・宗教の議論は禁止\n- 18歳未満に不適切なコンテンツを送ってはならない\n- 他のユーザーへの侮辱的な発言は削除する", "advancedViolationStorageLabel": "高度な違反保存", - "advancedViolationStorageDesc": "AI が違反理由を分類して保存します。モデレーションログの詳細化に役立ちますが、2CC/件 のクレジットを消費します", - "modLogCompactLabel": "コンパクトログ", + "advancedViolationStorageDesc": "AI が違反理由を分類して保存します。モデレーションログの詳細化に役立ちますが、1CC/件 のクレジットを消費します", + "modLogCompactLabel": "コンパクトなログ", "modLogCompactDesc": "モデレーターログを簡潔な1行表示にします。オフ(既定)では、サムネイルや信頼度ゲージを含む詳細表示になります", "nodeEditorLinkLabel": "ノードエディター", "nodeEditorLinkDesc": "パイプラインをノードで視覚的に構築・編集します", @@ -540,8 +540,8 @@ }, "handles": { "next": "次へ", - "true": "該当", - "false": "非該当", + "true": "一致", + "false": "不一致", "safe": "安全", "gray": "グレー", "violation": "違反", @@ -592,9 +592,9 @@ "max_mentions_hint": "1メッセージあたりのメンションがこの数を超えると違反と判定します", "sensitivity": "感度", "sensitivity_hint": "スクリーニングの感度。high ほど多くのメッセージを違反候補として下流に流します", - "threshold": "確信度しきい値", + "threshold": "閾値", "threshold_hint": "直近の判定の確信度がこの値以上なら true 側へ分岐します", - "message": "対象メッセージ", + "message": "メッセージ", "message_hint": "操作対象のメッセージ。current で現在のメッセージを指します", "duration": "期間", "duration_hint": "処罰の期間(例: 1h, 1d)。空欄で無期限になります", @@ -603,17 +603,17 @@ "content": "本文", "content_hint": "送信するメッセージの本文", "enableDynamicContext": "動的コンテキスト拡張", - "enableDynamicContext_hint": "AIが文脈不足と判断した場合、追加メッセージを取得して再分析します", - "deniedActions": "除外するアクション", - "deniedActions_hint": "選択したアクションは実行されません" + "enableDynamicContext_hint": "AIが文脈不足と判断した場合、追加メッセージを取得して再分析します(+5CC)", + "deniedActions": "許可しないアクション (denylist)", + "deniedActions_hint": "ここに列挙したアクションは、AI やポリシーが決定しても実行直前に除外されます。空欄なら従来どおりの挙動です。有効なキー: QUARANTINE, TIMEOUT_24H, TIMEOUT_1H, TIMEOUT_30M, TIMEOUT_10M, TIMEOUT_5M, DELETE_MESSAGE, WARN, SEND_TO_REVIEW_QUEUE, ADD_SUSPICION_LEVEL_1, NOTIFY_OWNER, MARK_COHORT_SUSPICION_LV2, UNQUARANTINE" }, "actionKeys": { "QUARANTINE": "隔離", "TIMEOUT_24H": "24h停止", - "TIMEOUT_1H": "1h停止", - "TIMEOUT_30M": "30m停止", - "TIMEOUT_10M": "10m停止", - "TIMEOUT_5M": "5m停止", + "TIMEOUT_1H": "1時間タイムアウト", + "TIMEOUT_30M": "30分間タイムアウト", + "TIMEOUT_10M": "10分間タイムアウト", + "TIMEOUT_5M": "5分間タイムアウト", "DELETE_MESSAGE": "メッセージ削除", "WARN": "警告", "SEND_TO_REVIEW_QUEUE": "レビュー送信", @@ -649,7 +649,7 @@ }, "SummaryReport": { "label": "サマリーレポート", - "desc": "ここまでの判定結果をまとめてログチャンネルにレポートとして送ります" + "desc": "ここまでの判定結果をまとめてログチャンネルにレポートとして送ります (1CC)" }, "HistorySummarizer": { "label": "履歴要約", @@ -661,43 +661,43 @@ }, "AntiRaid": { "label": "アンチレイド", - "desc": "短時間の大量参加・投稿を検知し、レイドかどうかで該当/非該当へ分岐します" + "desc": "短時間の大量参加・投稿を検知し、レイドかどうかで一致/不一致へ分岐します (0CC)" }, "RegexBlock": { "label": "正規表現ブロック", - "desc": "招待リンク・詐欺・カスタムパターンに該当するかを正規表現で判定し、該当/非該当へ分岐します" + "desc": "招待リンク・詐欺・カスタムパターンに該当するかを正規表現で判定し、一致/不一致へ分岐します (0CC)" }, "TextFilter": { "label": "テキストフィルター", - "desc": "メンション数などの機械的な条件に違反するかで、該当/非該当へ分岐します" + "desc": "メンション数などの機械的な条件に違反するかで、一致/不一致へ分岐します (0CC)" }, "ThreatDb": { "label": "脅威DB", - "desc": "既知の脅威データベースと照合し、ヒットするかで該当/非該当へ分岐します" + "desc": "既知の脅威データベースと照合し、ヒットするかで一致/不一致へ分岐します (0CC)" }, "Screen": { "label": "スクリーニング", - "desc": "軽量AIで一次判定し、違反の疑いがあるかで該当/非該当へ分岐します。疑わしいものだけを下流のLLMへ流せます" + "desc": "軽量AIで一次判定し、違反の疑いがあるかで一致/不一致へ分岐します。疑わしいものだけを下流のLLMへ流せます (0CC)" }, "LiteLlm": { "label": "軽量LLM", - "desc": "軽量AI(Gemini)が内容を読み、safe/gray/violation のいずれかの結果に振り分けて分岐します" + "desc": "軽量AI(Gemini)が内容を読み、safe/gray/violation のいずれかの結果に振り分けて分岐します (1CC)" }, "DetailLlm": { "label": "詳細LLM", - "desc": "前科を含めて高精度AI(Gemini)が詳しく判定し、違反と判定したかどうかで分岐します" + "desc": "前科を含めて高精度AI(Gemini)が詳しく判定し、違反かどうかで一致/不一致へ分岐します (3CC)" }, "Confidence": { "label": "確信度分岐", - "desc": "直近のAI判定の確信度をしきい値と比較し、しきい値以上かで該当/非該当へ分岐します" + "desc": "直近のAI判定の確信度をしきい値と比較し、しきい値以上かで一致/不一致へ分岐します (1CC)" }, "ActionPolicy": { "label": "アクションポリシー", - "desc": "ここまでの判定をもとに、実行すべき処罰の方針を決めます" + "desc": "ここまでの判定をもとに、実行すべき処罰の方針を決めて次へ渡します" }, "ExecuteAction": { "label": "アクション実行", - "desc": "アクションポリシーで決まった処罰をまとめて実行します" + "desc": "決定されたアクションをまとめて実行します" }, "MessageDelete": { "label": "メッセージ削除", @@ -705,23 +705,23 @@ }, "Timeout": { "label": "タイムアウト", - "desc": "対象ユーザーを指定期間タイムアウト(発言不可)にします" + "desc": "ユーザーを一定期間タイムアウトします" }, "Kick": { "label": "キック", - "desc": "対象ユーザーをサーバーからキックします" + "desc": "ユーザーをサーバーからキックします" }, "Ban": { "label": "BAN", - "desc": "対象ユーザーをBANします。過去メッセージの削除範囲も指定できます" + "desc": "ユーザーをBANします" }, "Warn": { "label": "警告", - "desc": "対象ユーザーに警告を記録・通知します" + "desc": "ユーザーに警告を送ります" }, "MessageSend": { "label": "メッセージ送信", - "desc": "指定した本文のメッセージをチャンネルに送信します" + "desc": "メッセージを送信します" }, "OnError": { "label": "エラーハンドラー", @@ -755,7 +755,7 @@ "stepLabel": "ステップ {n}", "branchTaken": "分岐: {branch}", "result": "結果: {result}", - "llmCalled": "LLM", + "llmCalled": "自然言語処理モデル", "llmFailed": "AI呼び出し失敗", "llmFailedHint": "AI呼び出しが完了しませんでした(safe判定ではなく、結果を取得できていません)。", "incompleteWarning": "一部のAI判定を実行できませんでした(結果は不完全です)。", @@ -776,7 +776,7 @@ "cost": "{cc}CC", "charged": "課金あり", "free": "無料(課金なし)", - "freeRemaining": "本日の無料枠残り: {cc} CC", + "freeRemaining": "本日の無料実行残り: {count}回", "partialShortfall": "残高不足のため一部の判定をスキップしました" }, "errors": { @@ -905,7 +905,7 @@ "buyCC": "Cubeクレジットを購入", "buyCCPlan": "{name} を購入", "buyPlan": "{plan} プランを購入", - "ccNote": "クレジットは付与(購入)日から1年間有効です", + "ccNote": "クレジットは購入日から180日間有効です", "prepaidNotice": "本クレジットは資金決済法上の前払式支払手段です。有効期限は付与(発行)から1年です。", "prepaidLink": "前払式支払手段に関する表示", "linkToServer": "サーバーに連携", @@ -949,8 +949,8 @@ "月1回のAIチューニングサポート", "優先サポート" ], - "confirmTitle": "ご購入内容の最終確認", - "confirmDesc": "以下の内容をご確認のうえ、購入手続きへお進みください。", + "confirmTitle": "{plan} プランを購入しますか?", + "confirmDesc": "月額 ¥{price} が請求されます。いつでもキャンセルできます。", "confirmPlanLabel": "プラン", "confirmPriceLabel": "金額(税込)", "confirmCycleMonthly": "月額 ¥{price} / 毎月自動更新", @@ -976,7 +976,7 @@ "consentParentalLabel": "保護者から購入の許可を得ています", "consentMinorNotice": "18歳未満の方は、保護者の同意が必要です。", "consentUnderageError": "申し訳ありませんが、13歳未満の方はご購入いただけません。", - "consentDataNote": "入力された生年月日は年齢確認および保護者同意の記録のためにのみ使用され、当チームが保管します。Stripe等の決済代行会社には提供されません。", + "consentDataNote": "入力された生年月日は年齢確認のためにのみ使用され、決済処理のためStripeと共有されます。", "consentContinue": "同意して続ける", "consentSubmitting": "確認中..." }, @@ -1503,7 +1503,7 @@ "addEmbed": "Embedを追加", "addActionRow": "Action Row を追加", "actionRow": { - "rowN": "Action Row {n}", + "rowN": "アクション行{n}", "typeButtons": "ボタン", "typeSelect": "セレクトメニュー", "addButton": "ボタンを追加", @@ -1713,9 +1713,7 @@ "webhookRegenerateTitle": "URLを再生成", "webhookRegenerateConfirm": "Webhook URLを再生成すると、現在のURLは無効になります。続行しますか?", "webhookUrlCopied": "コピーしました", - "webhookUrlDesc": "このURLにPOSTリクエストを送るとワークフローが起動します。JSONボディは '{{webhook.payload.key}}' で参照できます。", - "webhookRegenerateTitle": "URLを再生成", - "webhookRegenerateConfirm": "Webhook URLを再生成すると、現在のURLは無効になります。続行しますか?" + "webhookUrlDesc": "このURLにPOSTリクエストを送るとワークフローが起動します。JSONボディは '{{webhook.payload.key}}' で参照できます。" }, "nodes": { "trigger": "トリガー", @@ -1972,11 +1970,11 @@ "buttonCustomIdHint": "内部識別子(英数字・ハイフン)", "buttonCustomIdPlaceholder": "例: confirm-btn", "buttonModeCustomId": "カスタムID", - "buttonModeLinked": "ワークフロー連携", + "buttonModeLinked": "ワークフローを連携する", "buttonModeContinue": "続けて実行", "buttonModeContinueHint": "このボタンが押されると、同じワークフローの続きが実行されます。'{{button.label}}' と '{{button.index}}' で押されたボタンを判別できます。", - "buttonLinkedWorkflow": "連携するワークフロー", - "buttonLinkedWorkflowHint": "ボタンを押したときに実行されるワークフロー", + "buttonLinkedWorkflow": "ワークフローを連携しました", + "buttonLinkedWorkflowHint": "ボタンがクリックされたときに実行するワークフロー", "buttonLinkedWorkflowPlaceholder": "ワークフローを選択...", "buttonLinkedWorkflowNone": "ワークフローが見つかりませんでした。", "buttonStyle": "スタイル", @@ -2064,7 +2062,7 @@ "duplicateError": "複製に失敗しました" }, "admin": { - "title": "Cube Admin", + "title": "Cube 管理者", "loggedInAs": "ログイン中", "exitAdmin": "ダッシュボードへ戻る", "cancel": "キャンセル", @@ -2128,7 +2126,7 @@ "syncOk": "{synced}件同期しました(エラー: {errors}件)", "syncFail": "同期に失敗しました", "cancelAtEnd": "期間終了時にキャンセル", - "syncUserPlaceholder": "User ID", + "syncUserPlaceholder": "ユーザーID", "confirmSyncUser": "ユーザー {userId} のサブスクリプション情報を同期しますか?" }, "blacklist": { @@ -2258,7 +2256,7 @@ "aiStats": { "title": "AIモデレーション統計", "desc": "AIモデレーションの実利用・CC・推定原価・採算", - "guildIdPlaceholder": "Guild ID(空欄で全体統計)", + "guildIdPlaceholder": "Guild ID を入力", "scopeLabel": "表示範囲", "scopeGlobal": "全体", "scopeGuild": "Guild指定", @@ -2300,7 +2298,7 @@ "detail": "詳細LLM", "confidence": "Confidence", "classify": "Classify", - "noData": "データがありません。Guild ID は任意です。空欄で検索すると全体統計を表示します。", + "noData": "データがありません。表示範囲を選択して検索してください。", "loading": "読み込み中...", "dailyTrend": "日別推移", "nodeBreakdown": "ノード別内訳" @@ -2399,10 +2397,10 @@ "setupBtn": "セットアップ", "requesting": "処理中...", "setupDone": "完了", - "discordRegistered": "Discordと同期済み", - "discordNotRegistered": "Discord未同期", - "discordRegisterBtn": "Discordと同期", - "discordRegistering": "同期中...", + "discordRegistered": "Discord登録済み", + "discordNotRegistered": "Discord未登録", + "discordRegisterBtn": "Discordに登録", + "discordRegistering": "登録中...", "ruleMentionSpam": "メンションスパム", "ruleMentionSpamDesc": "@user / @role / @here / @everyone のメンションをheatとして加算", "ruleInviteLink": "招待リンク", @@ -2413,8 +2411,8 @@ "ruleCharSpamDesc": "同一文字の連続・Zalgoテキストを検知", "ruleUrlScan": "URLスキャン", "ruleUrlScanDesc": "短縮URL展開 → Safe Browsing APIで悪意あるURLを検知", - "ruleImageHash": "スパム画像ブロック", - "ruleImageHashDesc": "Cubeのスパム・NSFW画像データベースと照合し、一致した画像を自動削除します", + "ruleImageHash": "画像ハッシュ", + "ruleImageHashDesc": "既知スパム・NSFW画像の照合(pHash)", "ruleCrossChannel": "クロスチャンネル", "ruleCrossChannelDesc": "短時間に複数チャンネルへの類似投稿を検知", "rulePhishing": "フィッシング", @@ -2486,8 +2484,8 @@ "scheduleScheduleType": "スケジュール種別", "scheduleTimeRange": "毎日繰り返し(時間帯)", "scheduleDateRange": "一回限り(期間指定)", - "scheduleStartTime": "開始時刻 (JST)", - "scheduleEndTime": "終了時刻 (JST)", + "scheduleStartTime": "開始時刻 (UTC)", + "scheduleEndTime": "終了時刻 (UTC)", "scheduleStartDate": "開始日時", "scheduleEndDate": "終了日時", "scheduleSecurityLevel": "認証レベル", @@ -2525,7 +2523,6 @@ "scheduleLevelMediumDesc": "Discord登録から5分以上経過したアカウントのみ", "scheduleLevelHighDesc": "サーバー参加から10分以上経過したアカウントのみ", "scheduleLevelVeryHighDesc": "電話番号認証済みのアカウントのみ", - "unknownUser": "不明", "tierRoutingSection": "重要度別ログルーティング", "tierRoutingDesc": "重要度ティアに応じてモデレーションログの送信先チャンネルとメンションロールを振り分けます", "tierRoutingFallbackNote": "チャンネル未設定のティアは、上のデフォルトログチャンネルにフォールバックします。", From 78aaa79755acbb02ec1de3ed8d0a3b55f93cbdad Mon Sep 17 00:00:00 2001 From: Cube Team Date: Wed, 8 Jul 2026 01:28:58 +0900 Subject: [PATCH 03/13] Update source file web.json [ci skip] --- en/web.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/en/web.json b/en/web.json index 0a617ee..6e1f9a6 100644 --- a/en/web.json +++ b/en/web.json @@ -2646,4 +2646,4 @@ "page": "Page {page} of {total}" } } -} \ No newline at end of file +} From f2d28698e5b2cc6f0829191edb2a9d0093f69c00 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Wed, 8 Jul 2026 21:38:34 +0900 Subject: [PATCH 04/13] Update source file web.json [ci skip] --- en/web.json | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/en/web.json b/en/web.json index 6e1f9a6..7b10cf1 100644 --- a/en/web.json +++ b/en/web.json @@ -2240,7 +2240,19 @@ "consumed": "Consumed", "loadError": "Failed to load data", "noData": "No data", - "retry": "Retry" + "retry": "Retry", + "utilizationTitle": "CC Utilization by Plan", + "utilizationNote": "Annual-billed subscriptions only. Monthly-billed grants cannot be reliably attributed to a subscription plan.", + "utilizationPlan": "Plan", + "utilizationGuildCount": "Guilds", + "utilizationAvg": "Avg", + "utilizationP50": "P50", + "utilizationP90": "P90", + "utilizationHighCount": "Over 90% Guilds", + "highUtilizationTitle": "High Utilization Guilds (Annual, Latest Period)", + "highUtilizationGuildId": "Guild ID", + "highUtilizationMonth": "Month", + "highUtilizationRate": "Utilization" }, "users": { "title": "User Lookup", @@ -2285,6 +2297,9 @@ "providerCost": "Estimated Provider Cost", "grossProfit": "Estimated Gross Profit", "grossMargin": "Gross Margin", + "grossProfitLite": "Estimated Gross Profit (Lite basis)", + "grossMarginLite": "Gross Margin (Lite basis)", + "referenceRateNote": "Reference figures only. Revenue is estimated from paid CC at two flat unit-price baselines (¥0.0667/CC = Basic/Pro effective rate, ¥0.0769/CC = Lite effective rate); actual per-plan revenue allocation is out of scope.", "avgTokens": "Avg Tokens/Call", "summaryNote": "Average tokens/message: {avgTokens}. Estimated revenue from paid CC only: {revenue}.", "unmeasured": "Unmeasured", From bba57fcab966ca1d2e079edba97357351f57373c Mon Sep 17 00:00:00 2001 From: Cube Team Date: Wed, 8 Jul 2026 21:38:42 +0900 Subject: [PATCH 05/13] New translations web.json (Japanese) [ci skip] --- ja/web.json | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ja/web.json b/ja/web.json index 1013ef0..6f29c13 100644 --- a/ja/web.json +++ b/ja/web.json @@ -2240,7 +2240,19 @@ "consumed": "消費", "loadError": "データの取得に失敗しました", "noData": "データがありません", - "retry": "再試行" + "retry": "再試行", + "utilizationTitle": "プラン別 CC 消化率", + "utilizationNote": "年払いサブスクのみ対象です。月払いの付与は購入と区別できないため集計対象外です。", + "utilizationPlan": "プラン", + "utilizationGuildCount": "ギルド数", + "utilizationAvg": "平均", + "utilizationP50": "P50", + "utilizationP90": "P90", + "utilizationHighCount": "90%超のギルド数", + "highUtilizationTitle": "消化率が高いギルド(年払い・直近期)", + "highUtilizationGuildId": "ギルドID", + "highUtilizationMonth": "付与月", + "highUtilizationRate": "消化率" }, "users": { "title": "ユーザー検索", @@ -2285,6 +2297,9 @@ "providerCost": "推定プロバイダ原価", "grossProfit": "推定粗利", "grossMargin": "粗利率", + "grossProfitLite": "推定粗利(Lite基準)", + "grossMarginLite": "粗利率(Lite基準)", + "referenceRateNote": "参考表示です。収益は有償CCに2つの参考単価(¥0.0667/CC = Basic/Pro実効単価、¥0.0769/CC = Lite実効単価)を掛けた概算値であり、プラン別の正確な収益按分はスコープ外です。", "avgTokens": "平均トークン/回", "summaryNote": "平均トークン/メッセージ: {avgTokens}。推定売上は有償CCのみから算出: {revenue}。", "unmeasured": "未計測", @@ -2646,4 +2661,4 @@ "page": "ページ {page} / {total}" } } -} \ No newline at end of file +} From 43aec7430a1730b15617190813d15ec8b33eac9e Mon Sep 17 00:00:00 2001 From: Cube Team Date: Thu, 9 Jul 2026 12:50:20 +0900 Subject: [PATCH 06/13] Update source file bot.json [ci skip] --- en/bot.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/en/bot.json b/en/bot.json index c786e54..fe040c9 100644 --- a/en/bot.json +++ b/en/bot.json @@ -1243,6 +1243,37 @@ "v2_reason": "**📝 Reason:** {reason}", "v2_categories": "**🏷️ Categories:** {categories}" }, + "attribution": { + "footer": "-# 🧊 Protected by cube — https://cubeteam.app" + }, + "ai_digest": { + "title": "🧊 **Weekly Moderation Report** ・{range}", + "messages_monitored": "## {count} messages monitored", + "summary_line": "🚨 Detected {detected} ・ 🔨 Actions {actions} ・ 👀 Review {review}", + "category_heading": "Category Breakdown", + "category_row": "{label} {bar} {count}", + "cc_paid": "💳 CC used {consumed} ・ remaining {remaining}", + "cc_free": "💳 {percent}% of monthly free quota used", + "dashboard_button": "📊 View details on dashboard" + }, + "antiraid_summary": { + "title": "Raid Lockdown Report", + "blocked_count": "### Blocked {count} accounts", + "duration_line": "⏱️ Detection to convergence: **{duration}**", + "action_breakdown": "🔨 {breakdown}", + "reasons_line": "🧠 Detection basis: {reasons}", + "timeline": { + "detected": "`{time}` 🔍 Suspicious joins detected", + "lockdown": "`{time}` 🔒 Lockdown activated", + "tally": "`{time}` 🔨 Actions tallied", + "converged": "`{time}` ✅ Converged" + }, + "reasons": { + "account_age": "Recently created account", + "no_avatar": "No avatar set", + "join_rate": "High-volume join burst" + } + }, "appeal_modal": { "title": "Submit Appeal", "reason_label": "Reason for Appeal", From c0cc65f8f1c69ee57e1fddcf263f22c3d4632718 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Thu, 9 Jul 2026 12:50:22 +0900 Subject: [PATCH 07/13] Update source file web.json [ci skip] --- en/web.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/en/web.json b/en/web.json index 7b10cf1..2b95a7d 100644 --- a/en/web.json +++ b/en/web.json @@ -388,6 +388,8 @@ "advancedViolationStorageDesc": "AI classifies and stores violation reasons in detail. Useful for richer moderation logs, but consumes 2 CC per violation", "modLogCompactLabel": "Compact Log", "modLogCompactDesc": "Show moderator logs as a concise one-line entry. When off (default), logs are shown in detail with thumbnails and confidence gauges", + "aiDigestEnabledLabel": "Weekly Digest", + "aiDigestEnabledDesc": "Automatically post a summary of last week's moderation activity to the mod log every Monday", "nodeEditorLinkLabel": "Node Editor", "nodeEditorLinkDesc": "Visually build and edit the moderation pipeline with nodes", "nodeEditorLockedTooltip": "The node editor is available on a higher plan (NODE_EDITOR)", @@ -776,7 +778,7 @@ "cost": "{cc}CC", "charged": "Charged", "free": "Free (no charge)", - "freeRemaining": "Free CC left today: {cc}", + "freeRemaining": "Free CC left this month: {cc}", "partialShortfall": "Some checks were skipped due to insufficient credits" }, "errors": { @@ -1085,6 +1087,12 @@ "title": "Subscription", "desc": "Expand your server's features with a monthly plan" }, + "sizeGuide": { + "lite": "Ideal for servers with up to ~200 messages/day", + "basic": "Ideal for servers with up to ~500 messages/day", + "pro": "Ideal for servers with up to ~1,000 messages/day", + "note": "These are rough estimates for a typical server. Actual usage varies with how active your server is, the volume of images, and your rule settings." + }, "cc": { "title": "Cube Credit", "desc": "One-time credits you can buy as needed" From b632c04e9c014d705e9b99cc0ded97941862026a Mon Sep 17 00:00:00 2001 From: Cube Team Date: Thu, 9 Jul 2026 12:50:39 +0900 Subject: [PATCH 08/13] New translations bot.json (Japanese) [ci skip] --- ja/bot.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/ja/bot.json b/ja/bot.json index 2522059..b78fa77 100644 --- a/ja/bot.json +++ b/ja/bot.json @@ -1243,6 +1243,37 @@ "v2_reason": "**📝 理由:** {reason}", "v2_categories": "**🏷️ カテゴリ:** {categories}" }, + "attribution": { + "footer": "-# 🧊 Protected by cube — https://cubeteam.app" + }, + "ai_digest": { + "title": "🧊 **今週のモデレーションレポート** ・{range}", + "messages_monitored": "## {count} メッセージを監視", + "summary_line": "🚨 検知 {detected} ・ 🔨 処罰 {actions} ・ 👀 レビュー {review}", + "category_heading": "カテゴリ内訳", + "category_row": "{label} {bar} {count}", + "cc_paid": "💳 CC 消費 {consumed} ・ 残 {remaining}", + "cc_free": "💳 今月の無料枠 {percent}% 消化", + "dashboard_button": "📊 詳細をダッシュボードで" + }, + "antiraid_summary": { + "title": "レイド鎮圧レポート", + "blocked_count": "### {count}アカウントをブロック", + "duration_line": "⏱️ 検知から収束まで **{duration}**", + "action_breakdown": "🔨 {breakdown}", + "reasons_line": "🧠 検知根拠: {reasons}", + "timeline": { + "detected": "`{time}` 🔍 異常な参加を検知", + "lockdown": "`{time}` 🔒 ロックダウン発動", + "tally": "`{time}` 🔨 処罰を集計", + "converged": "`{time}` ✅ 収束" + }, + "reasons": { + "account_age": "アカウント作成日が新しい", + "no_avatar": "アバター未設定", + "join_rate": "短時間の大量参加" + } + }, "appeal_modal": { "title": "異議申し立て", "reason_label": "申し立ての理由", From 76ea04171ea043d2c575d5ec833b917963f81927 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Thu, 9 Jul 2026 12:50:40 +0900 Subject: [PATCH 09/13] New translations web.json (Japanese) [ci skip] --- ja/web.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/ja/web.json b/ja/web.json index 6f29c13..2e1e25f 100644 --- a/ja/web.json +++ b/ja/web.json @@ -388,6 +388,8 @@ "advancedViolationStorageDesc": "AI が違反理由を分類して保存します。モデレーションログの詳細化に役立ちますが、1CC/件 のクレジットを消費します", "modLogCompactLabel": "コンパクトなログ", "modLogCompactDesc": "モデレーターログを簡潔な1行表示にします。オフ(既定)では、サムネイルや信頼度ゲージを含む詳細表示になります", + "aiDigestEnabledLabel": "週次ダイジェスト", + "aiDigestEnabledDesc": "毎週月曜に先週のモデレーション実績を mod-log へ自動配信します", "nodeEditorLinkLabel": "ノードエディター", "nodeEditorLinkDesc": "パイプラインをノードで視覚的に構築・編集します", "nodeEditorLockedTooltip": "ノードエディターは上位プラン (NODE_EDITOR) で利用できます", @@ -776,7 +778,7 @@ "cost": "{cc}CC", "charged": "課金あり", "free": "無料(課金なし)", - "freeRemaining": "本日の無料実行残り: {count}回", + "freeRemaining": "今月の無料枠残り: {cc} CC", "partialShortfall": "残高不足のため一部の判定をスキップしました" }, "errors": { @@ -1085,6 +1087,12 @@ "title": "サブスクリプション", "desc": "月額プランでサーバーの機能を拡張" }, + "sizeGuide": { + "lite": "目安: 〜200メッセージ/日のサーバー", + "basic": "目安: 〜500メッセージ/日のサーバー", + "pro": "目安: 〜1,000メッセージ/日のサーバー", + "note": "目安は平均的なサーバーの場合です。実際の消費はサーバーの活発さ・画像の量・ルール設定により変動します。" + }, "cc": { "title": "Cubeクレジット", "desc": "必要な分だけ購入できる一回払いのクレジット" From ba9241a416e663370997217aa07b047e491a9490 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Tue, 14 Jul 2026 22:47:14 +0900 Subject: [PATCH 10/13] Update source file web.json [ci skip] --- en/web.json | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/en/web.json b/en/web.json index 2b95a7d..78ad477 100644 --- a/en/web.json +++ b/en/web.json @@ -521,6 +521,8 @@ }, "aimodEditor": { "title": "Node Editor", + "loadError": "Failed to load the current pipeline. Editing is locked to protect the saved configuration.", + "retry": "Retry", "back": "Back", "save": "Save", "saving": "Saving...", @@ -2135,7 +2137,8 @@ "syncFail": "Sync failed", "cancelAtEnd": "cancels at period end", "syncUserPlaceholder": "User ID", - "confirmSyncUser": "Sync subscription info for user {userId}?" + "confirmSyncUser": "Sync subscription info for user {userId}?", + "openRefundConsole": "Refund Console" }, "blacklist": { "title": "Blacklist", @@ -2224,6 +2227,56 @@ "grantAllOk": "Bulk grant executed", "grantAllFail": "Failed to execute bulk grant" }, + "refund": { + "title": "Stripe Refund & CC Clawback", + "loadConfig": "Load settings", + "proratedEnabled": "Allow prorated refunds as an exception", + "deductPlatformFee": "Deduct actual platform fee for customer exceptions", + "policyWindowDays": "Policy window (days)", + "fixedFeeJpy": "Customer fixed fee (JPY)", + "saveConfig": "Save settings", + "configSaved": "Refund settings saved", + "configSaveFail": "Failed to save refund settings", + "configReason": "Reason for configuration change (audited)", + "confirmConfigChange": "Change refund settings?\nBefore: {before}\nAfter: {after}\nThe reason and both values will be audited.", + "configLoadFail": "Failed to load refund settings", + "ccPurchase": "CC Purchase (Checkout Session)", + "subscriptionInvoice": "Subscription (Invoice)", + "targetId": "Stripe Session / Invoice ID", + "full": "Full refund", + "prorated": "Prorated refund", + "reasonDuplicate": "Duplicate charge", + "reasonTeamFault": "Team fault", + "reasonUnavailable": "Permanent unavailability", + "reasonCustomer": "Customer exception", + "overrideReason": "Reason for policy override (saved to audit log)", + "preview": "Preview refund", + "previewFail": "Could not calculate refund", + "previewAmount": "Refund: {amount} {currency}", + "previewCc": "CC clawback: {clawback} / consumed shortfall: {shortfall}", + "confirmExecute": "Issue this Stripe refund and claw back the associated CC?", + "execute": "Execute refund", + "executeOk": "Refund started ({id}) — {status}", + "executeFail": "Failed to execute refund", + "history": "Refund operations", + "refresh": "Refresh", + "reconcile": "Reconcile with Stripe", + "confirmReconcile": "Reconcile this operation with Stripe? No new refund will be created.", + "reconcileFail": "Failed to reconcile with Stripe", + "historyLoading": "Loading refund history...", + "historyRetry": "Retry refund history", + "historyEmpty": "No refund operations", + "historyUnknown": "Unknown", + "historyError": "Error: {error}", + "statusPreparing": "Preparing", + "statusSubmitting": "Submitting to Stripe", + "statusPending": "Pending", + "statusPendingUnknown": "Submission result unknown", + "statusUnknown": "Reconciliation pending", + "statusRequiresAction": "Manual action required", + "statusSucceeded": "Succeeded", + "statusFailed": "Failed" + }, "economyStats": { "title": "CC Stats & Payment Services Act Monitoring", "desc": "Shows total issued credits and their trend, plus the status against the Payment Services Act threshold (¥10,000,000 unused balance).", @@ -2619,6 +2672,8 @@ }, "analytics": { "title": "Moderation Analytics", + "loadError": "Some analytics data could not be loaded. Available results are still shown.", + "retry": "Retry", "rangePicker": { "7d": "Last 7 days", "30d": "Last 30 days" @@ -2659,6 +2714,8 @@ }, "userViolations": { "title": "Violation Log", + "loadError": "Failed to load violation logs.", + "retry": "Retry", "back": "Back", "ruleType": "Rule", "reason": "Reason", From 678ff7ede1eb0bc43a712bfc8907f5b97a03fb21 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Tue, 14 Jul 2026 22:47:31 +0900 Subject: [PATCH 11/13] New translations web.json (Japanese) [ci skip] --- ja/web.json | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/ja/web.json b/ja/web.json index 2e1e25f..c2af240 100644 --- a/ja/web.json +++ b/ja/web.json @@ -521,6 +521,8 @@ }, "aimodEditor": { "title": "ノードエディター", + "loadError": "現在のパイプラインを取得できませんでした。保存済みの設定を保護するため編集をロックしています。", + "retry": "再試行", "back": "戻る", "save": "保存", "saving": "保存中...", @@ -2135,7 +2137,8 @@ "syncFail": "同期に失敗しました", "cancelAtEnd": "期間終了時にキャンセル", "syncUserPlaceholder": "ユーザーID", - "confirmSyncUser": "ユーザー {userId} のサブスクリプション情報を同期しますか?" + "confirmSyncUser": "ユーザー {userId} のサブスクリプション情報を同期しますか?", + "openRefundConsole": "返金コンソール" }, "blacklist": { "title": "ブラックリスト", @@ -2224,6 +2227,56 @@ "grantAllOk": "一括付与を実行しました", "grantAllFail": "一括付与に失敗しました" }, + "refund": { + "title": "Stripe返金・CC剥奪", + "loadConfig": "設定を読み込む", + "proratedEnabled": "日割り返金を例外的に許可", + "deductPlatformFee": "ユーザー都合では実プラットフォーム手数料を控除", + "policyWindowDays": "申請期限(日)", + "fixedFeeJpy": "ユーザー都合の固定手数料(円)", + "saveConfig": "設定を保存", + "configSaved": "返金設定を保存しました", + "configSaveFail": "返金設定の保存に失敗しました", + "configReason": "設定変更理由(監査ログに保存)", + "confirmConfigChange": "返金設定を変更しますか?\n変更前: {before}\n変更後: {after}\n変更理由と両方の値が監査ログに保存されます。", + "configLoadFail": "返金設定の取得に失敗しました", + "ccPurchase": "CC購入(Checkout Session)", + "subscriptionInvoice": "サブスクリプション(Invoice)", + "targetId": "Stripe Session / Invoice ID", + "full": "完全返金", + "prorated": "日割り返金", + "reasonDuplicate": "重複決済", + "reasonTeamFault": "当チームの過失", + "reasonUnavailable": "恒久的な提供不能", + "reasonCustomer": "ユーザー都合の管理者例外", + "overrideReason": "ポリシー外対応の理由(監査ログに保存)", + "preview": "返金内容を確認", + "previewFail": "返金内容を計算できませんでした", + "previewAmount": "返金額: {amount} {currency}", + "previewCc": "CC剥奪: {clawback} / 消費済み不足: {shortfall}", + "confirmExecute": "表示された金額をStripeへ返金し、対象CCを剥奪しますか?", + "execute": "返金を実行", + "executeOk": "返金処理を開始しました({id})— {status}", + "executeFail": "返金の実行に失敗しました", + "history": "返金処理履歴", + "refresh": "更新", + "reconcile": "Stripeと再照合", + "confirmReconcile": "Stripeの状態を再照合しますか?新しい返金は作成されません。", + "reconcileFail": "Stripeとの再照合に失敗しました", + "historyLoading": "返金履歴を読み込み中...", + "historyRetry": "返金履歴を再読み込み", + "historyEmpty": "返金処理履歴はありません", + "historyUnknown": "不明", + "historyError": "エラー: {error}", + "statusPreparing": "準備中", + "statusSubmitting": "Stripeへ送信中", + "statusPending": "処理待ち", + "statusPendingUnknown": "送信結果不明", + "statusUnknown": "再照合待ち", + "statusRequiresAction": "手動対応が必要", + "statusSucceeded": "完了", + "statusFailed": "失敗" + }, "economyStats": { "title": "CC 統計・資金決済法モニタリング", "desc": "発行済みクレジットの合計・推移と、資金決済法の基準額(未使用残高1,000万円)に対する状況を表示します。", @@ -2619,6 +2672,8 @@ }, "analytics": { "title": "モデレーション アナリティクス", + "loadError": "一部の分析データを取得できませんでした。取得できたデータは引き続き表示しています。", + "retry": "再試行", "rangePicker": { "7d": "過去7日", "30d": "過去30日" @@ -2659,6 +2714,8 @@ }, "userViolations": { "title": "違反ログ", + "loadError": "違反ログの取得に失敗しました。", + "retry": "再試行", "back": "戻る", "ruleType": "ルール", "reason": "理由", From 3b1e5200df367d5c87b85ea8a81b02a430085023 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Sat, 18 Jul 2026 20:36:16 +0900 Subject: [PATCH 12/13] Update source file bot.json [ci skip] --- en/bot.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/en/bot.json b/en/bot.json index fe040c9..940ea2f 100644 --- a/en/bot.json +++ b/en/bot.json @@ -1152,6 +1152,9 @@ "body": "**Target:** <@{userId}> ({userTag})\n**Reason:** {reason}\n\nAutomatic detection confidence was low. Please review this case manually." }, "ai_lane": { + "support_crisis": { + "notice": "This is not a warning or punishment. If you are in crisis, please do not face it alone—reach out to someone you trust or a local crisis service. If you are in immediate danger, contact your local emergency services now." + }, "review": { "title": "🤖 AI Moderation — Review Required", "author": "**Target:** <@{userId}>\n`{userTag}`", From 87b2b0332da7f47d4004186a74f0f67bbe2c83b3 Mon Sep 17 00:00:00 2001 From: Cube Team Date: Sat, 18 Jul 2026 20:36:23 +0900 Subject: [PATCH 13/13] New translations bot.json (Japanese) [ci skip] --- ja/bot.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ja/bot.json b/ja/bot.json index b78fa77..a7ed6eb 100644 --- a/ja/bot.json +++ b/ja/bot.json @@ -1152,6 +1152,9 @@ "body": "**対象:** <@{userId}> ({userTag})\n**理由:** {reason}\n\n自動判定の信頼度が低いため、モデレーターによる手動確認が必要です。" }, "ai_lane": { + "support_crisis": { + "notice": "あなたを責めたり、罰したりするための通知ではありません。今とてもつらい状況なら、ひとりで抱え込まず、信頼できる人や地域の相談窓口に話してください。今すぐ危険がある場合は、地域の緊急通報先へ連絡してください。" + }, "review": { "title": "🤖 AIモデレーション 要確認", "author": "**対象:** <@{userId}> ({userTag})",