mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-06 17:46:23 +00:00
♻️ refactor(channels): rebuild channel create/edit drawer with modular sections and improved form UX
Restructure the default-theme channel create/edit experience to align with classic frontend behavior, modern form UX patterns, and the project's Base UI design system. Channel editor architecture: - Split the monolithic channel mutate drawer into focused section components (basic, API access, auth, models, advanced) with shared drawer layout primitives - Extract submission, toast handling, and react-query cache invalidation into `useChannelMutateForm` - Add a dedicated loading skeleton for channel detail fetch during edit mode - Remove the top-level configuration summary block per UX feedback Form validation and data handling: - Strengthen `channel-form` Zod schema with JSON, model mapping, status code mapping, Codex credential, and Vertex AI key refinements - Move type-specific conditional validation into `superRefine` - Normalize base URL formatting and tighten model mapping value validation Model mapping editor: - Add Visual/JSON tabbed editing with inline JSON and duplicate-key feedback - Improve accessibility for icon-only actions and add model suggestion datalists MultiSelect component: - Replace the custom cmdk-based implementation with Base UI Combobox chips - Align focus, border, ring, disabled, and invalid states with standard Input styling via `ComboboxChips` - Preserve existing API (`options`, `selected`, `onChange`, `allowCreate`, `createLabel`) for all current callers - Support inline custom value creation, comma/newline batch input, searchable options, portal-based dropdown positioning, and chip removal Models & groups UX: - Integrate manual custom model entry directly into the model MultiSelect - Remove the separate manual model input/button block - Keep selected-model count and existing model-mapping guardrail behavior i18n: - Add and sync translation keys for new editor sections, validation messages, model mapping UI, and MultiSelect empty/create labels across en, zh, fr, ja, ru, and vi - Remove obsolete keys tied to the deprecated summary and manual model entry UI Affected areas: - `web/default/src/features/channels/components/drawers/` - `web/default/src/features/channels/hooks/use-channel-mutate-form.ts` - `web/default/src/features/channels/lib/channel-form.ts` - `web/default/src/features/channels/lib/model-mapping-validation.ts` - `web/default/src/features/channels/components/model-mapping-editor.tsx` - `web/default/src/components/multi-select.tsx` - `web/default/src/i18n/locales/*.json`
This commit is contained in:
Vendored
+33
-12
@@ -37,7 +37,6 @@
|
||||
"{{count}} IP(s)": "{{count}} IP",
|
||||
"{{count}} log entries removed.": "{{count}} 件のログエントリを削除しました。",
|
||||
"{{count}} minutes ago": "{{count}} 分前",
|
||||
"{{count}} model(s)": "{{count}} モデル",
|
||||
"{{count}} models": "{{count}} モデル",
|
||||
"{{count}} months ago": "{{count}} ヶ月前",
|
||||
"{{count}} override": "{{count}} 個のオーバーライド",
|
||||
@@ -135,6 +134,7 @@
|
||||
"Actual Model": "実際のモデル",
|
||||
"Actual Model:": "実際のモデル:",
|
||||
"Add": "追加",
|
||||
"Add \"{{value}}\"": "\"{{value}}\" を追加",
|
||||
"Add {{title}}": "{{title}}を追加",
|
||||
"Add a group identifier to the auto assignment list.": "自動割り当てリストにグループ識別子を追加します。",
|
||||
"Add a new API key by providing necessary info.": "必要な情報を提供して新しいAPIキーを追加。",
|
||||
@@ -152,7 +152,7 @@
|
||||
"Add condition": "条件を追加",
|
||||
"Add Condition": "条件を追加",
|
||||
"Add credits": "クレジットを追加",
|
||||
"Add custom model(s), comma-separated": "カスタムモデルを追加 (コンマ区切り)",
|
||||
"Add custom model \"{{value}}\"": "カスタムモデル「{{value}}」を追加",
|
||||
"Add discount tier": "割引ティアを追加",
|
||||
"Add each model or tag you want to include.": "含めたい各モデルまたはタグを追加。",
|
||||
"Add FAQ": "FAQ追加",
|
||||
@@ -164,6 +164,7 @@
|
||||
"Add group rules": "グループルールを追加",
|
||||
"Add Mapping": "マッピングを追加",
|
||||
"Add method": "メソッドを追加",
|
||||
"Add missing models": "不足しているモデルを追加",
|
||||
"Add Mode": "モードを追加",
|
||||
"Add model": "モデル追加",
|
||||
"Add Model": "モデルを追加",
|
||||
@@ -192,7 +193,6 @@
|
||||
"Add User": "ユーザーを追加",
|
||||
"Add user group": "ユーザーグループを追加",
|
||||
"Add your API keys, set up channels and configure access permissions": "APIキーを追加し、チャネルを設定してアクセス権限を構成します",
|
||||
"Added {{count}} custom model(s)": "{{count}} 個のカスタムモデルを追加しました",
|
||||
"Added {{count}} model(s)": "{{count}} 個のモデルを追加しました",
|
||||
"Added successfully": "追加に成功しました",
|
||||
"Additional Conditions": "追加条件",
|
||||
@@ -201,8 +201,8 @@
|
||||
"Additional Limit": "追加上限",
|
||||
"Additional Limits": "追加上限",
|
||||
"Additional metered capability": "追加の従量制機能",
|
||||
"Adjust Quota": "クォータを調整",
|
||||
"Adjust filters, then search to refresh the logs.": "フィルターを調整してから検索し、ログを更新します。",
|
||||
"Adjust Quota": "クォータを調整",
|
||||
"Adjust response formatting, prompt behavior, proxy, and upstream automation.": "レスポンス形式、プロンプト動作、プロキシ、上流自動化を調整します。",
|
||||
"Adjust the appearance and layout to suit your preferences.": "好みに合わせて外観とレイアウトを調整します。",
|
||||
"Admin": "管理者",
|
||||
@@ -424,6 +424,11 @@
|
||||
"Audio Tokens": "音声トークン",
|
||||
"Auth configured": "認証設定済み",
|
||||
"Auth Style": "認証スタイル",
|
||||
"auth.resetPasswordConfirm.backToLogin": "ログインに戻る",
|
||||
"auth.resetPasswordConfirm.confirm": "パスワードリセットを確認",
|
||||
"auth.resetPasswordConfirm.description": "新しいパスワードを生成するには、リセット要求を確認してください。",
|
||||
"auth.resetPasswordConfirm.retry": "再試行 ({{seconds}}秒)",
|
||||
"auth.resetPasswordConfirm.success": "パスワードが正常にリセットされました",
|
||||
"Authentication": "認証",
|
||||
"Authenticator code": "認証コード",
|
||||
"Authorization Endpoint": "認可エンドポイント",
|
||||
@@ -502,6 +507,7 @@
|
||||
"Base Price": "基本価格",
|
||||
"Base rate limit windows for this account.": "このアカウント向けの基本レート制限ウィンドウ。",
|
||||
"Base URL": "ベースURL",
|
||||
"Base URL is required for this channel type": "このチャンネルタイプには Base URL が必要です",
|
||||
"Base URL of your Uptime Kuma instance": "Uptime KumaインスタンスのベースURL",
|
||||
"Basic Authentication": "基本認証",
|
||||
"Basic Configuration": "基本設定",
|
||||
@@ -759,8 +765,10 @@
|
||||
"Codex": "Codex",
|
||||
"Codex Account & Usage": "Codex アカウントと使用量",
|
||||
"Codex Authorization": "Codex認証",
|
||||
"Codex channels do not support batch creation": "Codex チャンネルは一括作成をサポートしていません",
|
||||
"Codex channels use an OAuth JSON credential as the key.": "CodexチャンネルはOAuth JSON認証情報をキーとして使用します。",
|
||||
"Codex CLI Header Passthrough": "Codex CLI ヘッダーパススルー",
|
||||
"Codex credential must be a JSON object with access_token and account_id": "Codex 認証情報は access_token と account_id を含む JSON オブジェクトである必要があります",
|
||||
"Cohere": "Cohere",
|
||||
"Collapse": "折りたたむ",
|
||||
"Collapse All": "すべて折りたたむ",
|
||||
@@ -867,8 +875,6 @@
|
||||
"Confirm New Password": "新しいパスワードの確認",
|
||||
"Confirm password": "パスワードの確認",
|
||||
"Confirm Payment": "支払いの確認",
|
||||
"auth.resetPasswordConfirm.confirm": "パスワードリセットを確認",
|
||||
"auth.resetPasswordConfirm.description": "新しいパスワードを生成するには、リセット要求を確認してください。",
|
||||
"Confirm Selection": "選択の確認",
|
||||
"Confirm settings and finish setup": "設定を確認してセットアップを完了",
|
||||
"confirm that I bear legal responsibility arising from deployment": "デプロイに起因する法的責任を負うことを確認します",
|
||||
@@ -999,6 +1005,7 @@
|
||||
"Create, revoke, and audit API tokens.": "APIトークンを作成、取り消し、監査。",
|
||||
"Created": "作成済み",
|
||||
"Created At": "作成日時",
|
||||
"Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.": "保存済みストアに、このプランのタイトルと価格を使って Pancake 商品を作成します。事前に支払い設定で Waffo Pancake を完全に設定する必要があります。",
|
||||
"Creating...": "作成中...",
|
||||
"Creation failed": "作成に失敗しました",
|
||||
"Credential generated": "認証情報を生成しました",
|
||||
@@ -1122,6 +1129,7 @@
|
||||
"Delete invalid redemption codes": "無効な引き換えコードを削除",
|
||||
"Delete Invalid Redemption Codes?": "無効な引き換えコードを削除しますか?",
|
||||
"Delete logs": "ログを削除",
|
||||
"Delete mapping": "マッピングを削除",
|
||||
"Delete Model": "モデルを削除",
|
||||
"Delete Models?": "モデルを削除しますか?",
|
||||
"Delete Provider": "プロバイダーを削除",
|
||||
@@ -1249,6 +1257,8 @@
|
||||
"Drawing task records": "描画タスク記録",
|
||||
"Duplicate": "複製",
|
||||
"Duplicate group names: {{names}}": "重複するグループ名: {{names}}",
|
||||
"Duplicate source model mappings are not allowed": "重複したソースモデルのマッピングは許可されていません",
|
||||
"Duplicate source model(s): {{models}}": "重複したソースモデル: {{models}}",
|
||||
"Duration": "所要時間",
|
||||
"Duration (hours)": "期間(時間)",
|
||||
"Duration Settings": "有効期間設定",
|
||||
@@ -2177,6 +2187,7 @@
|
||||
"Load template...": "テンプレートをロード...",
|
||||
"Loader": "ローダー",
|
||||
"Loading": "読み込み中",
|
||||
"Loading channel details": "チャンネル詳細を読み込み中",
|
||||
"Loading configuration": "設定を読み込んでいます",
|
||||
"Loading content settings...": "コンテンツ設定をロード中...",
|
||||
"Loading current models...": "現在のモデルをロード中...",
|
||||
@@ -2293,7 +2304,6 @@
|
||||
"Minimum:": "最小:",
|
||||
"Minor blips in the last 30 days": "直近 30 日で軽微な障害あり",
|
||||
"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.": "下で新しいペアを作成するか、さらに下で既存のものを選択してください。準備ができたら保存をクリックします。",
|
||||
"Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.": "保存済みストアに、このプランのタイトルと価格を使って Pancake 商品を作成します。事前に支払い設定で Waffo Pancake を完全に設定する必要があります。",
|
||||
"Minute": "分",
|
||||
"minutes": "分",
|
||||
"Missing code": "コードが不足しています",
|
||||
@@ -2324,7 +2334,9 @@
|
||||
"Model Mapping": "モデルマッピング",
|
||||
"Model Mapping (JSON)": "モデルマッピング (JSON)",
|
||||
"Model Mapping must be a JSON object like": "モデルマッピングは次のようなJSONオブジェクトである必要があります",
|
||||
"Model mapping must be a JSON object with string values": "モデルマッピングは文字列値を持つ JSON オブジェクトである必要があります",
|
||||
"Model mapping must be valid JSON": "モデルマッピングは有効な JSON である必要があります",
|
||||
"Model mapping values must be strings": "モデルマッピングの値は文字列である必要があります",
|
||||
"Model name": "モデル名",
|
||||
"Model Name": "モデル名",
|
||||
"Model Name *": "モデル名 *",
|
||||
@@ -2333,8 +2345,8 @@
|
||||
"Model not found": "モデルが見つかりません",
|
||||
"Model performance metrics": "モデル性能メトリクス",
|
||||
"Model Price": "モデル価格",
|
||||
"Model Price Not Configured": "モデル価格が未設定",
|
||||
"Model price is not configured. Please complete model pricing in settings.": "モデル価格が未設定です。設定でモデル料金を補完してください。",
|
||||
"Model Price Not Configured": "モデル価格が未設定",
|
||||
"Model prices": "モデル価格",
|
||||
"Model prices reset successfully": "モデル価格が正常にリセットされました",
|
||||
"Model Pricing": "モデル料金",
|
||||
@@ -2532,6 +2544,7 @@
|
||||
"No Logs Found": "ログが見つかりません",
|
||||
"No mappings configured. Click \"Add Row\" to get started.": "マッピングが設定されていません。「行を追加」をクリックして開始してください。",
|
||||
"No matches found": "一致するものが見つかりません",
|
||||
"No matching items": "一致する項目がありません",
|
||||
"No matching results": "一致する結果がありません",
|
||||
"No matching rules": "一致するルールがありません",
|
||||
"No messages yet": "まだメッセージがありません",
|
||||
@@ -2950,6 +2963,7 @@
|
||||
"Please upload key file(s)": "キーファイルをアップロードしてください",
|
||||
"Please wait a moment before trying again.": "しばらく待ってからもう一度お試しください。",
|
||||
"Please wait a moment, human check is initializing...": "しばらくお待ちください、人間チェックを初期化中です...",
|
||||
"Please wait before editing to avoid overwriting saved values.": "保存済みの値を上書きしないよう、編集前に読み込み完了をお待ちください。",
|
||||
"Policy JSON": "ポリシーJSON",
|
||||
"Polling": "ポーリング",
|
||||
"Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded": "ポーリングモードにはRedisとメモリキャッシュが必要です。そうでない場合、パフォーマンスが大幅に低下します",
|
||||
@@ -2983,6 +2997,7 @@
|
||||
"Prepend to Start": "先頭に追加",
|
||||
"Prepend value to array / string / object start": "配列/文字列/オブジェクトの先頭に値を追加",
|
||||
"Preserve the original field when applying this rule": "このルール適用時に元のフィールドを保持します",
|
||||
"Preset groups": "プリセットグループ",
|
||||
"Preset recharge amounts (JSON array)": "プリセットチャージ金額 (JSON配列)",
|
||||
"Preset recharge amounts displayed to users": "ユーザーに表示されるプリセットチャージ金額",
|
||||
"Preset Template": "プリセットテンプレート",
|
||||
@@ -3098,6 +3113,7 @@
|
||||
"Querying...": "クエリ中...",
|
||||
"Question": "質問",
|
||||
"Queued": "キュー中",
|
||||
"Quick actions": "クイック操作",
|
||||
"Quick insert common payment methods": "一般的な支払い方法をすばやく挿入",
|
||||
"Quick Range": "クイック範囲",
|
||||
"Quick Setup from Preset": "プリセットからクイックセットアップ",
|
||||
@@ -3219,6 +3235,7 @@
|
||||
"Remaining:": "残り:",
|
||||
"Remark": "備考",
|
||||
"Remove": "削除",
|
||||
"Remove {{value}}": "{{value}} を削除",
|
||||
"Remove ${{amount}}": "${{amount}}を削除",
|
||||
"Remove all log entries created before the selected timestamp.": "選択したタイムスタンプより前に作成されたすべてのログエントリを削除します。",
|
||||
"Remove attachment": "添付ファイルを削除",
|
||||
@@ -3226,6 +3243,7 @@
|
||||
"Remove Duplicates": "重複を削除",
|
||||
"Remove filter": "フィルターを削除",
|
||||
"Remove functionResponse.id field": "functionResponse.id フィールドを削除",
|
||||
"Remove mapped targets": "マッピング先を削除",
|
||||
"Remove Models": "モデルを削除",
|
||||
"Remove Passkey": "Passkey連携解除",
|
||||
"Remove Passkey?": "Passkeyを削除しますか?",
|
||||
@@ -3329,7 +3347,6 @@
|
||||
"Retain last N files": "最新N個のファイルを保持",
|
||||
"Retention days": "保持日数",
|
||||
"Retry": "再試行",
|
||||
"auth.resetPasswordConfirm.retry": "再試行 ({{seconds}}秒)",
|
||||
"Retry Chain": "リトライチェーン",
|
||||
"Retry Suggestion": "リトライ提案",
|
||||
"Retry Times": "再試行回数",
|
||||
@@ -3339,7 +3356,6 @@
|
||||
"Return Error": "エラーを返す",
|
||||
"Return per-token log probabilities": "トークンごとの対数確率を返します",
|
||||
"Return to dashboard": "ダッシュボードに戻る",
|
||||
"auth.resetPasswordConfirm.backToLogin": "ログインに戻る",
|
||||
"Return vector embeddings for inputs": "入力に対してベクトル埋め込みを返却",
|
||||
"Reveal API key": "APIキーを表示",
|
||||
"Reveal key": "キーを表示",
|
||||
@@ -3491,7 +3507,6 @@
|
||||
"Select all (filtered)": "フィルタ結果をすべて選択(S)",
|
||||
"Select all models": "すべてのモデルを選択",
|
||||
"Select All Visible": "表示中のすべてを選択",
|
||||
"Select model {{model}}": "モデル {{model}} を選択",
|
||||
"Select an operation mode and enter the amount": "操作モードを選択し、金額を入力してください",
|
||||
"Select announcement type": "アナウンスメントタイプを選択",
|
||||
"Select at least one field to overwrite.": "上書きするフィールドを少なくとも 1 つ選択してください。",
|
||||
@@ -3518,6 +3533,7 @@
|
||||
"Select layout style": "レイアウトスタイルを選択",
|
||||
"Select locations": "ロケーションを選択",
|
||||
"Select Model": "モデルを選択",
|
||||
"Select model {{model}}": "モデル {{model}} を選択",
|
||||
"Select models (empty for allow all)": "モデルを選択 (すべて許可する場合は空)",
|
||||
"Select models and apply to channel models list.": "モデルを選択し、チャンネルモデルリストに適用します。",
|
||||
"Select models or add custom ones": "モデルを選択するか、カスタムモデルを追加",
|
||||
@@ -3547,6 +3563,7 @@
|
||||
"Select vendor": "ベンダーを選択",
|
||||
"Selectable groups": "選択可能なグループ",
|
||||
"selected": "選択済み",
|
||||
"Selected {{count}}": "{{count}} 件選択済み",
|
||||
"selected channel(s). Leave empty to remove tag.": "選択されたチャンネル。タグを削除するには空のままにしてください。",
|
||||
"Selected conflicts were overwritten successfully.": "選択した競合が正常に上書きされました。",
|
||||
"Selected when creating a token and used as the default billing group for API calls.": "トークン作成時に選択され、API 呼び出しのデフォルト課金グループとして使われます。",
|
||||
@@ -3690,6 +3707,7 @@
|
||||
"Status & Sync": "ステータスと同期",
|
||||
"Status Code": "ステータスコード",
|
||||
"Status Code Mapping": "ステータスコードマッピング",
|
||||
"Status code mapping must use valid HTTP status codes": "ステータスコードマッピングには有効な HTTP ステータスコードを使用する必要があります",
|
||||
"Status Page Slug": "ステータスページスラッグ",
|
||||
"Status short": "状態",
|
||||
"Status:": "ステータス:",
|
||||
@@ -3897,6 +3915,7 @@
|
||||
"This action will permanently remove 2FA protection from your account.": "この操作により、アカウントから2FA保護が完全に削除されます。",
|
||||
"This channel is not an Ollama channel.": "このチャンネルはOllamaチャンネルではありません。",
|
||||
"This channel type does not support fetching models": "このチャンネルタイプはモデルの取得をサポートしていません",
|
||||
"This channel type requires additional configuration": "このチャンネルタイプには追加設定が必要です",
|
||||
"This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.": "この確認により、支払い、引換コード、サブスクリプションプラン、招待報酬の機能が解除されます。各項目をよく読んでください。",
|
||||
"This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.": "これはモデルリクエストのレート制限を制御します。Web/API ルートのスロットリングは環境変数で設定され、引き続き 429 を返す場合があります。",
|
||||
"This data may be unreliable, use with caution": "このデータは信頼できない可能性があります。注意して使用してください",
|
||||
@@ -4215,6 +4234,7 @@
|
||||
"Use external tools to extend capabilities": "外部ツールを利用して機能を拡張",
|
||||
"Use our unified OpenAI-compatible endpoint in your applications": "アプリケーションでOpenAI互換の統一エンドポイントを使用",
|
||||
"Use Passkey to sign in without entering your password.": "パスワードを入力せずにサインインするには、パスキーを使用してください。",
|
||||
"Use presets or upstream discovery to populate the model list faster.": "プリセットまたは上流検出を使ってモデルリストをすばやく入力します。",
|
||||
"Use secure connection when sending emails": "メール送信時に安全な接続を使用する",
|
||||
"Use sidebar shortcut": "サイドバーのショートカットを使用",
|
||||
"Use the full-width table to scan prices, then select a row to edit it here.": "表で価格を確認し、行を選択してここで編集します。",
|
||||
@@ -4302,8 +4322,10 @@
|
||||
"Verifying credentials and pulling stores from your Pancake account...": "認証情報を検証し、Pancake アカウントからストアを取得しています...",
|
||||
"Version Overrides": "バージョンオーバーライド",
|
||||
"Vertex AI": "Vertex AI",
|
||||
"Vertex AI API Key mode does not support batch creation": "Vertex AI API Key モードは一括作成をサポートしていません",
|
||||
"Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.": "Vertex AI は functionResponse.id フィールドをサポートしません。有効にすると自動的に削除します。",
|
||||
"Vertex AI Key Format": "Vertex AIキー形式",
|
||||
"Vertex AI service account key must be valid JSON": "Vertex AI サービスアカウントキーは有効な JSON である必要があります",
|
||||
"Video": "動画",
|
||||
"Video length in seconds": "動画の長さ(秒)",
|
||||
"Video Remix": "動画 Remix",
|
||||
@@ -4466,7 +4488,6 @@
|
||||
"Your GitHub OAuth Client ID": "あなたのGitHub OAuthクライアントID",
|
||||
"Your GitHub OAuth Client Secret": "あなたのGitHub OAuthクライアントシークレット",
|
||||
"Your new backup codes are ready": "新しいバックアップコードの準備ができました",
|
||||
"auth.resetPasswordConfirm.success": "パスワードが正常にリセットされました",
|
||||
"Your Referral Link": "あなたの紹介リンク",
|
||||
"Your setup guide is collapsed so usage stays in focus.": "利用状況に集中できるよう、セットアップガイドを折りたたみました。",
|
||||
"Your system access token for API authentication. Keep it secure and don't share it with others.": "API認証用のシステムアクセストークンです。安全に保管し、他者と共有しないでください。",
|
||||
|
||||
Reference in New Issue
Block a user