精简版第四轮补裁(P4): 页面层摘除 + Xray更新端点下线 + 本机核心监管下线
CI / go-test (push) Canceled after 0s
CI / postgres-durable-first (push) Canceled after 0s
CI / codegen (push) Canceled after 0s
CI / govulncheck (push) Canceled after 0s
CI / race (push) Canceled after 0s
CI / fuzz-smoke (push) Canceled after 0s
CI / golangci (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
CodeQL Advanced / Analyze (go) (push) Canceled after 0s
CodeQL Advanced / Analyze (actions) (push) Canceled after 0s
CodeQL Advanced / Analyze (javascript-typescript) (push) Canceled after 0s
Release 3X-UI / build (386) (push) Canceled after 0s
Release 3X-UI / build (amd64) (push) Canceled after 0s
Release 3X-UI / build (arm64) (push) Canceled after 0s
Release 3X-UI / build (armv5) (push) Canceled after 0s
Release 3X-UI / build (armv6) (push) Canceled after 0s
Release 3X-UI / build (armv7) (push) Canceled after 0s
Release 3X-UI / build (s390x) (push) Canceled after 0s
Release 3X-UI / Build for Windows (amd64) (push) Canceled after 0s
Release 3X-UI / Publish rolling dev release (push) Canceled after 0s

页面层(用户真机截图发现前两轮漏裁):
- 设置: 摘除 Telegram机器人/邮件菜单与页面, 及页内残留入口(通知页/外部流量/LDAP/2FA设置页)
- Xray配置: 摘除负载均衡/DNS/高级配置菜单与页面; 基础配置(出站+路由)完好
- 总览: 摘除 Xray更新弹窗(VersionModal+GeodataSection)全部入口, 版本号改为静态展示
- 13个locale同步摘除461个已删功能专属翻译键(逐键核查前后端引用为零; i18n-dead-keys测试全绿)

Xray更新后端(经调查确认仅服务本机bin/xray, 与agent下发/订阅无关):
- 删除 getXrayVersion/installXray/updateGeofile 路由与handler(访问返回404)
- 删除 ServerService 对应实现与校验和函数; 同步api-docs/monitor白名单/openapi

本机核心监管下线(设计: 主控永不运行本机xray, 入站全在agent):
- XrayService.RestartXray 降级为no-op(一次性Warning说明日志); StopXray无进程时幂等返回
- web.go 摘除启动拉起本机核心/CheckXrayRunning看门狗(1s)/ApplyPendingRestart cron(30s)/XrayTrafficJob/CheckClientIpJob 注册
- ApplyPendingRestart 降级为消费即清, 其测试更新为新语义
- XrayMetricsService.Sample 短路: 不再每2s探本机/debug/vars, 状态优雅置为不可用
- 配置生成(纯JSON)/agent链路/订阅/入站CRUD未动; 状态读数优雅归零(stop/Unknown)

注: TestGetXrayConfig_EnabledClientsStillEmitted 在基线945b3a5同样失败(既有问题, 非本轮引入)
This commit is contained in:
Muse
2026-10-20 23:39:38 +08:00
parent 945b3a56a2
commit a654a96c38
56 changed files with 149 additions and 11458 deletions
+4 -466
View File
@@ -67,16 +67,12 @@
"success": "成功",
"lastOnline": "最終オンライン",
"lastSubFetch": "最終サブスクリプション取得",
"getVersion": "バージョン取得",
"install": "インストール",
"clients": "クライアント",
"usage": "利用状況",
"twoFactorCode": "コード",
"remained": "残り",
"security": "セキュリティ",
"emptyDnsDesc": "追加されたDNSサーバーはありません。",
"emptyFakeDnsDesc": "追加されたFake DNSサーバーはありません。",
"emptyBalancersDesc": "追加されたバランサーはありません。",
"somethingWentWrong": "エラーが発生しました",
"subscription": {
"title": "サブスクリプション情報",
@@ -86,7 +82,6 @@
"uploaded": "アップロード",
"expiry": "有効期限",
"totalQuota": "合計クォータ",
"individualLinks": "個別リンク",
"active": "有効",
"inactive": "無効",
"unlimited": "無制限",
@@ -136,9 +131,6 @@
"xrayStatus": "Xray",
"stopXray": "停止",
"restartXray": "再起動",
"xraySwitch": "バージョン",
"xrayUpdates": "Xrayの更新",
"xraySwitchClickDesk": "慎重に選択してください。古いバージョンは現在の設定と互換性がない可能性があります。",
"updatePanel": "パネルを更新",
"panelUpdateDesc": "これにより3X-UIが最新リリースに更新され、パネルサービスが再起動されます。",
"currentPanelVersion": "現在のパネルバージョン",
@@ -200,9 +192,6 @@
"download": "ダウンロード",
"sent": "送信",
"received": "受信",
"xraySwitchVersionDialog": "Xrayのバージョンを本当に変更しますか?",
"xraySwitchVersionDialogDesc": "Xrayのバージョンが#version#に変更されます。",
"xraySwitchVersionPopover": "Xrayの更新が成功しました",
"panelUpdateDialog": "本当にパネルを更新しますか?",
"panelUpdateDialogDesc": "これにより3X-UIが#version#に更新され、パネルサービスが再起動されます。",
"panelUpdateStartedPopover": "パネルの更新を開始しました",
@@ -210,24 +199,6 @@
"panelUpdateFailedDesc": "更新が正常に完了しませんでした。サーバーのログを確認するか、コマンドラインで「x-ui update」を実行してください。",
"panelUpdateUnknownTitle": "更新が完了したか確認できませんでした",
"panelUpdateUnknownDesc": "パネルから時間内に結果が報告されませんでした。再読み込みして現在のバージョンを確認するか、サーバーのログを確認してください。",
"geofileUpdateDialog": "ジオファイルを本当に更新しますか?",
"geofileUpdateDialogDesc": "これにより#filename#ファイルが更新されます。",
"geofilesUpdateDialogDesc": "これにより、すべてのファイルが更新されます。",
"geofilesUpdateAll": "すべて更新",
"geofileUpdatePopover": "ジオファイルの更新が成功しました",
"geodataTitle": "Geodata 自動更新",
"geodataHint": "Xray はスケジュールに従ってこれらのファイルをダウンロードし、再起動なしでホットリロードします。URL は HTTPS が必須です。各ファイルは事前に bin フォルダーに存在している必要があります。",
"geodataCron": "スケジュール (cron)",
"geodataOutbound": "アウトバウンド経由でダウンロード(任意)",
"geodataFile": "ファイル名",
"geodataAddFile": "ファイルを追加",
"geodataSaveRestart": "保存して Xray を再起動",
"geodataConfirmTitle": "geodata 設定を保存しますか?",
"geodataConfirmContent": "Xray 設定テンプレートを更新し、Xray を再起動します。",
"geodataInvalidUrl": "各ファイルには HTTPS URL が必要です。",
"geodataInvalidFile": "ファイル名はパスを含まない単純な名前にしてください(例: geosite_custom.dat)。",
"geodataInvalidCron": "Cron は 5 フィールド必要です(例: 0 4 * * *)",
"geodataEmpty": "ファイルが設定されていません。ルーティングルールでは ext:geosite_custom.dat:category の形式で参照します。",
"dontRefresh": "インストール中、このページをリロードしないでください",
"logs": "ログ",
"accessLogs": "アクセスログ",
@@ -1082,7 +1053,6 @@
"warnDefaultBasePath": "デフォルトのベースパス \"/\" はよく知られています — ランダムなパスに変更してください。",
"warnDefaultSubPath": "デフォルトのサブスクリプションパス \"/sub/\" はよく知られています — 変更してください。",
"warnDefaultJsonPath": "デフォルトの JSON サブスクリプションパス \"/json/\" はよく知られています — 変更してください。",
"TGBotSettings": "Telegram Bot",
"panelListeningIP": "パネル監視IP",
"panelListeningIPDesc": "デフォルトではすべてのIPを監視する",
"panelListeningDomain": "パネル監視ドメイン",
@@ -1107,43 +1077,12 @@
"currentPassword": "旧パスワード",
"newUsername": "新しいユーザー名",
"newPassword": "新しいパスワード",
"telegramBotEnable": "Telegramボットを有効にする",
"telegramBotEnableDesc": "Telegramボット機能を有効にする",
"telegramToken": "Telegram トークン",
"telegramTokenDesc": "'{'@'}BotFather'から取得したTelegramボットトークン",
"telegramProxy": "SOCKS プロキシ",
"telegramProxyDesc": "SOCKS5プロキシを有効にしてTelegramに接続する(ガイドに従って設定を調整)",
"telegramAPIServer": "Telegram API サーバー",
"telegramAPIServerDesc": "使用するTelegram APIサーバー。空白の場合はデフォルトサーバーを使用する",
"telegramChatId": "管理者チャットID",
"telegramChatIdDesc": "Telegram管理者チャットID(複数の場合はカンマで区切る){'@'}userinfobotで取得するか、ボットで'/id'コマンドを使用して取得する",
"telegramNotifyTime": "通知時間",
"telegramNotifyTimeDesc": "Telegram ボットが定期レポートを送信する頻度です。プリセットの間隔を選ぶか、「カスタム」を選んで crontab 式を入力します。",
"notifyTime": {
"every": "@every — 一定間隔で繰り返す",
"hourly": "@hourly — 1時間ごと",
"daily": "@daily — 毎日 00:00",
"weekly": "@weekly — 毎週",
"monthly": "@monthly — 毎月",
"custom": "カスタム (crontab)",
"seconds": "秒",
"minutes": "分",
"hours": "時間",
"interval": "間隔",
"unit": "単位"
},
"tgNotifyBackup": "データベースバックアップ",
"tgNotifyBackupDesc": "レポート付きのデータベースバックアップファイルを送信",
"tgNotifyLogin": "ログイン通知",
"tgNotifyLoginDesc": "誰かがパネルにログインしようとしたときに、ユーザー名、IPアドレス、時間を表示する",
"sessionMaxAge": "セッション期間",
"sessionMaxAgeDesc": "ログイン状態を保持する期間(単位:分)",
"expireTimeDiff": "有効期限通知のしきい値",
"expireTimeDiffDesc": "このしきい値に達した場合、有効期限に関する通知を受け取る(単位:日)",
"trafficDiff": "トラフィック消耗しきい値",
"trafficDiffDesc": "このしきい値に達した場合、トラフィック消耗に関する通知を受け取る(単位:GB)",
"tgNotifyCpu": "CPU負荷通知しきい値",
"tgNotifyCpuDesc": "CPU負荷がこのしきい値を超えた場合、通知を受け取る(単位:%)",
"timeZone": "タイムゾーン",
"timeZoneDesc": "定時タスクはこのタイムゾーンの時間に従って実行される",
"subSettings": "サブスクリプション設定",
@@ -1208,10 +1147,6 @@
"subEncryptDesc": "サブスクリプションサービスが返す内容をBase64エンコードする",
"subURI": "リバースプロキシURI",
"subURIDesc": "サブスクリプションリンクとQRコードに使われる完全なベースURL(scheme://domain[:port]/path/)で、監視ドメイン/監視ポートの代わりに使用されます。サブスクリプションがリバースプロキシ経由、または上記と異なるドメイン/ポートでアクセスされる場合に設定してください。",
"externalTrafficInformEnable": "外部トラフィック情報",
"externalTrafficInformEnableDesc": "トラフィック更新ごとに外部 API に通知。",
"externalTrafficInformURI": "外部トラフィック通知 URI",
"externalTrafficInformURIDesc": "トラフィックの更新ごとに外部 API に通知します。",
"restartXrayOnClientDisable": "自動無効化後に Xray を再起動",
"restartXrayOnClientDisableDesc": "有効期限切れまたはトラフィック上限でクライアントが自動的に無効化されたとき、Xray を再起動します。",
"fragment": "フラグメント",
@@ -1221,38 +1156,6 @@
"noisesSett": "Noises設定",
"trustedProxyCidrs": "信頼できるプロキシ CIDR",
"trustedProxyCidrsDesc": "転送される host、proto、クライアント IP ヘッダーを設定可能な IP/CIDR (カンマ区切り)。",
"ldap": {
"enable": "LDAP 同期を有効化",
"host": "LDAP host",
"port": "LDAP ポート",
"useTls": "TLS (LDAPS) を使用",
"skipTlsVerify": "TLS 証明書の検証をスキップ",
"skipTlsVerifyDesc": "安全ではありません — サーバー証明書の検証を無効化します。内部/信頼できない CA でのみ使用してください。",
"bindDn": "Bind DN",
"passwordConfigured": "設定済み;現在のパスワードを保持するには空のままにします。",
"passwordUnconfigured": "未設定。",
"passwordPlaceholder": "設定済み — 置き換えるには新しい値を入力",
"baseDn": "Base DN",
"userFilter": "ユーザーフィルター",
"userAttr": "ユーザー属性 (username/email)",
"vlessField": "VLESS flag 属性",
"flagField": "汎用 flag 属性 (任意)",
"flagFieldDesc": "設定すると VLESS flag を上書きします — 例: shadowInactive。",
"truthyValues": "Truthy 値",
"truthyValuesDesc": "カンマ区切り;デフォルト: true,1,yes,on",
"invertFlag": "flag を反転",
"invertFlagDesc": "属性が「無効」を意味する場合に有効化 (例: shadowInactive)。",
"syncSchedule": "同期スケジュール",
"syncScheduleDesc": "cron 風の文字列、例 @every 1m",
"inboundTags": "インバウンドタグ",
"inboundTagsDesc": "LDAP 同期がクライアントを自動作成/削除できるインバウンド。",
"noInbounds": "インバウンドが見つかりません。先にインバウンドで作成してください。",
"autoCreate": "クライアントを自動作成",
"autoDelete": "クライアントを自動削除",
"defaultTotalGb": "デフォルト合計 (GB)",
"defaultExpiryDays": "デフォルト有効期限 (日)",
"defaultIpLimit": "デフォルト IP 制限"
},
"subFormats": {
"finalMask": "Final Mask",
"finalMaskDesc": "生成される各 Xray JSON プロファイルへ Xray finalmask の TCP/UDP マスクと QUIC パラメーターを追加します。Xray JSON サブスクリプション対応アプリと新しい Xray コアが必要です。",
@@ -1276,31 +1179,15 @@
"muxSett": "マルチプレクサ設定",
"direct": "直接接続",
"directDesc": "特定の国のドメインまたはIP範囲に直接接続する",
"notifications": "通知",
"certs": "証明書",
"externalTraffic": "外部トラフィック",
"dateAndTime": "日付と時刻",
"proxyAndServer": "プロキシとサーバー",
"intervals": "間隔",
"information": "情報",
"profile": "プロフィール",
"language": "言語",
"telegramBotLanguage": "Telegram Botの言語",
"security": {
"admin": "管理者の資格情報",
"twoFactor": "二段階認証",
"twoFactorEnable": "2FAを有効化",
"twoFactorEnableDesc": "セキュリティを強化するために追加の認証層を追加します。",
"twoFactorModalSetTitle": "二段階認証を有効にする",
"twoFactorModalDeleteTitle": "二段階認証を無効にする",
"twoFactorModalSteps": "二段階認証を設定するには、次の手順を実行してください:",
"twoFactorModalFirstStep": "1. 認証アプリでこのQRコードをスキャンするか、QRコード近くのトークンをコピーしてアプリに貼り付けます",
"twoFactorModalSecondStep": "2. アプリからコードを入力してください",
"twoFactorModalRemoveStep": "二段階認証を削除するには、アプリからコードを入力してください。",
"twoFactorModalChangeCredentialsTitle": "認証情報の変更",
"twoFactorModalChangeCredentialsStep": "管理者の認証情報を変更するには、アプリケーションからコードを入力してください。",
"twoFactorModalSetSuccess": "二要素認証が正常に設定されました",
"twoFactorModalDeleteSuccess": "二要素認証が正常に削除されました",
"twoFactorModalError": "コードが間違っています",
"show": "表示",
"hide": "非表示",
@@ -1323,36 +1210,6 @@
"getOutboundTrafficError": "送信トラフィックの取得エラー",
"resetOutboundTrafficError": "送信トラフィックのリセットエラー"
},
"smtpSettings": "SMTP設定",
"smtpEnable": "メール通知を有効化",
"smtpEnableDesc": "SMTP経由のメール通知を有効にします",
"smtpHost": "SMTPホスト",
"smtpHostDesc": "SMTPサーバーのホスト名(例: smtp.gmail.com)",
"smtpPort": "SMTPポート",
"smtpPortDesc": "SMTPサーバーのポート(既定値: 587)",
"smtpUsername": "SMTPユーザー名",
"smtpUsernameDesc": "SMTP認証用のユーザー名",
"smtpFrom": "送信元アドレス (From)",
"smtpFromDesc": "メールの From ヘッダーに使用するアドレス。空欄の場合はユーザー名を使用します。",
"smtpFromName": "送信者名 (From)",
"smtpFromNameDesc": "From ヘッダーでアドレスの前に表示される任意の表示名。",
"smtpPassword": "SMTPパスワード",
"smtpPasswordDesc": "SMTP認証用のパスワード",
"smtpTo": "受信者",
"smtpToDesc": "受信者のメールアドレス(カンマ区切り)",
"emailSettings": "メール",
"emailNotifications": "通知",
"smtpEventBusNotify": "メールイベント通知",
"smtpEventBusNotifyDesc": "メール通知をトリガーするイベントを選択してください",
"tgEventBusNotify": "Telegramイベント通知",
"tgEventBusNotifyDesc": "Telegram通知をトリガーするイベントを選択してください",
"testSmtp": "テストメールを送信",
"testTgBot": "テストメッセージを送信",
"eventGroupOutbound": "アウトバウンド",
"eventGroupXray": "Xrayコア",
"eventGroupSystem": "システム",
"eventGroupSecurity": "セキュリティ",
"eventGroupNode": "ノード",
"eventOutboundDown": "ダウン",
"eventOutboundUp": "アップ",
"eventXrayCrash": "クラッシュ",
@@ -1360,36 +1217,7 @@
"eventNodeUp": "アップ",
"eventCPUHigh": "CPU高負荷(%)",
"requestFailed": "リクエストに失敗しました",
"smtpEncryption": "暗号化",
"smtpEncryptionDesc": "SMTP接続の暗号化方式",
"smtpEncryptionNone": "なし(平文)",
"smtpEncryptionStartTLS": "STARTTLS",
"smtpEncryptionTLS": "TLS(暗黙的)",
"smtpStageConnect": "接続",
"smtpStageAuth": "認証",
"smtpStageSend": "送信",
"smtpTestSuccess": "テストメールを正常に送信しました",
"smtpHostNotConfigured": "SMTPホストが設定されていません",
"smtpNoRecipients": "受信者が設定されていません",
"smtpFromNotConfigured": "SMTP送信者アドレスが設定されていません",
"eventLoginAttempt": "ログイン試行",
"telegramTokenConfigured": "設定済み。現在のトークンを維持する場合は空欄のままにしてください。",
"telegramTokenPlaceholder": "設定済み - 置き換えるには新しいトークンを入力してください",
"smtpPasswordConfigured": "設定済み。現在のパスワードを維持する場合は空欄のままにしてください。",
"smtpPasswordPlaceholder": "設定済み - 置き換えるには新しいパスワードを入力してください",
"smtpNotInitialized": "SMTPが初期化されていません",
"tgBotNotEnabled": "Telegramボットが有効になっていません",
"tgTestFailed": "Telegramのテストに失敗しました",
"tgTestSuccess": "Telegramにテストメッセージを送信しました",
"tgBotNotRunning": "Telegramボットが実行されていません",
"smtpErrorAuth": "認証に失敗しました — ユーザー名とパスワードを確認してください",
"smtpErrorStarttls": "サーバーはSTARTTLSを要求しています — 暗号化方式を変更してください",
"smtpErrorTls": "サーバーはTLSを要求しています — 暗号化方式を変更してください",
"smtpErrorRefused": "接続が拒否されました — ホストとポートを確認してください",
"smtpErrorTimeout": "接続がタイムアウトしました — ホストに到達できません",
"smtpErrorRelay": "サーバーはこのアドレスからの送信を拒否しています",
"smtpErrorEof": "サーバーによって接続が閉じられました",
"smtpErrorUnknown": "SMTPエラー: {{ .Error }}",
"eventMemoryHigh": "メモリ使用率が高い (%)",
"remarkTemplate": "備考テンプレート",
"remarkTemplateDesc": "設定すると、すべてのサブスクリプションリンクの備考モデルを置き換えます — 変数トークンを使って独自の形式を記述してください(ボタンで挿入できます)。空欄にすると上記のモデルが使用されます。",
@@ -1483,8 +1311,6 @@
"directdomains": "直接ドメイン",
"ipv4Routing": "IPv4 ルーティング",
"ipv4RoutingDesc": "このオプションはIPv4のみを介してターゲットドメインへルーティングします",
"Template": "高度なXray設定テンプレート",
"TemplateDesc": "最終的なXray設定ファイルはこのテンプレートに基づいて生成されます",
"FreedomStrategy": "Freedom プロトコル戦略",
"FreedomStrategyDesc": "Freedomプロトコル内のネットワークの出力戦略を設定する",
"FreedomHappyEyeballs": "Freedom Happy Eyeballs (IPv4/IPv6)",
@@ -1500,11 +1326,6 @@
"Balancers": "負荷分散",
"balancerTagRequired": "タグは必須です",
"balancerSelectorRequired": "アウトバウンドを少なくとも1つ選んでください",
"balancerLive": "現在のターゲット",
"balancerOverride": "ターゲット強制",
"balancerOverridePh": "自動(ストラテジー)",
"balancerLiveRefresh": "ロードバランサーのライブ状態を更新",
"balancerNotRunning": "このバランサーは実行中の Xray でアクティブではありません — 変更を保存するか、先に Xray を起動してください",
"routeTester": "ルートテスト",
"routeTesterDesc": "実行中の Xray にどのアウトバウンドが接続を処理するか問い合わせます。実際のトラフィックは送信されません — 判断はライブルーティングエンジンから直接取得されます。",
"routeTesterDest": "ドメインまたは IP",
@@ -1516,7 +1337,6 @@
"routeTesterViaBalancer": "バランサー経由",
"routeTesterDefaultOutbound": "ルーティングルールに一致しませんでした — トラフィックはデフォルト(最初の)アウトバウンドに送られます。",
"Routings": "ルーティングルール",
"completeTemplate": "すべて",
"logLevel": "ログレベル",
"logLevelDesc": "エラーログのレベルを指定し、記録する情報を示します",
"accessLog": "アクセスログ",
@@ -1544,7 +1364,6 @@
"source": "ソース",
"dest": "宛先アドレス",
"inbound": "インバウンド",
"balancer": "負荷分散",
"useComma": "カンマ区切りの項目"
},
"routing": {
@@ -1725,32 +1544,7 @@
"alreadyAdded": "このサーバーは既にアウトバウンド一覧にあります。鍵を更新するには {reset} を使ってください。",
"provisionFailed": "PIA アウトバウンドを作成できませんでした。もう一度お試しください。"
},
"tabBalancerSettings": "バランサー設定",
"tabObservatory": "オブザーバトリ",
"observatory": {
"autoManaged": "オブザーバはバランサーから自動的に管理されます。プローブの方法は下で調整できます。監視対象のアウトバウンドはバランサーのセレクターに従います。",
"emptyHint": "有効な接続オブザーバはありません。Least Ping または Least Load のバランサー、あるいは fallback 付きの Random / Round-robin バランサーを作成すると自動的に追加され、オブザーバを使うバランサーがターゲットを選ぶ前にアウトバウンドの健全性を確認できるようになります。",
"mixedLegacy": "この設定には Observatory と Burst Observatory の両方が含まれています。Xray は単一のグローバルオブザーバを使用するため、この古い混在状態はサポートされません。バランサーを保存すると 1 つのオブザーバに正規化されます。",
"subjectSelector": "監視対象のアウトバウンド",
"subjectSelectorDesc": "このオブザーバがプローブするアウトバウンドのタグ。バランサーから自動的に管理されます。",
"probeURL": "プローブ URL",
"probeURLDesc": "各アウトバウンドを測定するために取得する URL。HTTP 204 を返す必要があります。",
"probeInterval": "プローブ間隔",
"probeIntervalDesc": "各アウトバウンドをプローブする頻度。例: 30s、1m、2h45m。",
"enableConcurrency": "並行プローブ",
"enableConcurrencyDesc": "監視対象のアウトバウンドを1つずつではなく一度にプローブします。高速ですが、ネットワーク上で目立ちます。",
"destination": "プローブ先",
"destinationDesc": "各アウトバウンドを測定するために取得する URL。HTTP 204 を返す必要があります。",
"connectivity": "接続チェック",
"connectivityDesc": "任意のローカルネットワーク確認 URL。プローブ先が失敗した場合にのみ試行されます。空欄でスキップ。",
"interval": "プローブ間隔",
"intervalDesc": "アウトバウンドごとのプローブ間の平均時間。例: 1m。最小 10s。",
"timeout": "プローブ タイムアウト",
"timeoutDesc": "プローブを失敗とみなすまでの待機時間。例: 5s。",
"sampling": "サンプリング数",
"samplingDesc": "各アウトバウンドを評価するために保持する直近のプローブ結果の数。",
"httpMethod": "HTTP メソッド",
"httpMethodDesc": "プローブに使用する HTTP メソッド。",
"deleteAlsoObservatory": "これは Observatory を使用する最後のバランサーのため、こちらも削除されます。",
"deleteAlsoBurst": "これは Burst Observatory を使用する最後のバランサーのため、こちらも削除されます。"
},
@@ -1762,25 +1556,7 @@
},
"balancer": {
"balancerStrategy": "戦略",
"tag": "タグ",
"tagDuplicate": "このタグは他のバランサーで使用されています",
"tagPlaceholder": "一意のバランサータグ",
"selector": "セレクター",
"fallback": "Fallback",
"cycleTooltip": "循環: {path} → ({start} に戻る)",
"expected": "期待値",
"expectedPlaceholder": "最適ノード数",
"maxRtt": "最大 RTT",
"tolerance": "許容範囲",
"baselines": "Baselines",
"costs": "Costs",
"costMatch": "タグパターン",
"costValue": "重み",
"costRegexp": "正規表現で一致",
"balancerDeleteInUse": "このバランサーを削除できません — 以下のバランサーのフォールバックとして使用されています:{names}",
"balancerFallbackCycle": "このバランサーをフォールバックに設定できません — 循環依存が発生します。",
"balancerFallbackInfo": "トラフィックは以下のルートで転送されます:バランサー → Loopback → サーバー → ターゲットバランサー → アウトバウンド。これによりサーバーを経由する追加ホップが発生し、多少の遅延が生じる場合があります。",
"fallbackBalancerHint": "フォールバックとして別のバランサーを選択してください",
"reservedPrefix": "プレフィックス _bl_ はバランサーの内部ループバックオブジェクト用に予約されています"
},
"wireguard": {
@@ -1883,55 +1659,8 @@
"usage": "使用量",
"addOutbound": "アウトバウンドを追加"
},
"dns": {
"enable": "DNSを有効にする",
"enableDesc": "組み込みDNSサーバーを有効にする",
"tag": "DNSインバウンドタグ",
"tagDesc": "このタグはルーティングルールでインバウンドタグとして使用できます",
"clientIp": "クライアントIP",
"clientIpDesc": "DNSクエリ中に指定されたIPの位置をサーバーに通知するために使用されます",
"disableCache": "キャッシュを無効にする",
"disableCacheDesc": "DNSキャッシュを無効にします",
"disableFallback": "フォールバックを無効にする",
"disableFallbackDesc": "フォールバックDNSクエリを無効にします",
"disableFallbackIfMatch": "一致した場合にフォールバックを無効にする",
"disableFallbackIfMatchDesc": "DNSサーバーの一致するドメインリストにヒットした場合、フォールバックDNSクエリを無効にします",
"enableParallelQuery": "並列クエリを有効にする",
"enableParallelQueryDesc": "複数のサーバーへの並列DNSクエリを有効にして、より高速な解決を実現",
"strategy": "クエリ戦略",
"strategyDesc": "ドメイン名解決の全体的な戦略",
"add": "サーバー追加",
"edit": "サーバー編集",
"domains": "ドメイン",
"expectIPs": "期待されるIP",
"unexpectIPs": "予期しないIP",
"useSystemHosts": "システムのHostsを使用",
"useSystemHostsDesc": "インストール済みシステムのhostsファイルを使用する",
"serveStale": "期限切れキャッシュを使用",
"serveStaleDesc": "バックグラウンドで更新中に期限切れキャッシュ結果を返す",
"serveExpiredTTL": "期限切れTTL",
"serveExpiredTTLDesc": "期限切れキャッシュエントリの有効期間(秒)。0 = 無期限",
"timeoutMs": "タイムアウト (ms)",
"skipFallback": "フォールバックをスキップ",
"finalQuery": "最終クエリ",
"hosts": "Hosts",
"hostsAdd": "Host を追加",
"hostsEmpty": "Host が定義されていません",
"hostsDomain": "ドメイン (例: domain:example.com)",
"hostsValues": "IP またはドメイン — 入力して Enter",
"usePreset": "テンプレートを使用",
"dnsPresetTitle": "DNSテンプレート",
"dnsPresetFamily": "ファミリー",
"clearAll": "すべて削除",
"clearAllTitle": "すべての DNS サーバを削除しますか?",
"clearAllConfirm": "リストからすべての DNS サーバが削除されます。この操作は元に戻せません。",
"dnsLeakWarning": "DNS は localhost、暗号化なしの UDP/TCP、ローカルモードの DoH/DoQ、フォールバック問い合わせ、EDNS client IP から漏れる可能性があります。プライバシー重視ではルーティングされた DoH、hosts 固定、フォールバック無効化を使ってください。"
},
"fakedns": {
"add": "フェイクDNS追加",
"ipPool": "IPプールサブネット",
"poolSize": "プールサイズ"
},
"dns": {},
"fakedns": {},
"defaultOutbound": "デフォルトアウトバウンド",
"defaultOutboundDesc": "ルーティング規則に一致しないトラフィックはこのアウトバウンドを使います(一覧の先頭)。"
},
@@ -2055,198 +1784,7 @@
}
},
"tgbot": {
"keyboardClosed": "❌ キーボードを閉じました!",
"noResult": "❗ 結果がありません!",
"noQuery": "❌ クエリが見つかりません!コマンドを再利用してください!",
"wentWrong": "❌ 何かがうまくいかなかった!",
"noIpRecord": "❗ IPレコードがありません!",
"noInbounds": "❗ インバウンドが見つかりません!",
"unlimited": "♾ 無制限(リセット)",
"add": "追加",
"month": "月",
"months": "ヶ月",
"days": "日間",
"hours": "時間",
"minutes": "分",
"unknown": "不明",
"inbounds": "インバウンド",
"clients": "クライアント",
"offline": "🔴 オフライン",
"online": "🟢 オンライン",
"commands": {
"unknown": "❗ 不明なコマンド",
"pleaseChoose": "👇 選択してください:\r\n",
"help": "🤖 このボットをご利用いただきありがとうございます!サーバーから特定のデータを提供し、必要な変更を行うことができます。\r\n\r\n",
"start": "👋 こんにちは、<i>{{ .Firstname }}</i>。\r\n",
"welcome": "🤖 <b>{{ .Hostname }}</b> 管理ボットへようこそ。\r\n",
"status": "✅ ボットは正常に動作しています!",
"usage": "❗ 検索するテキストを入力してください!",
"getID": "🆔 あなたのIDは:<code>{{ .ID }}</code>",
"helpAdminCommands": "Xray Coreを再起動するには:\r\n<code>/restart</code>\r\n\r\nクライアントの電子メールを検索するには:\r\n<code>/usage [電子メール]</code>\r\n\r\nインバウンド(クライアントの統計情報を含む)を検索するには:\r\n<code>/inbound [備考]</code>\r\n\r\nTelegramチャットID:\r\n<code>/id</code>",
"helpClientCommands": "統計情報を検索するには、次のコマンドを使用してください:\r\n<code>/usage [電子メール]</code>\r\n\r\nTelegramチャットID:\r\n<code>/id</code>",
"restartUsage": "\r\n\r\n<code>/restart</code>",
"restartSuccess": "✅ 操作成功!",
"restartFailed": "❗ 操作エラー。\r\n\r\n<code>エラー: {{ .Error }}</code>",
"xrayNotRunning": "❗ Xray Core は動作していません。",
"startDesc": "メインメニューを表示",
"helpDesc": "ボットのヘルプ",
"statusDesc": "ボットの状態を確認",
"idDesc": "Telegram IDを表示",
"usageDesc": "クライアント使用量を表示: /usage メール",
"inboundDesc": "インバウンド検索: /inbound 備考(管理者)",
"restartDesc": "Xray コアを再起動(管理者)",
"clearallDesc": "全クライアントのトラフィックをリセット(管理者)"
},
"messages": {
"cpuThreshold": "CPU使用率は{{ .Percent }}%、しきい値{{ .Threshold }}%を超えました",
"selectUserFailed": "❌ ユーザーの選択に失敗しました!",
"userSaved": "✅ Telegramユーザーが保存されました。",
"loginSuccess": "✅ パネルに正常にログインしました。\r\n",
"loginFailed": "❗️ パネルのログインに失敗しました。\r\n",
"report": "🕰 定期報告:{{ .RunTime }}\r\n",
"datetime": "⏰ 日時:{{ .DateTime }}\r\n",
"hostname": "💻 ホスト: {{ .Hostname }}\r\n",
"version": "🚀 X-UI バージョン:{{ .Version }}\r\n",
"xrayVersion": "📡 Xray バージョン: {{ .XrayVersion }}\r\n",
"ipv6": "🌐 IPv6: {{ .IPv6 }}\r\n",
"ipv4": "🌐 IPv4: {{ .IPv4 }}\r\n",
"ip": "🌐 IP: {{ .IP }}\r\n",
"ips": "🔢 IP:\r\n{{ .IPs }}\r\n",
"serverUpTime": "⏳ サーバー稼働時間:{{ .UpTime }} {{ .Unit }}\r\n",
"serverLoad": "📈 サーバー負荷:{{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n",
"serverMemory": "📋 RAM: {{ .Current }}/{{ .Total }}\r\n",
"tcpCount": "🔹 TCP: {{ .Count }}\r\n",
"udpCount": "🔸 UDP: {{ .Count }}\r\n",
"traffic": "🚦 トラフィック:{{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n",
"xrayStatus": "ℹ️ ステータス: {{ .State }}\r\n",
"username": "👤 ユーザー名:{{ .Username }}\r\n",
"reason": "❗️ 理由:{{ .Reason }}\r\n",
"time": "⏰ 時間:{{ .Time }}\r\n",
"inbound": "📍 インバウンド: {{ .Remark }}\r\n",
"port": "🔌 ポート: {{ .Port }}\r\n",
"expire": "📅 有効期限:{{ .Time }}\r\n",
"expireIn": "📅 残り時間:{{ .Time }}\r\n",
"active": "💡 有効:{{ .Enable }}\r\n",
"enabled": "🚨 有効化済み:{{ .Enable }}\r\n",
"online": "🌐 接続ステータス:{{ .Status }}\r\n",
"lastOnline": "🔙 最終オンライン: {{ .Time }}\r\n",
"email": "📧 メール: {{ .Email }}\r\n",
"upload": "🔼 アップロード: ↑{{ .Upload }}\r\n",
"download": "🔽 ダウンロード: ↓{{ .Download }}\r\n",
"total": "📊 合計: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
"TGUser": "👤 Telegramユーザー:{{ .TelegramID }}\r\n",
"exhaustedCount": "🚨 消耗済みの {{ .Type }} 数量:\r\n",
"onlinesCount": "🌐 オンラインクライアント:{{ .Count }}\r\n",
"disabled": "🛑 無効化:{{ .Disabled }}\r\n",
"depleteSoon": "🔜 間もなく消耗:{{ .Deplete }}\r\n\r\n",
"backupTime": "🗄 バックアップ時間:{{ .Time }}\r\n",
"refreshedOn": "\r\n📋🔄 更新時間:{{ .Time }}\r\n\r\n",
"yes": "✅ はい",
"no": "❌ いいえ",
"received_email": "📧📥 メールが更新されました。",
"received_comment": "💬📥 コメントが更新されました。",
"email_prompt": "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールを入力してください。",
"comment_prompt": "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。",
"cancel": "❌ プロセスがキャンセルされました!\n\nいつでも /start で再開できます。 🔄",
"error_add_client": "⚠️ エラー:\n\n {{ .error }}",
"using_default_value": "わかりました、デフォルト値を使用します。 😊",
"incorrect_input": "入力が無効です。\nフレーズはスペースなしで続けて入力してください。\n正しい例: aaaaaa\n間違った例: aaa aaa 🚫",
"AreYouSure": "本当にいいですか?🤔",
"SuccessResetTraffic": "📧 メール: {{ .ClientEmail }}\n🏁 結果: ✅ 成功",
"FailedResetTraffic": "📧 メール: {{ .ClientEmail }}\n🏁 結果: ❌ 失敗 \n\n🛠️ エラー: [ {{ .ErrorMessage }} ]",
"FinishProcess": "🔚 すべてのクライアントのトラフィックリセットが完了しました。",
"eventOutboundDown": "アウトバウンド {{ .Tag }} がダウンしています",
"eventOutboundUp": "アウトバウンド {{ .Tag }} が復旧しました",
"eventErrorDetail": "エラー: {{ .Error }}",
"eventDelayDetail": "遅延: {{ .Delay }}ms",
"eventXrayCrash": "Xrayがクラッシュしました",
"eventXrayCrashError": "エラー: {{ .Error }}",
"eventNodeDown": "ノード {{ .Name }} がダウンしています",
"eventNodeUp": "ノード {{ .Name }} が復旧しました",
"eventLoginFallback": "{{ .Source }} からのログインに失敗しました",
"memoryThreshold": "メモリ使用率 {{ .Percent }}% がしきい値 {{ .Threshold }}% を超えました"
},
"buttons": {
"closeKeyboard": "❌ キーボードを閉じる",
"cancel": "❌ キャンセル",
"cancelReset": "❌ リセットをキャンセル",
"cancelIpLimit": "❌ IP制限をキャンセル",
"confirmResetTraffic": "✅ トラフィックをリセットしますか?",
"confirmClearIps": "✅ IPをクリアしますか?",
"confirmRemoveTGUser": "✅ Telegramユーザーを削除しますか?",
"confirmToggle": "✅ ユーザーを有効/無効にしますか?",
"dbBackup": "データベースバックアップを取得",
"serverUsage": "サーバーの使用状況",
"getInbounds": "インバウンド情報を取得",
"depleteSoon": "間もなく消耗",
"clientUsage": "使用状況を取得",
"onlines": "オンラインクライアント",
"commands": "コマンド",
"refresh": "🔄 更新",
"clearIPs": "❌ IPをクリア",
"removeTGUser": "❌ Telegramユーザーを削除",
"selectTGUser": "👤 Telegramユーザーを選択",
"selectOneTGUser": "👤 1人のTelegramユーザーを選択:",
"resetTraffic": "📈 トラフィックをリセット",
"resetExpire": "📅 有効期限を変更",
"ipLog": "🔢 IPログ",
"ipLimit": "🔢 IP制限",
"setTGUser": "👤 Telegramユーザーを設定",
"toggle": "🔘 有効/無効",
"custom": "🔢 カスタム",
"confirmNumber": "✅ 確認: {{ .Num }}",
"confirmNumberAdd": "✅ 追加を確認:{{ .Num }}",
"limitTraffic": "🚧 トラフィック制限",
"getBanLogs": "禁止ログ",
"allClients": "すべてのクライアント",
"addClient": "クライアントを追加",
"submitDisable": "無効として送信 ☑️",
"submitEnable": "有効として送信 ✅",
"use_default": "🏷️ デフォルトを使用",
"change_email": "⚙️📧 メール",
"change_comment": "⚙️💬 コメント",
"ResetAllTraffics": "すべてのトラフィックをリセット",
"SortedTrafficUsageReport": "ソートされたトラフィック使用レポート"
},
"answers": {
"successfulOperation": "✅ 成功!",
"errorOperation": "❗ 操作エラー。",
"getInboundsFailed": "❌ インバウンド情報の取得に失敗しました。",
"getClientsFailed": "❌ クライアントの取得に失敗しました。",
"canceled": "❌ {{ .Email }}:操作がキャンセルされました。",
"clientRefreshSuccess": "✅ {{ .Email }}:クライアントが正常に更新されました。",
"IpRefreshSuccess": "✅ {{ .Email }}:IPが正常に更新されました。",
"TGIdRefreshSuccess": "✅ {{ .Email }}:クライアントのTelegramユーザーが正常に更新されました。",
"resetTrafficSuccess": "✅ {{ .Email }}:トラフィックが正常にリセットされました。",
"setTrafficLimitSuccess": "✅ {{ .Email }}:トラフィック制限が正常に保存されました。",
"expireResetSuccess": "✅ {{ .Email }}:有効期限の日数が正常にリセットされました。",
"resetIpSuccess": "✅ {{ .Email }}:IP制限数が正常に保存されました:{{ .Count }}。",
"clearIpSuccess": "✅ {{ .Email }}:IPが正常にクリアされました。",
"getIpLog": "✅ {{ .Email }}:IPログの取得。",
"getUserInfo": "✅ {{ .Email }}:Telegramユーザー情報の取得。",
"removedTGUserSuccess": "✅ {{ .Email }}:Telegramユーザーが正常に削除されました。",
"enableSuccess": "✅ {{ .Email }}:正常に有効化されました。",
"disableSuccess": "✅ {{ .Email }}:正常に無効化されました。",
"askToAddUserId": "設定が見つかりませんでした!\r\n管理者に問い合わせて、設定にTelegramユーザーのChatIDを使用してください。\r\n\r\nあなたのユーザーChatID:<code>{{ .TgUserID }}</code>",
"chooseClient": "インバウンド {{ .Inbound }} のクライアントを選択",
"chooseInbound": "インバウンドを選択"
}
"noIpRecord": "❗ IPレコードがありません!"
},
"email": {
"labelStatus": "ステータス",
"labelOutbound": "アウトバウンド",
"labelNode": "ノード",
"labelError": "エラー",
"labelDelay": "遅延",
"labelUsername": "ユーザー名",
"labelIP": "IP",
"labelReason": "理由",
"labelSource": "送信元",
"statusCrashed": "クラッシュ",
"statusHigh": "高負荷",
"statusSuccess": "成功",
"statusFailed": "失敗",
"statusDown": "ダウン",
"statusUp": "アップ"
}
"email": {}
}