chore(i18n): delete 230 dead translation keys and guard against new ones (#6132)

* chore(i18n): delete 230 dead translation keys and guard against new ones

The 13 locale files carried 230 keys (11% of the set) that nothing in
the frontend or Go sources references — leftovers of renamed features
(the email notifier reuses tgbot.messages.* for subjects, the old
email.subject*/title* set was orphaned; likewise menu.*, the clients
bulk-copy strings, and the secAlert* family). Nothing detected this:
a missing key falls back to en-US and an unused key fails nothing.

A new test now fails the build when an en-US key has no reference in
frontend/src or internal Go sources (dynamic keys are covered by
harvesting concatenation and template-literal prefixes), and pins
that all 13 locales carry exactly the en-US key set, so parity drift
surfaces at test time instead of as a silent fallback.

Each locale shrinks by the same 230 keys; net -2,900 lines across
the translation set.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(i18n): restore the 29 live remarkVars keys, match whole tokens, unmask 9 more

From review: the template-literal harvester required the prefix to end
on a dot, so pages.hosts.remarkVars.desc${token} harvested nothing
and all 29 desc* tooltip keys were wrongly deleted — and the guard
shared the flawed logic, so CI stayed green while the Hosts page
would have shown raw key names in 13 languages. Restored from the
parent commit; the harvester now requires at least one dot but not a
trailing one.

Also from review: references are matched as whole dotted tokens
instead of substrings (a dead key can no longer hide behind a longer
sibling — that unmasked 9 more genuinely dead keys, each verified by
hand before deletion), and the test excludes itself from the scan so
its own prose cannot whitelist a subtree.

Net: -210 keys per locale instead of the previous -230.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
PathGao
2026-07-29 13:59:25 +08:00
committed by GitHub
parent 17e6b5a460
commit ea35884390
14 changed files with 117 additions and 2834 deletions
+2 -218
View File
@@ -48,7 +48,6 @@
"copySuccess": "コピー成功",
"sure": "確定",
"encryption": "暗号化",
"useIPv4ForHost": "ホストにIPv4を使用",
"transmission": "伝送",
"host": "ホスト",
"path": "パス",
@@ -74,18 +73,9 @@
"twoFactorCode": "コード",
"remained": "残り",
"security": "セキュリティ",
"secAlertTitle": "セキュリティアラート",
"secAlertSsl": "この接続は安全ではありません。TLSを有効にしてデータ保護を行うまで、機密情報を入力しないでください。",
"secAlertConf": "一部の設定は脆弱です。潜在的な脆弱性を防ぐために、セキュリティプロトコルを強化することをお勧めします。",
"secAlertSSL": "セキュアな接続がありません。データ保護のためにTLS証明書をインストールしてください。",
"secAlertPanelPort": "デフォルトのポートにはセキュリティリスクがあります。ランダムなポートまたは特定のポートを設定してください。",
"secAlertPanelURI": "デフォルトのURIパスは安全ではありません。複雑なURIパスを設定してください。",
"secAlertSubURI": "サブスクリプションのデフォルトURIパスは安全ではありません。複雑なURIパスを設定してください。",
"secAlertSubJsonURI": "JSONサブスクリプションのデフォルトURIパスは安全ではありません。複雑なURIパスを設定してください。",
"emptyDnsDesc": "追加されたDNSサーバーはありません。",
"emptyFakeDnsDesc": "追加されたFake DNSサーバーはありません。",
"emptyBalancersDesc": "追加されたバランサーはありません。",
"emptyReverseDesc": "追加されたリバースプロキシはありません。",
"somethingWentWrong": "エラーが発生しました",
"subscription": {
"title": "サブスクリプション情報",
@@ -106,8 +96,6 @@
},
"menu": {
"theme": "テーマ",
"dark": "ダーク",
"ultraDark": "ウルトラダーク",
"dashboard": "ダッシュボード",
"inbounds": "インバウンド",
"clients": "クライアント",
@@ -118,7 +106,6 @@
"routing": "ルーティング",
"outbounds": "アウトバウンド",
"apiDocs": "API ドキュメント",
"logout": "ログアウト",
"link": "リンク管理",
"donate": "寄付",
"hosts": "ホスト",
@@ -139,7 +126,6 @@
}
},
"index": {
"title": "システムステータス",
"cpu": "CPU",
"logicalProcessors": "論理プロセッサ",
"frequency": "周波数",
@@ -152,7 +138,6 @@
"restartXray": "再起動",
"xraySwitch": "バージョン",
"xrayUpdates": "Xrayの更新",
"xraySwitchClick": "切り替えるバージョンを選択してください",
"xraySwitchClickDesk": "慎重に選択してください。古いバージョンは現在の設定と互換性がない可能性があります。",
"updatePanel": "パネルを更新",
"panelUpdateDesc": "これにより3X-UIが最新リリースに更新され、パネルサービスが再起動されます。",
@@ -164,12 +149,10 @@
"currentCommit": "現在のコミット",
"latestCommit": "最新のコミット",
"updateChannelChanged": "更新チャンネルを変更しました",
"upToDate": "最新",
"xrayStatusUnknown": "不明",
"xrayStatusRunning": "実行中",
"xrayStatusStop": "停止",
"xrayStatusError": "エラー",
"xrayErrorPopoverTitle": "Xrayの実行中にエラーが発生しました",
"operationHours": "システム稼働時間",
"systemHistoryTitle": "システム履歴",
"historyTitleCpu": "CPU 使用率",
@@ -211,9 +194,6 @@
"xrayObservatoryDead": "停止",
"xrayObservatoryLastSeen": "最終確認",
"xrayObservatoryLastTry": "最終試行",
"trendLast2Min": "直近2分",
"systemLoad": "システム負荷",
"systemLoadDesc": "過去1、5、15分間のシステム平均負荷",
"connectionCount": "接続数",
"ipAddresses": "IPアドレス",
"toggleIpVisibility": "IPの表示を切り替える",
@@ -223,13 +203,11 @@
"totalData": "総データ量",
"sent": "送信",
"received": "受信",
"documentation": "ドキュメント",
"xraySwitchVersionDialog": "Xrayのバージョンを本当に変更しますか?",
"xraySwitchVersionDialogDesc": "Xrayのバージョンが#version#に変更されます。",
"xraySwitchVersionPopover": "Xrayの更新が成功しました",
"panelUpdateDialog": "本当にパネルを更新しますか?",
"panelUpdateDialogDesc": "これにより3X-UIが#version#に更新され、パネルサービスが再起動されます。",
"panelUpdateCheckPopover": "パネルの更新確認に失敗しました",
"panelUpdateStartedPopover": "パネルの更新を開始しました",
"panelUpdateFailedTitle": "パネルの更新に失敗しました",
"panelUpdateFailedDesc": "更新が正常に完了しませんでした。サーバーのログを確認するか、コマンドラインで「x-ui update」を実行してください。",
@@ -258,7 +236,6 @@
"accessLogs": "アクセスログ",
"autoUpdate": "自動更新",
"config": "設定",
"backup": "バックアップ",
"backupTitle": "バックアップと復元",
"exportDatabase": "バックアップ",
"exportDatabaseDesc": "クリックして、現在のデータベースのバックアップを含む .db ファイルをデバイスにダウンロードします。同じファイルは PostgreSQL で動作するパネルにも復元できます。",
@@ -276,7 +253,6 @@
"migrationDownloadPgDesc": "PostgreSQL のデータから作成した .db SQLite データベースをダウンロードします。このパネルを SQLite で実行する準備が整います。"
},
"inbounds": {
"title": "インバウンド",
"totalDownUp": "総アップロード / ダウンロード",
"totalUsage": "総使用量",
"inboundCount": "インバウンド数",
@@ -288,21 +264,11 @@
"localPanel": "ローカルパネル",
"fallbacks": {
"title": "Fallbacks",
"help": "このインバウンドへの接続がどのクライアントにも一致しない場合、別の宛先へルーティングします。下から子インバウンドを選ぶとルーティング項目(SNI / ALPN / Path / xver)がそのトランスポートから自動的に埋められます。あるいは選択を空のままにして Dest を直接指定すると(例: 8080 または 127.0.0.1:8080)、Nginx などの外部サーバーへルーティングできます。各子インバウンドは 127.0.0.1 で security=none をリッスンする必要があります。",
"empty": "フォールバックはまだありません",
"add": "フォールバックを追加",
"pickInbound": "インバウンドを選択",
"matchAny": "任意",
"destPlaceholder": "自動(子の listen:port",
"rederive": "子から再取得",
"rederived": "子から再取得しました",
"editAdvanced": "ルーティング項目を編集",
"hideAdvanced": "詳細を隠す",
"quickAddAll": "対象のインバウンドをすべて一括追加",
"quickAdded": "{n} 件のフォールバックを追加しました",
"quickAddedNone": "追加可能な新規インバウンドはありません",
"routesWhen": "次の条件でルーティング",
"defaultCatchAll": "デフォルト — その他すべてを捕捉",
"needsTls": "フォールバックは、セキュリティタブで TLS または Reality を選択すると設定できます(RAW 上の VLESS/Trojan のみ)。"
},
"protocol": "プロトコル",
@@ -310,8 +276,6 @@
"portMap": "ポートマッピング",
"traffic": "トラフィック",
"speed": "速度",
"details": "詳細情報",
"transportConfig": "トランスポート",
"expireDate": "有効期限",
"createdAt": "作成",
"updatedAt": "更新",
@@ -319,8 +283,6 @@
"addInbound": "インバウンド追加",
"generalActions": "一般操作",
"modifyInbound": "インバウンド修正",
"deleteInbound": "インバウンド削除",
"deleteInboundContent": "インバウンドを削除してもよろしいですか?",
"deleteConfirmTitle": "インバウンド「{remark}」を削除しますか?",
"deleteConfirmContent": "インバウンドと関連付けされたすべてのクライアントを削除します。元に戻せません。",
"resetConfirmTitle": "「{remark}」のトラフィックをリセットしますか?",
@@ -364,8 +326,6 @@
"exportAllLinksFileName": "全インバウンド",
"exportAllSubsFileName": "全インバウンド-Subs",
"inboundJsonTitle": "インバウンド JSON",
"deleteClient": "クライアント削除",
"deleteClientContent": "クライアントを削除してもよろしいですか?",
"resetTrafficContent": "トラフィックをリセットしてもよろしいですか?",
"copyLink": "リンクをコピー",
"address": "アドレス",
@@ -376,36 +336,19 @@
"meansNoLimit": "= 無制限。(単位: GB)",
"totalFlow": "総トラフィック",
"leaveBlankToNeverExpire": "空白にすると期限なし",
"noRecommendKeepDefault": "デフォルト値を保持することをお勧めします",
"certificatePath": "ファイルパス",
"certificateContent": "ファイル内容",
"publicKey": "公開鍵",
"privatekey": "秘密鍵",
"clickOnQRcode": "QRコードをクリックしてコピー",
"client": "クライアント",
"export": "リンクエクスポート",
"clone": "複製",
"cloneInbound": "複製",
"cloneInboundContent": "このインバウンドルールは、ポート(Port)、リスニングIP(Listening IP)、クライアント(Clients)を除くすべての設定がクローンされます",
"cloneInboundOk": "クローン作成",
"resetAllTraffic": "すべてのインバウンドトラフィックをリセット",
"resetAllTrafficTitle": "すべてのインバウンドトラフィックをリセット",
"resetAllTrafficContent": "すべてのインバウンドトラフィックをリセットしてもよろしいですか?",
"resetInboundClientTraffics": "クライアントトラフィックをリセット",
"resetInboundClientTrafficTitle": "すべてのクライアントトラフィックをリセット",
"resetInboundClientTrafficContent": "このインバウンドクライアントのすべてのトラフィックをリセットしてもよろしいですか?",
"resetAllClientTraffics": "すべてのクライアントトラフィックをリセット",
"resetAllClientTrafficTitle": "すべてのクライアントトラフィックをリセット",
"resetAllClientTrafficContent": "すべてのクライアントのトラフィックをリセットしてもよろしいですか?",
"delDepletedClients": "トラフィックが尽きたクライアントを削除",
"delDepletedClientsTitle": "トラフィックが尽きたクライアントを削除",
"delDepletedClientsContent": "トラフィックが尽きたすべてのクライアントを削除してもよろしいですか?",
"email": "メール",
"emailDesc": "メールアドレスは一意でなければなりません",
"IPLimit": "IP制限",
"IPLimitDesc": "設定値を超えるとインバウンドトラフィックが無効になります。(0 = 無効)",
"IPLimitlog": "IPログ",
"IPLimitlogDesc": "IP履歴ログ(無効なインバウンドトラフィックを有効にするには、ログをクリアしてください)",
"IPLimitlogclear": "ログをクリア",
"setDefaultCert": "パネル設定から証明書を設定",
"setDefaultCertEmpty": "パネル用の証明書が設定されていません。先に設定から指定してください。",
@@ -438,21 +381,15 @@
"sniffing": "Sniffing",
"sniffingHelp": "Xray sniffing ブロックのラッパー:",
"stream": "Stream",
"streamHelp": "Xray stream ブロックのラッパー:",
"jsonErrorPrefix": "高度な JSON"
"streamHelp": "Xray stream ブロックのラッパー:"
},
"telegramDesc": "TelegramチャットIDを提供してください。(ボットで'/id'コマンドを使用)または({'@'}userinfobot",
"subscriptionDesc": "サブスクリプションURLを見つけるには、“詳細情報”に移動してください。また、複数のクライアントに同じ名前を使用することができます。",
"subSortIndex": "サブ並び順",
"same": "同じ",
"inboundInfo": "インバウンド情報",
"exportInbound": "インバウンドルールをエクスポート",
"import": "インポート",
"importInbound": "インバウンドルールをインポート",
"periodicTrafficResetTitle": "トラフィックリセット",
"periodicTrafficResetDesc": "指定された間隔でトラフィックカウンタを自動的にリセット",
"periodicTrafficResetDay": "毎月のリセット日",
"lastReset": "最後のリセット",
"periodicTrafficReset": {
"never": "なし",
"daily": "毎日",
@@ -464,7 +401,6 @@
"obtain": "取得",
"updateSuccess": "更新が成功しました",
"logCleanSuccess": "ログがクリアされました",
"inboundsUpdateSuccess": "インバウンドが正常に更新されました",
"inboundUpdateSuccess": "インバウンドが正常に更新されました",
"inboundCreateSuccess": "インバウンドが正常に作成されました",
"bulkDeleted": "{count} 件のインバウンドを削除しました",
@@ -474,7 +410,6 @@
"inboundClientDeleteSuccess": "インバウンドクライアントが削除されました",
"inboundClientUpdateSuccess": "インバウンドクライアントが更新されました",
"savedNodeOfflineWillSync": "ローカルに保存しました。バックエンドのノードがオフラインまたは無効になっています — 再接続後に変更が同期されます。",
"delDepletedClientsSuccess": "すべての枯渇したクライアントが削除されました",
"resetAllClientTrafficSuccess": "クライアントのすべてのトラフィックがリセットされました",
"resetAllTrafficSuccess": "すべてのトラフィックがリセットされました",
"resetInboundClientTrafficSuccess": "トラフィックがリセットされました",
@@ -717,23 +652,6 @@
"peerNumber": "Peer {n}",
"peerNumberConfig": "Peer {n} 設定"
},
"stream": {
"general": {
"request": "リクエスト",
"response": "レスポンス",
"name": "名前",
"value": "値"
},
"tcp": {
"version": "バージョン",
"method": "方法",
"path": "パス",
"status": "ステータス",
"statusDescription": "ステータス説明",
"requestHeader": "リクエストヘッダー",
"responseHeader": "レスポンスヘッダー"
}
},
"sniffingDestOverride": "宛先のオーバーライド"
},
"clients": {
@@ -747,24 +665,9 @@
"addExternalSubscription": "外部サブスクリプションを追加",
"noExternalLinks": "外部リンクはまだありません。",
"noExternalSubscriptions": "外部サブスクリプションはまだありません。",
"add": "クライアントを追加",
"edit": "クライアントを編集",
"submitAdd": "クライアントを追加",
"submitEdit": "変更を保存",
"clientCount": "クライアント数",
"bulk": "一括追加",
"copyFromInbound": "インバウンドからクライアントをコピー",
"copyToInbound": "コピー先",
"copySelected": "選択をコピー",
"copySource": "コピー元",
"copyEmailPreview": "生成されるメールのプレビュー",
"copySelectSourceFirst": "まずコピー元のインバウンドを選択してください。",
"copyResult": "コピー結果",
"copyResultSuccess": "コピーに成功しました",
"copyResultNone": "コピーする対象がありません。クライアントが選択されていないか、コピー元が空です",
"copyResultErrors": "コピーエラー",
"copyFlowLabel": "新規クライアントの Flow (VLESS)",
"copyFlowHint": "コピーされる全クライアントに適用されます。空欄でスキップします。",
"selectAll": "すべて選択",
"clearAll": "すべてクリア",
"method": "メソッド",
@@ -775,7 +678,6 @@
"postfix": "サフィックス",
"delayedStart": "初回使用から開始",
"expireDays": "期間 (日)",
"days": "日",
"renew": "自動更新",
"renewDesc": "有効期限切れ後に自動更新します。(0 = 無効) (単位: 日)",
"renewDays": "自動更新 (日)",
@@ -798,7 +700,6 @@
"sortExpiringSoonest": "もうすぐ期限切れ",
"has": "あり",
"hasNot": "なし",
"title": "クライアント",
"actions": "操作",
"totalGB": "トラフィック上限 (GB)",
"totalGBDesc": "このクライアントのデータ割当量。0 = 無制限。",
@@ -826,8 +727,6 @@
"addClient": "クライアントを追加",
"qrCode": "QR コード",
"clientInfo": "クライアント情報",
"delete": "削除",
"reset": "トラフィックをリセット",
"editClient": "クライアントを編集",
"client": "クライアント",
"enabled": "有効",
@@ -841,13 +740,11 @@
"noLinks": "共有可能なリンクがありません — まずこのクライアントを対応するプロトコルのインバウンドに関連付けてください。",
"link": "リンク",
"resetNotPossible": "まずこのクライアントをインバウンドに関連付けてください。",
"general": "一般",
"resetAllTraffics": "すべてのクライアントのトラフィックをリセット",
"resetAllTrafficsTitle": "すべてのクライアントのトラフィックをリセットしますか?",
"resetAllTrafficsContent": "すべてのクライアントの送受信カウンターがゼロにリセットされます。クォータと有効期限には影響しません。元に戻せません。",
"deleteConfirmTitle": "クライアント {email} を削除しますか?",
"deleteConfirmContent": "クライアントを関連付けされたすべてのインバウンドから削除し、トラフィック記録も破棄します。元に戻せません。",
"deleteSelected": "削除 ({count})",
"adjustSelected": "調整 ({count})",
"subLinksSelected": "サブリンク ({count})",
"addToGroupTitle": "{count} クライアントをグループに追加",
@@ -869,12 +766,10 @@
"bulkDisableConfirmTitle": "{count} 件のクライアントを無効化しますか?",
"bulkDisableConfirmContent": "選択した各クライアントを、接続されているすべてのインバウンドで無効化します。アクセスはすぐに失われますが、記録とトラフィックは保持されます。",
"selectedCount": "{count} 選択中",
"attachSelected": "アタッチ ({count})",
"attachToInboundsTitle": "{count} クライアントをインバウンドにアタッチ",
"attachToInboundsDesc": "選択した {count} クライアント(同じ UUID/パスワードと共有トラフィック)を選択したインバウンドにアタッチします。既存のアタッチは維持されます。",
"attachToInboundsTargets": "ターゲットインバウンド",
"attachToInboundsNoTargets": "アタッチ可能なマルチユーザーインバウンドがありません。",
"detachSelected": "デタッチ ({count})",
"detach": "デタッチ",
"detachFromInboundsTitle": "{count} クライアントをインバウンドからデタッチ",
"detachFromInboundsDesc": "選択した {count} クライアントを選択したインバウンドから外します。アタッチされていなかったペアは黙ってスキップされます。クライアントレコードは保持されます (完全に削除するには Delete を使用)。",
@@ -928,8 +823,6 @@
"reverseTagPlaceholder": "任意の Reverse tag",
"telegramId": "Telegram ユーザー ID",
"telegramIdPlaceholder": "数値の Telegram ユーザー ID (0 = なし)",
"created": "作成日",
"updated": "更新日",
"ipLimit": "IP 制限",
"toasts": {
"deleted": "クライアントを削除しました",
@@ -952,7 +845,6 @@
}
},
"groups": {
"title": "グループ",
"name": "名前",
"clientCount": "クライアント",
"totalGroups": "グループ合計",
@@ -994,7 +886,6 @@
"removeFromGroupResult": "{count} クライアントを {name} から外しました。"
},
"nodes": {
"title": "ノード",
"addNode": "ノードを追加",
"editNode": "ノード編集",
"totalNodes": "ノード総数",
@@ -1013,8 +904,6 @@
"apiTokenPlaceholder": "リモートパネルの設定ページから取得したトークン",
"apiTokenHint": "リモートパネルでは、セキュリティ設定 → APIトークン でAPIトークンを確認できます。",
"apiTokenKeepHint": "現在のトークンを保持するには空欄のままにします",
"regenerate": "トークンを再生成",
"regenerateConfirm": "再生成すると現在のトークンは無効になります。これを使用しているすべての中央パネルは更新されるまでアクセスできなくなります。続行しますか?",
"allowPrivateAddress": "プライベートアドレスを許可",
"allowPrivateAddressHint": "プライベートネットワークまたはVPN上のノードにのみ有効にします。",
"outboundTag": "接続アウトバウンド",
@@ -1046,7 +935,6 @@
"updatePanel": "パネルを更新",
"updateSelected": "選択を更新 ({count})",
"updateAvailable": "更新あり",
"upToDate": "最新",
"updateConfirmTitle": "{count} 個のノードを最新バージョンに更新しますか?",
"updateConfirmContent": "選択した各ノードは最新リリースをダウンロードして再起動します。有効かつオンラインのノードのみが更新されます。",
"updateDevChannel": "開発チャンネルに更新(最新コミット)",
@@ -1447,7 +1335,6 @@
"secretClearUndo": "クリアを取り消す"
},
"xray": {
"title": "Xray 設定",
"importRules": "ルールをインポート",
"exportRules": "ルールをエクスポート",
"importOutbounds": "アウトバウンドをインポート",
@@ -1457,11 +1344,7 @@
"metricsListenDesc": "この アドレス:ポート で Xray の Prometheus 形式メトリクスを公開します(例: 127.0.0.1:11111)。空欄にすると無効になります。認証されないため、localhost にバインドしてリバースプロキシ経由で公開してください。",
"metricsTag": "メトリクスタグ",
"save": "保存",
"restart": "Xray を再起動",
"restartSuccess": "Xrayの再起動に成功しました",
"restartOutputTitle": "Xray 再起動の出力",
"restartConfirmTitle": "xray を再起動?",
"restartConfirmContent": "保存された構成で xray サービスを再ロードします。",
"stopSuccess": "Xrayが正常に停止しました",
"restartError": "Xrayの再起動中にエラーが発生しました。",
"stopError": "Xrayの停止中にエラーが発生しました。",
@@ -1471,7 +1354,6 @@
"generalConfigsDesc": "これらのオプションは一般設定を決定します",
"logConfigs": "ログ",
"logConfigsDesc": "ログはサーバーのパフォーマンスに影響を与える可能性があるため、必要な場合にのみ有効にすることをお勧めします",
"blockConfigsDesc": "これらのオプションは、特定のプロトコルやウェブサイトへのユーザー接続をブロックします",
"basicRouting": "基本ルーティング",
"blockConnectionsConfigsDesc": "これらのオプションにより、特定のリクエスト元の国に基づいてトラフィックをブロックします。",
"directConnectionsConfigsDesc": "直接接続により、特定のトラフィックが他のサーバーを経由しないようにします。",
@@ -1481,10 +1363,6 @@
"directdomains": "直接ドメイン",
"ipv4Routing": "IPv4 ルーティング",
"ipv4RoutingDesc": "このオプションはIPv4のみを介してターゲットドメインへルーティングします",
"warpRouting": "WARP ルーティング",
"warpRoutingDesc": "注意:これらのオプションを使用する前に、パネルのGitHubの手順に従って、サーバーにsocks5プロキシモードでWARPをインストールしてください。WARPはCloudflareサーバー経由でトラフィックをウェブサイトにルーティングします。",
"nordRouting": "NordVPN ルーティング",
"nordRoutingDesc": "これらのオプションはNordVPN経由で特定の宛先にトラフィックをルーティングします。",
"Template": "高度なXray設定テンプレート",
"TemplateDesc": "最終的なXray設定ファイルはこのテンプレートに基づいて生成されます",
"FreedomStrategy": "Freedom プロトコル戦略",
@@ -1498,10 +1376,7 @@
"outboundTestUrlDesc": "アウトバウンド接続テストに使用する URL。既定値",
"Torrent": "BitTorrent プロトコルをブロック",
"Inbounds": "インバウンド",
"InboundsDesc": "特定のクライアントからのトラフィックを受け入れる",
"Outbounds": "アウトバウンド",
"OutboundSubscriptions": "アウトバウンドサブスクリプション",
"OutboundSubscriptionsDesc": "リモートのサブスクリプションURLvmess/vless/trojan/ss/...)からアウトバウンドをインポートします。タグはバランサーやルーティングルールで使えるように安定して保持されます。更新は自動的に行われます。",
"Balancers": "負荷分散",
"balancerTagRequired": "タグは必須です",
"balancerSelectorRequired": "アウトバウンドを少なくとも1つ選んでください",
@@ -1520,9 +1395,7 @@
"routeTesterMatchedOutbound": "マッチしたアウトバウンド",
"routeTesterViaBalancer": "バランサー経由",
"routeTesterDefaultOutbound": "ルーティングルールに一致しませんでした — トラフィックはデフォルト(最初の)アウトバウンドに送られます。",
"OutboundsDesc": "アウトバウンドトラフィックの送信方法を設定する",
"Routings": "ルーティングルール",
"RoutingsDesc": "各ルールの優先順位が重要です",
"completeTemplate": "すべて",
"logLevel": "ログレベル",
"logLevelDesc": "エラーログのレベルを指定し、記録する情報を示します",
@@ -1536,13 +1409,9 @@
"maskAddressDesc": "IPアドレスをマスクし、有効にするとログに表示されるIPアドレスを自動的に置き換えます",
"statistics": "統計",
"statsInboundUplink": "インバウンドアップロード統計",
"statsInboundUplinkDesc": "すべてのインバウンドプロキシのアップストリームトラフィックの統計収集を有効にします。",
"statsInboundDownlink": "インバウンドダウンロード統計",
"statsInboundDownlinkDesc": "すべてのインバウンドプロキシのダウンストリームトラフィックの統計収集を有効にします。",
"statsOutboundUplink": "アウトバウンドアップロード統計",
"statsOutboundUplinkDesc": "すべてのアウトバウンドプロキシのアップストリームトラフィックの統計収集を有効にします。",
"statsOutboundDownlink": "アウトバウンドダウンロード統計",
"statsOutboundDownlinkDesc": "すべてのアウトバウンドプロキシのダウンストリームトラフィックの統計収集を有効にします。",
"connectionLimits": "接続制限",
"connectionLimitsDesc": "ユーザーレベル0の接続レベルのポリシーです。フィールドを空のままにすると Xray のデフォルト値が使用されます。",
"connIdle": "アイドルタイムアウト",
@@ -1552,18 +1421,10 @@
"bufferSizePlaceholder": "自動",
"seconds": "秒",
"rules": {
"first": "最初",
"last": "最後",
"up": "上へ",
"down": "下へ",
"source": "ソース",
"dest": "宛先アドレス",
"inbound": "インバウンド",
"outbound": "アウトバウンド",
"balancer": "負荷分散",
"info": "情報",
"add": "ルール追加",
"edit": "ルール編集",
"useComma": "カンマ区切りの項目"
},
"routing": {
@@ -1604,7 +1465,6 @@
"ruleN": "ルール {n}",
"action": "アクション",
"redirect": "Redirect",
"fragment": "Fragment",
"finalRules": "最終ルール",
"overrideXrayPrivateIp": "Xray のデフォルトプライベート IP ブロックを上書き",
"blockDelay": "ブロック遅延 (ms)",
@@ -1630,43 +1490,17 @@
"keepAliveInterval": "keep alive 間隔",
"markFwmark": "Mark (fwmark)",
"interface": "インターフェース",
"ipv6Only": "IPv6 のみ",
"acceptProxyProtocol": "proxy protocol を受け入れる",
"proxyProtocol": "Proxy protocol",
"tcpUserTimeoutMs": "TCP user timeout (ms)",
"tcpKeepAliveIdleS": "TCP keep-alive idle (秒)"
},
"outbound": {
"addOutbound": "アウトバウンド追加",
"addReverse": "リバース追加",
"editOutbound": "アウトバウンド編集",
"editReverse": "リバース編集",
"reverseTag": "リバースタグ",
"reverseTagDesc": "VLESSシンプルリバースプロキシのアウトバウンドタグ。無効にするには空欄にしてください。",
"reverseTagPlaceholder": "アウトバウンドタグ(空欄で無効)",
"tag": "タグ",
"tagDesc": "一意のタグ",
"address": "アドレス",
"egress": "Egress",
"egressHint": "Run an HTTP test to show egress IP and country.",
"reverse": "リバース",
"domain": "ドメイン",
"type": "タイプ",
"bridge": "Bridge",
"portal": "Portal",
"link": "リンク",
"intercon": "インターコネクション",
"settings": "設定",
"accountInfo": "アカウント情報",
"outboundStatus": "アウトバウンドステータス",
"sendThrough": "送信経路",
"targetStrategy": "ターゲット解決戦略",
"test": "テスト",
"testResult": "テスト結果",
"testing": "接続をテスト中...",
"testSuccess": "テスト成功",
"testFailed": "テスト失敗",
"testError": "アウトバウンドのテストに失敗しました",
"modeRealDelay": "実際の遅延",
"testModeTooltip": "TCP: 高速 dial-only プローブ。HTTP: xray を経由した完全リクエスト。実際の遅延: 接続確立を含む合計時間。",
"testAll": "すべてテスト",
@@ -1674,14 +1508,10 @@
"breakdownConnect": "プロキシ接続",
"breakdownTls": "アウトバウンド経由のTLS",
"breakdownTtfb": "最初のバイト",
"nordvpn": "NordVPN",
"accessToken": "アクセストークン",
"country": "国",
"server": "サーバー",
"city": "都市",
"allCities": "すべての都市",
"privateKey": "秘密鍵",
"load": "負荷",
"moveToTop": "先頭に移動"
},
"outboundSub": {
@@ -1711,16 +1541,11 @@
"active": "有効なサブスクリプション",
"empty": "サブスクリプションはまだありません。上から追加してください。",
"colRemark": "備考",
"colPrefix": "プレフィックス",
"colInterval": "間隔",
"colLastFetch": "最終取得",
"colEnabled": "有効",
"auto": "自動",
"never": "なし",
"yes": "はい",
"no": "いいえ",
"refreshNow": "今すぐ更新",
"lastError": "最後のエラー",
"deleteConfirm": "このサブスクリプションを削除しますか?",
"restartHint": "追加または更新した後、アウトバウンドを有効にするにはXrayを再起動してください(または次の自動リロードをお待ちください)。",
"fromSubsTitle": "アウトバウンドサブスクリプションから(読み取り専用)",
@@ -1737,8 +1562,6 @@
"tabBalancerSettings": "バランサー設定",
"tabObservatory": "オブザーバトリ",
"observatory": {
"title": "オブザーバトリ",
"burstTitle": "バースト オブザーバトリ",
"autoManaged": "オブザーバはバランサーから自動的に管理されます。プローブの方法は下で調整できます。監視対象のアウトバウンドはバランサーのセレクターに従います。",
"emptyHint": "有効な接続オブザーバはありません。Least Ping または Least Load のバランサー、あるいは fallback 付きの Random / Round-robin バランサーを作成すると自動的に追加され、オブザーバを使うバランサーがターゲットを選ぶ前にアウトバウンドの健全性を確認できるようになります。",
"mixedLegacy": "この設定には Observatory と Burst Observatory の両方が含まれています。Xray は単一のグローバルオブザーバを使用するため、この古い混在状態はサポートされません。バランサーを保存すると 1 つのオブザーバに正規化されます。",
@@ -1772,12 +1595,8 @@
"balancerRemoved": "バランサー {tag} — 削除(対象が残っていません)"
},
"balancer": {
"addBalancer": "負荷分散追加",
"editBalancer": "負荷分散編集",
"balancerStrategy": "戦略",
"balancerSelectors": "セレクター",
"tag": "タグ",
"tagDesc": "一意のタグ",
"tagDuplicate": "このタグは他のバランサーで使用されています",
"tagPlaceholder": "一意のバランサータグ",
"selector": "セレクター",
@@ -1789,7 +1608,6 @@
"tolerance": "許容範囲",
"baselines": "Baselines",
"costs": "Costs",
"balancerDesc": "balancerTagとoutboundTagは同時に使用できません。同時に使用された場合、outboundTagのみが有効になります。",
"costMatch": "タグパターン",
"costValue": "重み",
"costRegexp": "正規表現で一致",
@@ -1804,14 +1622,10 @@
"publicKey": "公開鍵",
"allowedIPs": "許可されたIP",
"endpoint": "エンドポイント",
"psk": "共有キー",
"domainStrategy": "ドメイン戦略"
},
"tun": {
"nameDesc": "TUN インターフェースの名前。デフォルトは 'xray0' です",
"mtuDesc": "最大伝送単位。データパケットの最大サイズ。デフォルトは 1500 です",
"userLevel": "ユーザーレベル",
"userLevelDesc": "このインバウンドを通じて確立されたすべての接続は、このユーザーレベルを使用します。デフォルトは 0 です"
"userLevel": "ユーザーレベル"
},
"nord": {
"accessToken": "Access token",
@@ -1896,7 +1710,6 @@
},
"fakedns": {
"add": "フェイクDNS追加",
"edit": "フェイクDNS編集",
"ipPool": "IPプールサブネット",
"poolSize": "プールサイズ"
},
@@ -2032,7 +1845,6 @@
"add": "追加",
"month": "月",
"months": "ヶ月",
"day": "日",
"days": "日間",
"hours": "時間",
"minutes": "分",
@@ -2071,7 +1883,6 @@
"userSaved": "✅ Telegramユーザーが保存されました。",
"loginSuccess": "✅ パネルに正常にログインしました。\r\n",
"loginFailed": "❗️ パネルのログインに失敗しました。\r\n",
"2faFailed": "2FAエラー",
"report": "🕰 定期報告:{{ .RunTime }}\r\n",
"datetime": "⏰ 日時:{{ .DateTime }}\r\n",
"hostname": "💻 ホスト: {{ .Hostname }}\r\n",
@@ -2104,7 +1915,6 @@
"download": "🔽 ダウンロード: ↓{{ .Download }}\r\n",
"total": "📊 合計: ↑↓{{ .UpDown }} / {{ .Total }}\r\n",
"TGUser": "👤 Telegramユーザー:{{ .TelegramID }}\r\n",
"exhaustedMsg": "🚨 消耗済みの {{ .Type }}\r\n",
"exhaustedCount": "🚨 消耗済みの {{ .Type }} 数量:\r\n",
"onlinesCount": "🌐 オンラインクライアント:{{ .Count }}\r\n",
"disabled": "🛑 無効化:{{ .Disabled }}\r\n",
@@ -2113,16 +1923,10 @@
"refreshedOn": "\r\n📋🔄 更新時間:{{ .Time }}\r\n\r\n",
"yes": "✅ はい",
"no": "❌ いいえ",
"received_id": "🔑📥 IDが更新されました。",
"received_password": "🔑📥 パスワードが更新されました。",
"received_email": "📧📥 メールが更新されました。",
"received_comment": "💬📥 コメントが更新されました。",
"id_prompt": "🔑 デフォルトID: {{ .ClientId }}\n\nIDを入力してください。",
"pass_prompt": "🔑 デフォルトパスワード: {{ .ClientPassword }}\n\nパスワードを入力してください。",
"email_prompt": "📧 デフォルトメール: {{ .ClientEmail }}\n\nメールを入力してください。",
"comment_prompt": "💬 デフォルトコメント: {{ .ClientComment }}\n\nコメントを入力してください。",
"inbound_client_data_id": "🔄 インバウンド: {{ .InboundRemark }}\n\n🔑 ID: {{ .ClientId }}\n📧 メール: {{ .ClientEmail }}\n📊 トラフィック: {{ .ClientTraffic }}\n📅 有効期限: {{ .ClientExp }}\n🌐 IP制限: {{ .IpLimit }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐこのクライアントをインバウンドに追加できます!",
"inbound_client_data_pass": "🔄 インバウンド: {{ .InboundRemark }}\n\n🔑 パスワード: {{ .ClientPass }}\n📧 メール: {{ .ClientEmail }}\n📊 トラフィック: {{ .ClientTraffic }}\n📅 有効期限: {{ .ClientExp }}\n🌐 IP制限: {{ .IpLimit }}\n💬 コメント: {{ .ClientComment }}\n\n今すぐこのクライアントをインバウンドに追加できます!",
"cancel": "❌ プロセスがキャンセルされました!\n\nいつでも /start で再開できます。 🔄",
"error_add_client": "⚠️ エラー:\n\n {{ .error }}",
"using_default_value": "わかりました、デフォルト値を使用します。 😊",
@@ -2139,8 +1943,6 @@
"eventXrayCrashError": "エラー: {{ .Error }}",
"eventNodeDown": "ノード {{ .Name }} がダウンしています",
"eventNodeUp": "ノード {{ .Name }} が復旧しました",
"eventCPUHigh": "CPU高負荷",
"eventCPUHighDetail": "CPU: {{ .Detail }}",
"eventLoginFallback": "{{ .Source }} からのログインに失敗しました",
"memoryThreshold": "メモリ使用率 {{ .Percent }}% がしきい値 {{ .Threshold }}% を超えました"
},
@@ -2181,11 +1983,8 @@
"submitDisable": "無効として送信 ☑️",
"submitEnable": "有効として送信 ✅",
"use_default": "🏷️ デフォルトを使用",
"change_id": "⚙️🔑 ID",
"change_password": "⚙️🔑 パスワード",
"change_email": "⚙️📧 メール",
"change_comment": "⚙️💬 コメント",
"change_flow": "⚙️🚦 Flow",
"ResetAllTraffics": "すべてのトラフィックをリセット",
"SortedTrafficUsageReport": "ソートされたトラフィック使用レポート"
},
@@ -2214,31 +2013,16 @@
}
},
"email": {
"subjectOutboundDown": "アウトバウンド {{ .Tag }} がダウンしています",
"subjectOutboundUp": "アウトバウンド {{ .Tag }} が復旧しました",
"subjectXrayCrash": "Xrayがクラッシュしました",
"subjectCPUHigh": "CPU高負荷",
"subjectLoginSuccess": "ログイン成功",
"subjectLoginFailed": "ログイン失敗",
"titleOutboundDown": "アウトバウンド ダウン",
"titleOutboundUp": "アウトバウンド 復旧",
"titleXrayCrash": "Xrayがクラッシュしました",
"titleCPUHigh": "CPU高負荷",
"titleLoginSuccess": "ログイン成功",
"titleLoginFailed": "ログイン失敗",
"labelStatus": "ステータス",
"labelOutbound": "アウトバウンド",
"labelNode": "ノード",
"labelError": "エラー",
"labelDelay": "遅延",
"labelDetail": "詳細",
"labelUsername": "ユーザー名",
"labelIP": "IP",
"labelReason": "理由",
"labelSource": "送信元",
"labelTime": "時刻",
"statusCrashed": "クラッシュ",
"statusRunning": "実行中",
"statusHigh": "高負荷",
"statusSuccess": "成功",
"statusFailed": "失敗",