|
6 | 6 | * 複数形などは、型安全に保つため文字列テンプレート関数として持つ。 |
7 | 7 | */ |
8 | 8 |
|
| 9 | +import type { ModelId } from './models'; |
| 10 | + |
9 | 11 | export type Lang = 'ja' | 'en'; |
10 | 12 |
|
11 | 13 | /** サポート言語の一覧(順序は UI での並びに使える)。 */ |
@@ -81,6 +83,21 @@ export interface Messages { |
81 | 83 | questionTitle: (index: number, total: number, header: string) => string; |
82 | 84 | questionHelp: (multiSelect: boolean) => string; |
83 | 85 | }; |
| 86 | + /** モデル選択ダイアログ(model-select.tsx。/model コマンドで開く) */ |
| 87 | + model: { |
| 88 | + /** ダイアログ見出し */ |
| 89 | + title: string; |
| 90 | + /** ダイアログ下部の操作ヒント */ |
| 91 | + help: string; |
| 92 | + /** 既定モデルに付ける「推奨」ラベル */ |
| 93 | + recommended: string; |
| 94 | + /** 選択確定後のフッタ通知(name は選んだモデルの表示名) */ |
| 95 | + saved: (name: string) => string; |
| 96 | + /** 選択肢の表示名(ブランド名。default のみ翻訳語) */ |
| 97 | + names: Record<ModelId, string>; |
| 98 | + /** 選択肢の説明文 */ |
| 99 | + descriptions: Record<ModelId, string>; |
| 100 | + }; |
84 | 101 | /** アプリ全体(index.tsx) */ |
85 | 102 | app: { |
86 | 103 | remainingWorktrees: (n: number) => string; |
@@ -120,6 +137,8 @@ export interface Messages { |
120 | 137 | help: string; |
121 | 138 | /** /quit の説明 */ |
122 | 139 | quit: string; |
| 140 | + /** /model の説明 */ |
| 141 | + model: string; |
123 | 142 | }; |
124 | 143 | } |
125 | 144 |
|
@@ -182,6 +201,26 @@ const ja: Messages = { |
182 | 201 | questionHelp: (multiSelect) => |
183 | 202 | `↑↓: 選択 ・ ${multiSelect ? 'Space: トグル ・ ' : ''}Enter: 決定`, |
184 | 203 | }, |
| 204 | + model: { |
| 205 | + title: 'モデルを選択', |
| 206 | + help: '↑↓: 選択 ・ Enter: 決定 ・ Esc: キャンセル', |
| 207 | + recommended: '推奨', |
| 208 | + saved: (name) => `モデルを ${name} に変更しました(以降の新規セッションに適用)`, |
| 209 | + names: { |
| 210 | + default: 'デフォルト', |
| 211 | + opus: 'Opus', |
| 212 | + fable: 'Fable', |
| 213 | + sonnet: 'Sonnet', |
| 214 | + haiku: 'Haiku', |
| 215 | + }, |
| 216 | + descriptions: { |
| 217 | + default: 'CLI 既定のモデルを使用', |
| 218 | + opus: 'Opus 4.8 ・ 日常的で複雑なタスクに最適', |
| 219 | + fable: 'Fable 5 ・ 最難関・長時間タスク向けの最上位', |
| 220 | + sonnet: 'Sonnet 5 ・ 日常タスクを効率的に', |
| 221 | + haiku: 'Haiku 4.5 ・ 手早い回答に最速', |
| 222 | + }, |
| 223 | + }, |
185 | 224 | app: { |
186 | 225 | remainingWorktrees: (n) => |
187 | 226 | `codiva: ${n} 個の worktree が残っています(作業内容は保持されます):`, |
@@ -209,6 +248,7 @@ const ja: Messages = { |
209 | 248 | unknown: (name) => (name ? `不明なコマンド: /${name}` : '不明なコマンドです'), |
210 | 249 | help: 'コマンド一覧を表示', |
211 | 250 | quit: 'codiva を終了', |
| 251 | + model: 'モデルを切り替え', |
212 | 252 | }, |
213 | 253 | }; |
214 | 254 |
|
@@ -271,6 +311,26 @@ const en: Messages = { |
271 | 311 | questionHelp: (multiSelect) => |
272 | 312 | `↑↓: select · ${multiSelect ? 'Space: toggle · ' : ''}Enter: confirm`, |
273 | 313 | }, |
| 314 | + model: { |
| 315 | + title: 'Select model', |
| 316 | + help: '↑↓: select · Enter: confirm · Esc: cancel', |
| 317 | + recommended: 'recommended', |
| 318 | + saved: (name) => `Model set to ${name} (applies to new sessions)`, |
| 319 | + names: { |
| 320 | + default: 'Default', |
| 321 | + opus: 'Opus', |
| 322 | + fable: 'Fable', |
| 323 | + sonnet: 'Sonnet', |
| 324 | + haiku: 'Haiku', |
| 325 | + }, |
| 326 | + descriptions: { |
| 327 | + default: 'Use the CLI default model', |
| 328 | + opus: 'Opus 4.8 · Best for everyday, complex tasks', |
| 329 | + fable: 'Fable 5 · Most capable for your hardest, longest tasks', |
| 330 | + sonnet: 'Sonnet 5 · Efficient for routine tasks', |
| 331 | + haiku: 'Haiku 4.5 · Fastest for quick answers', |
| 332 | + }, |
| 333 | + }, |
274 | 334 | app: { |
275 | 335 | remainingWorktrees: (n) => |
276 | 336 | `codiva: ${n} worktree${n === 1 ? '' : 's'} left in place (your work is preserved):`, |
@@ -298,6 +358,7 @@ const en: Messages = { |
298 | 358 | unknown: (name) => (name ? `Unknown command: /${name}` : 'Unknown command'), |
299 | 359 | help: 'Show available commands', |
300 | 360 | quit: 'Quit codiva', |
| 361 | + model: 'Switch the default model', |
301 | 362 | }, |
302 | 363 | }; |
303 | 364 |
|
|
0 commit comments