From e71c8f48deb6b0ccd25f8c1b39c81c2ce1905952 Mon Sep 17 00:00:00 2001 From: Hinata Oishi <92960051+te19oishi@users.noreply.github.com> Date: Sat, 14 Feb 2026 15:46:22 +0900 Subject: [PATCH 1/3] feat(i18n): add Japanese language support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add comprehensive Japanese localization with translations for all UI components including authentication, chat interface, code editor, settings, sidebar, and task management features. - Add Japanese translation files for all modules (auth, chat, codeEditor, common, settings, sidebar, tasks) - Register Japanese language in i18n configuration - Extract English tasks translations to separate file for consistency - Update TaskList component to use i18n for task-related strings 🀖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/TaskList.jsx | 68 ++--- src/i18n/config.js | 21 +- src/i18n/languages.js | 5 + src/i18n/locales/en/tasks.json | 123 ++++++++ src/i18n/locales/ja/auth.json | 37 +++ src/i18n/locales/ja/chat.json | 205 ++++++++++++++ src/i18n/locales/ja/codeEditor.json | 30 ++ src/i18n/locales/ja/common.json | 222 +++++++++++++++ src/i18n/locales/ja/settings.json | 418 ++++++++++++++++++++++++++++ src/i18n/locales/ja/sidebar.json | 112 ++++++++ src/i18n/locales/ja/tasks.json | 123 ++++++++ 11 files changed, 1330 insertions(+), 34 deletions(-) create mode 100644 src/i18n/locales/en/tasks.json create mode 100644 src/i18n/locales/ja/auth.json create mode 100644 src/i18n/locales/ja/chat.json create mode 100644 src/i18n/locales/ja/codeEditor.json create mode 100644 src/i18n/locales/ja/common.json create mode 100644 src/i18n/locales/ja/settings.json create mode 100644 src/i18n/locales/ja/sidebar.json create mode 100644 src/i18n/locales/ja/tasks.json diff --git a/src/components/TaskList.jsx b/src/components/TaskList.jsx index 8e81de060..afee4634a 100644 --- a/src/components/TaskList.jsx +++ b/src/components/TaskList.jsx @@ -6,6 +6,7 @@ import CreateTaskModal from './CreateTaskModal'; import { useTaskMaster } from '../contexts/TaskMasterContext'; import Shell from './Shell'; import { api } from '../utils/api'; +import { useTranslation } from 'react-i18next'; const TaskList = ({ tasks = [], @@ -31,8 +32,9 @@ const TaskList = ({ const [showHelpGuide, setShowHelpGuide] = useState(false); const [isTaskMasterComplete, setIsTaskMasterComplete] = useState(false); const [showPRDDropdown, setShowPRDDropdown] = useState(false); - + const { projectTaskMaster, refreshProjects, refreshTasks, setCurrentProject } = useTaskMaster(); + const { t } = useTranslation('tasks'); // Close PRD dropdown when clicking outside useEffect(() => { @@ -236,26 +238,26 @@ const TaskList = ({

- TaskMaster AI is not configured + {t('notConfigured.title')}

- TaskMaster helps break down complex projects into manageable tasks with AI-powered assistance + {t('notConfigured.description')}

- + {/* What is TaskMaster section */}

- 🎯 What is TaskMaster? + {t('notConfigured.whatIsTitle')}

-

• AI-Powered Task Management: Break complex projects into manageable subtasks

-

• PRD Templates: Generate tasks from Product Requirements Documents

-

• Dependency Tracking: Understand task relationships and execution order

-

• Progress Visualization: Kanban boards and detailed task analytics

-

• CLI Integration: Use taskmaster commands for advanced workflows

+

• {t('notConfigured.features.aiPowered')}

+

• {t('notConfigured.features.prdTemplates')}

+

• {t('notConfigured.features.dependencyTracking')}

+

• {t('notConfigured.features.progressVisualization')}

+

• {t('notConfigured.features.cliIntegration')}

- + ) : ( @@ -276,8 +278,8 @@ const TaskList = ({
-

Getting Started with TaskMaster

-

TaskMaster is initialized! Here's what to do next:

+

{t('gettingStarted.title')}

+

{t('gettingStarted.subtitle')}

@@ -287,8 +289,8 @@ const TaskList = ({
1
-

Create a Product Requirements Document (PRD)

-

Discuss your project idea and create a PRD that describes what you want to build.

+

{t('gettingStarted.steps.createPRD.title')}

+

{t('gettingStarted.steps.createPRD.description')}

- + {/* Show existing PRDs if any */} {existingPRDs.length > 0 && (
-

Existing PRDs:

+

{t('gettingStarted.steps.createPRD.existingPRDs')}

{existingPRDs.map((prd) => (
@@ -350,8 +352,8 @@ const TaskList = ({
3
-

Analyze & Expand Tasks

-

Ask your AI assistant to analyze task complexity and expand them into detailed subtasks for easier implementation.

+

{t('gettingStarted.steps.analyzeTasks.title')}

+

{t('gettingStarted.steps.analyzeTasks.description')}

@@ -359,8 +361,8 @@ const TaskList = ({
4
-

Start Building

-

Ask your AI assistant to begin working on tasks, update their status, and add new tasks as your project evolves.

+

{t('gettingStarted.steps.startBuilding.title')}

+

{t('gettingStarted.steps.startBuilding.description')}

@@ -384,7 +386,7 @@ const TaskList = ({
- 💡 Tip: Start with a PRD to get the most out of TaskMaster's AI-powered task generation + {t('gettingStarted.tip')}
@@ -401,8 +403,8 @@ const TaskList = ({
-

TaskMaster Setup

-

Interactive CLI for {currentProject?.displayName}

+

{t('setupModal.title')}

+

{t('setupModal.subtitle', { projectName: currentProject?.displayName })}

diff --git a/src/i18n/config.js b/src/i18n/config.js index d947001f9..8e28f3b92 100644 --- a/src/i18n/config.js +++ b/src/i18n/config.js @@ -20,6 +20,7 @@ import enAuth from './locales/en/auth.json'; import enSidebar from './locales/en/sidebar.json'; import enChat from './locales/en/chat.json'; import enCodeEditor from './locales/en/codeEditor.json'; +import enTasks from './locales/en/tasks.json'; import koCommon from './locales/ko/common.json'; import koSettings from './locales/ko/settings.json'; @@ -35,6 +36,14 @@ import zhSidebar from './locales/zh-CN/sidebar.json'; import zhChat from './locales/zh-CN/chat.json'; import zhCodeEditor from './locales/zh-CN/codeEditor.json'; +import jaCommon from './locales/ja/common.json'; +import jaSettings from './locales/ja/settings.json'; +import jaAuth from './locales/ja/auth.json'; +import jaSidebar from './locales/ja/sidebar.json'; +import jaChat from './locales/ja/chat.json'; +import jaCodeEditor from './locales/ja/codeEditor.json'; +import jaTasks from './locales/ja/tasks.json'; + // Import supported languages configuration import { languages } from './languages.js'; @@ -66,6 +75,7 @@ i18n sidebar: enSidebar, chat: enChat, codeEditor: enCodeEditor, + tasks: enTasks, }, ko: { common: koCommon, @@ -83,6 +93,15 @@ i18n chat: zhChat, codeEditor: zhCodeEditor, }, + ja: { + common: jaCommon, + settings: jaSettings, + auth: jaAuth, + sidebar: jaSidebar, + chat: jaChat, + codeEditor: jaCodeEditor, + tasks: jaTasks, + }, }, // Default language @@ -95,7 +114,7 @@ i18n debug: import.meta.env.DEV, // Namespaces - load only what's needed - ns: ['common', 'settings', 'auth', 'sidebar', 'chat', 'codeEditor'], + ns: ['common', 'settings', 'auth', 'sidebar', 'chat', 'codeEditor', 'tasks'], defaultNS: 'common', // Key separator for nested keys (default: '.') diff --git a/src/i18n/languages.js b/src/i18n/languages.js index 318d560b1..9de7896ee 100644 --- a/src/i18n/languages.js +++ b/src/i18n/languages.js @@ -24,6 +24,11 @@ export const languages = [ label: 'Simplified Chinese', nativeName: '简䜓䞭文', }, + { + value: 'ja', + label: 'Japanese', + nativeName: '日本語', + }, ]; /** diff --git a/src/i18n/locales/en/tasks.json b/src/i18n/locales/en/tasks.json new file mode 100644 index 000000000..f7a3cec36 --- /dev/null +++ b/src/i18n/locales/en/tasks.json @@ -0,0 +1,123 @@ +{ + "notConfigured": { + "title": "TaskMaster AI is not configured", + "description": "TaskMaster helps break down complex projects into manageable tasks with AI-powered assistance", + "whatIsTitle": "🎯 What is TaskMaster?", + "features": { + "aiPowered": "AI-Powered Task Management: Break complex projects into manageable subtasks", + "prdTemplates": "PRD Templates: Generate tasks from Product Requirements Documents", + "dependencyTracking": "Dependency Tracking: Understand task relationships and execution order", + "progressVisualization": "Progress Visualization: Kanban boards and detailed task analytics", + "cliIntegration": "CLI Integration: Use taskmaster commands for advanced workflows" + }, + "initializeButton": "Initialize TaskMaster AI" + }, + "gettingStarted": { + "title": "Getting Started with TaskMaster", + "subtitle": "TaskMaster is initialized! Here's what to do next:", + "steps": { + "createPRD": { + "title": "Create a Product Requirements Document (PRD)", + "description": "Discuss your project idea and create a PRD that describes what you want to build.", + "addButton": "Add PRD", + "existingPRDs": "Existing PRDs:" + }, + "generateTasks": { + "title": "Generate Tasks from PRD", + "description": "Once you have a PRD, ask your AI assistant to parse it and TaskMaster will automatically break it down into manageable tasks with implementation details." + }, + "analyzeTasks": { + "title": "Analyze & Expand Tasks", + "description": "Ask your AI assistant to analyze task complexity and expand them into detailed subtasks for easier implementation." + }, + "startBuilding": { + "title": "Start Building", + "description": "Ask your AI assistant to begin working on tasks, update their status, and add new tasks as your project evolves." + } + }, + "tip": "💡 Tip: Start with a PRD to get the most out of TaskMaster's AI-powered task generation" + }, + "setupModal": { + "title": "TaskMaster Setup", + "subtitle": "Interactive CLI for {{projectName}}", + "willStart": "TaskMaster initialization will start automatically", + "completed": "TaskMaster setup completed! You can now close this window.", + "closeButton": "Close", + "closeContinueButton": "Close & Continue" + }, + "helpGuide": { + "title": "Getting Started with TaskMaster", + "subtitle": "Your guide to productive task management", + "examples": { + "parsePRD": "💬 Example:\n\"I've just initialized a new project with Claude Task Master. I have a PRD at .taskmaster/docs/prd.txt. Can you help me parse it and set up the initial tasks?\"", + "expandTask": "💬 Example:\n\"Task 5 seems complex. Can you break it down into subtasks?\"", + "addTask": "💬 Example:\n\"Please add a new task to implement user profile image uploads using Cloudinary, research the best approach.\"" + }, + "moreExamples": "View more examples and usage patterns →", + "proTips": { + "title": "💡 Pro Tips", + "search": "Use the search bar to quickly find specific tasks", + "views": "Switch between Kanban, List, and Grid views using the view toggles", + "filters": "Use filters to focus on specific task statuses or priorities", + "details": "Click on any task to view detailed information and manage subtasks" + }, + "learnMore": { + "title": "📚 Learn More", + "description": "TaskMaster AI is an advanced task management system built for developers. Get documentation, examples, and contribute to the project.", + "githubButton": "View on GitHub" + } + }, + "searchPlaceholder": "Search tasks...", + "filters": { + "button": "Filters", + "status": "Status", + "priority": "Priority", + "sortBy": "Sort By", + "allStatuses": "All Statuses", + "allPriorities": "All Priorities", + "showing": "Showing {{filtered}} of {{total}} tasks", + "clearFilters": "Clear Filters" + }, + "sort": { + "id": "ID", + "status": "Status", + "priority": "Priority", + "idAsc": "ID (Ascending)", + "idDesc": "ID (Descending)", + "titleAsc": "Title (A-Z)", + "titleDesc": "Title (Z-A)", + "statusAsc": "Status (Pending First)", + "statusDesc": "Status (Done First)", + "priorityAsc": "Priority (High First)", + "priorityDesc": "Priority (Low First)" + }, + "views": { + "kanban": "Kanban view", + "list": "List view", + "grid": "Grid view" + }, + "kanban": { + "pending": "📋 To Do", + "inProgress": "🚀 In Progress", + "done": "✅ Done", + "blocked": "🚫 Blocked", + "deferred": "⏳ Deferred", + "cancelled": "❌ Cancelled", + "noTasksYet": "No tasks yet", + "tasksWillAppear": "Tasks will appear here", + "moveTasksHere": "Move tasks here when started", + "completedTasksHere": "Completed tasks appear here", + "statusTasksHere": "Tasks with this status will appear here" + }, + "buttons": { + "help": "TaskMaster Getting Started Guide", + "prds": "PRDs", + "addPRD": "Add PRD", + "addTask": "Add Task", + "createNewPRD": "Create New PRD" + }, + "noMatchingTasks": { + "title": "No tasks match your filters", + "description": "Try adjusting your search or filter criteria." + } +} diff --git a/src/i18n/locales/ja/auth.json b/src/i18n/locales/ja/auth.json new file mode 100644 index 000000000..ce9464976 --- /dev/null +++ b/src/i18n/locales/ja/auth.json @@ -0,0 +1,37 @@ +{ + "login": { + "title": "おかえりなさい", + "description": "Claude Code UIアカりントにサむンむン", + "username": "ナヌザヌ名", + "password": "パスワヌド", + "submit": "サむンむン", + "loading": "サむンむン䞭...", + "errors": { + "invalidCredentials": "ナヌザヌ名たたはパスワヌドが正しくありたせん", + "requiredFields": "すべおの項目を入力しおください", + "networkError": "ネットワヌク゚ラヌ。もう䞀床お詊しください。" + }, + "placeholders": { + "username": "ナヌザヌ名を入力", + "password": "パスワヌドを入力" + } + }, + "register": { + "title": "アカりント䜜成", + "username": "ナヌザヌ名", + "password": "パスワヌド", + "confirmPassword": "パスワヌドの確認", + "submit": "アカりントを䜜成", + "loading": "アカりントを䜜成䞭...", + "errors": { + "passwordMismatch": "パスワヌドが䞀臎したせん", + "usernameTaken": "このナヌザヌ名は既に䜿甚されおいたす", + "weakPassword": "パスワヌドが匱すぎたす" + } + }, + "logout": { + "title": "サむンアりト", + "confirm": "サむンアりトしおもよろしいですか", + "button": "サむンアりト" + } +} diff --git a/src/i18n/locales/ja/chat.json b/src/i18n/locales/ja/chat.json new file mode 100644 index 000000000..0d81a1add --- /dev/null +++ b/src/i18n/locales/ja/chat.json @@ -0,0 +1,205 @@ +{ + "codeBlock": { + "copy": "コピヌ", + "copied": "コピヌしたした", + "copyCode": "コヌドをコピヌ" + }, + "messageTypes": { + "user": "U", + "error": "゚ラヌ", + "tool": "ツヌル", + "claude": "Claude", + "cursor": "Cursor", + "codex": "Codex" + }, + "tools": { + "settings": "ツヌル蚭定", + "error": "ツヌル゚ラヌ", + "result": "ツヌル結果", + "viewParams": "入力パラメヌタを衚瀺", + "viewRawParams": "生パラメヌタを衚瀺", + "viewDiff": "線集差分を衚瀺:", + "creatingFile": "新芏ファむルを䜜成:", + "updatingTodo": "Todoリストを曎新䞭", + "read": "読み取り", + "readFile": "ファむルを読み取り", + "updateTodo": "Todoリストを曎新", + "readTodo": "Todoリストを読み取り", + "searchResults": "件の結果" + }, + "search": { + "found": "{{count}}件の{{type}}が芋぀かりたした", + "file": "ファむル", + "files": "ファむル", + "pattern": "パタヌン:", + "in": "堎所:" + }, + "fileOperations": { + "updated": "ファむルを曎新したした", + "created": "ファむルを䜜成したした", + "written": "ファむルを曞き蟌みたした", + "diff": "差分", + "newFile": "新芏ファむル", + "viewContent": "ファむルの内容を衚瀺", + "viewFullOutput": "党出力を衚瀺{{count}}文字", + "contentDisplayed": "ファむルの内容は䞊の差分ビュヌに衚瀺されおいたす" + }, + "interactive": { + "title": "むンタラクティブプロンプト", + "waiting": "CLIでの応答を埅っおいたす", + "instruction": "Claudeが実行されおいるタヌミナルでオプションを遞択しおください。", + "selectedOption": "✓ Claudeがオプション{{number}}を遞択したした", + "instructionDetail": "CLIでは、矢印キヌたたは番号を入力しおオプションを遞択したす。" + }, + "thinking": { + "title": "思考䞭...", + "emoji": "💭 思考䞭..." + }, + "json": { + "response": "JSONレスポンス" + }, + "permissions": { + "grant": "{{tool}}に暩限を付䞎", + "added": "暩限を远加したした", + "addTo": "{{entry}}を蚱可されたツヌルに远加したす。", + "retry": "暩限を保存したした。ツヌルを䜿甚するにはリク゚ストを再詊行しおください。", + "error": "暩限を曎新できたせんでした。もう䞀床お詊しください。", + "openSettings": "蚭定を開く" + }, + "todo": { + "updated": "Todoリストを曎新したした", + "current": "珟圚のTodoリスト" + }, + "plan": { + "viewPlan": "📋 実装プランを衚瀺", + "title": "実装プラン" + }, + "usageLimit": { + "resetAt": "Claudeの䜿甚制限に達したした。制限は**{{time}} {{timezone}}** - {{date}}にリセットされたす" + }, + "codex": { + "permissionMode": "暩限モヌド", + "modes": { + "default": "デフォルトモヌド", + "acceptEdits": "線集を蚱可", + "bypassPermissions": "暩限をバむパス", + "plan": "プランモヌド" + }, + "descriptions": { + "default": "信頌されたコマンドls、cat、grep、git statusなどのみ自動実行。その他のコマンドはスキップ。ワヌクスペヌスぞの曞き蟌みは可胜。", + "acceptEdits": "ワヌクスペヌス内ですべおのコマンドを自動実行。サンドボックス環境での完党自動モヌド。", + "bypassPermissions": "制限なしの完党なシステムアクセス。すべおのコマンドがディスクずネットワヌクぞの完党なアクセスで自動実行されたす。泚意しお䜿甚しおください。", + "plan": "プランニングモヌド - コマンドは実行されたせん" + }, + "technicalDetails": "技術的な詳现" + }, + "input": { + "placeholder": "/ でコマンド、@ でファむル指定、たたは {{provider}} に䜕でも聞いおください...", + "placeholderDefault": "メッセヌゞを入力...", + "disabled": "入力無効", + "attachFiles": "ファむルを添付", + "attachImages": "画像を添付", + "send": "送信", + "stop": "停止", + "hintText": { + "ctrlEnter": "Ctrl+Enterで送信 • Shift+Enterで改行 • Tabでモヌド切替 • / でスラッシュコマンド", + "enter": "Enterで送信 • Shift+Enterで改行 • Tabでモヌド切替 • / でスラッシュコマンド" + }, + "clickToChangeMode": "クリックで暩限モヌドを倉曎たたは入力欄でTab", + "showAllCommands": "すべおのコマンドを衚瀺" + }, + "thinkingMode": { + "selector": { + "title": "思考モヌド", + "description": "拡匵思考によりClaudeがより倚くの遞択肢を怜蚎できたす", + "active": "有効", + "tip": "高い思考モヌドは時間がかかりたすが、より深い分析が埗られたす" + }, + "modes": { + "none": { + "name": "暙準", + "description": "通垞のClaudeの応答", + "prefix": "" + }, + "think": { + "name": "Think", + "description": "基本的な拡匵思考", + "prefix": "think" + }, + "thinkHard": { + "name": "Think Hard", + "description": "より深い怜蚎", + "prefix": "think hard" + }, + "thinkHarder": { + "name": "Think Harder", + "description": "代替案を含む深い分析", + "prefix": "think harder" + }, + "ultrathink": { + "name": "Ultrathink", + "description": "最倧限の思考予算", + "prefix": "ultrathink" + } + }, + "buttonTitle": "思考モヌド: {{mode}}" + }, + "providerSelection": { + "title": "AIアシスタントを遞択", + "description": "新しい䌚話を始めるプロバむダヌを遞択しおください", + "selectModel": "モデルを遞択", + "providerInfo": { + "anthropic": "by Anthropic", + "openai": "by OpenAI", + "cursorEditor": "AIコヌド゚ディタ" + }, + "readyPrompt": { + "claude": "{{model}}でClaudeを䜿甚する準備ができたした。䞋にメッセヌゞを入力しおください。", + "cursor": "{{model}}でCursorを䜿甚する準備ができたした。䞋にメッセヌゞを入力しおください。", + "codex": "{{model}}でCodexを䜿甚する準備ができたした。䞋にメッセヌゞを入力しおください。", + "default": "䞊からプロバむダヌを遞択しお開始しおください" + } + }, + "session": { + "continue": { + "title": "䌚話を続ける", + "description": "コヌドに぀いお質問したり、倉曎をリク゚ストしたり、開発タスクのサポヌトを受けられたす" + }, + "loading": { + "olderMessages": "過去のメッセヌゞを読み蟌んでいたす...", + "sessionMessages": "セッションメッセヌゞを読み蟌んでいたす..." + }, + "messages": { + "showingOf": "{{total}}ä»¶äž­{{shown}}件を衚瀺", + "scrollToLoad": "䞊にスクロヌルしおさらに読み蟌む", + "showingLast": "最新{{count}}件を衚瀺党{{total}}件", + "loadEarlier": "過去のメッセヌゞを読み蟌む" + } + }, + "shell": { + "selectProject": { + "title": "プロゞェクトを遞択", + "description": "プロゞェクトを遞択しおそのディレクトリでシェルを開きたす" + }, + "status": { + "newSession": "新しいセッション", + "initializing": "初期化䞭...", + "restarting": "再起動䞭..." + }, + "actions": { + "disconnect": "切断", + "disconnectTitle": "シェルから切断", + "restart": "再起動", + "restartTitle": "シェルを再起動先に切断しおください", + "connect": "シェルで続行", + "connectTitle": "シェルに接続" + }, + "loading": "タヌミナルを読み蟌んでいたす...", + "connecting": "シェルに接続しおいたす...", + "startSession": "新しいClaudeセッションを開始", + "resumeSession": "セッションを再開: {{displayName}}...", + "runCommand": "{{projectName}}で{{command}}を実行", + "startCli": "{{projectName}}でClaude CLIを起動しおいたす", + "defaultCommand": "コマンド" + } +} diff --git a/src/i18n/locales/ja/codeEditor.json b/src/i18n/locales/ja/codeEditor.json new file mode 100644 index 000000000..cee637354 --- /dev/null +++ b/src/i18n/locales/ja/codeEditor.json @@ -0,0 +1,30 @@ +{ + "toolbar": { + "changes": "件の倉曎", + "previousChange": "前の倉曎", + "nextChange": "次の倉曎", + "hideDiff": "差分ハむラむトを非衚瀺", + "showDiff": "差分ハむラむトを衚瀺", + "settings": "゚ディタ蚭定", + "collapse": "゚ディタを折りたたむ", + "expand": "゚ディタを党幅に展開" + }, + "loading": "{{fileName}}を読み蟌んでいたす...", + "header": { + "showingChanges": "倉曎を衚瀺䞭" + }, + "actions": { + "download": "ファむルをダりンロヌド", + "save": "保存", + "saving": "保存䞭...", + "saved": "保存したした", + "exitFullscreen": "党画面を終了", + "fullscreen": "党画面", + "close": "閉じる" + }, + "footer": { + "lines": "行数:", + "characters": "文字数:", + "shortcuts": "Ctrl+Sで保存 • Escで閉じる" + } +} diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json new file mode 100644 index 000000000..7a101ebd8 --- /dev/null +++ b/src/i18n/locales/ja/common.json @@ -0,0 +1,222 @@ +{ + "buttons": { + "save": "保存", + "cancel": "キャンセル", + "delete": "削陀", + "create": "䜜成", + "edit": "線集", + "close": "閉じる", + "confirm": "確認", + "submit": "送信", + "retry": "再詊行", + "refresh": "曎新", + "search": "怜玢", + "clear": "クリア", + "copy": "コピヌ", + "download": "ダりンロヌド", + "upload": "アップロヌド", + "browse": "参照" + }, + "tabs": { + "chat": "チャット", + "shell": "シェル", + "files": "ファむル", + "git": "゜ヌス管理", + "tasks": "タスク" + }, + "status": { + "loading": "読み蟌み䞭...", + "success": "成功", + "error": "゚ラヌ", + "failed": "倱敗", + "pending": "保留䞭", + "completed": "完了", + "inProgress": "進行䞭" + }, + "messages": { + "savedSuccessfully": "保存したした", + "deletedSuccessfully": "削陀したした", + "updatedSuccessfully": "曎新したした", + "operationFailed": "操䜜に倱敗したした", + "networkError": "ネットワヌク゚ラヌ。接続を確認しおください。", + "unauthorized": "認蚌されおいたせん。ログむンしおください。", + "notFound": "芋぀かりたせん", + "invalidInput": "入力が無効です", + "requiredField": "この項目は必須です", + "unknownError": "䞍明な゚ラヌが発生したした" + }, + "navigation": { + "settings": "蚭定", + "home": "ホヌム", + "back": "戻る", + "next": "次ぞ", + "previous": "前ぞ", + "logout": "ログアりト" + }, + "common": { + "language": "蚀語", + "theme": "テヌマ", + "darkMode": "ダヌクモヌド", + "lightMode": "ラむトモヌド", + "name": "名前", + "description": "説明", + "enabled": "有効", + "disabled": "無効", + "optional": "任意", + "version": "バヌゞョン", + "select": "遞択", + "selectAll": "すべお遞択", + "deselectAll": "すべお解陀" + }, + "time": { + "justNow": "たった今", + "minutesAgo": "{{count}}分前", + "hoursAgo": "{{count}}時間前", + "daysAgo": "{{count}}日前", + "yesterday": "昚日" + }, + "fileOperations": { + "newFile": "新芏ファむル", + "newFolder": "新芏フォルダ", + "rename": "名前の倉曎", + "move": "移動", + "copyPath": "パスをコピヌ", + "openInEditor": "゚ディタで開く" + }, + "mainContent": { + "loading": "Claude Code UI を読み蟌んでいたす", + "settingUpWorkspace": "ワヌクスペヌスを準備しおいたす...", + "chooseProject": "プロゞェクトを遞択", + "selectProjectDescription": "サむドバヌからプロゞェクトを遞択しお、Claudeずコヌディングを始めたしょう。各プロゞェクトにはチャットセッションずファむル履歎が含たれおいたす。", + "tip": "ヒント", + "createProjectMobile": "䞊郚のメニュヌボタンからプロゞェクトにアクセスできたす", + "createProjectDesktop": "サむドバヌのフォルダアむコンをクリックしお新しいプロゞェクトを䜜成できたす", + "newSession": "新しいセッション", + "untitledSession": "無題のセッション", + "projectFiles": "プロゞェクトファむル" + }, + "fileTree": { + "loading": "ファむルを読み蟌んでいたす...", + "files": "ファむル", + "simpleView": "シンプル衚瀺", + "compactView": "コンパクト衚瀺", + "detailedView": "詳现衚瀺", + "searchPlaceholder": "ファむルやフォルダを怜玢...", + "clearSearch": "怜玢をクリア", + "name": "名前", + "size": "サむズ", + "modified": "曎新日時", + "permissions": "暩限", + "noFilesFound": "ファむルが芋぀かりたせん", + "checkProjectPath": "プロゞェクトのパスがアクセス可胜か確認しおください", + "noMatchesFound": "䞀臎するものが芋぀かりたせん", + "tryDifferentSearch": "別の怜玢語を詊すか、怜玢をクリアしおください", + "justNow": "たった今", + "minAgo": "{{count}}分前", + "hoursAgo": "{{count}}時間前", + "daysAgo": "{{count}}日前" + }, + "projectWizard": { + "title": "新芏プロゞェクトを䜜成", + "steps": { + "type": "皮類", + "configure": "蚭定", + "confirm": "確認" + }, + "step1": { + "question": "既存のワヌクスペヌスがありたすかそれずも新しく䜜成したすか", + "existing": { + "title": "既存のワヌクスペヌス", + "description": "サヌバヌ䞊に既存のワヌクスペヌスがあり、プロゞェクト䞀芧に远加したい" + }, + "new": { + "title": "新しいワヌクスペヌス", + "description": "新しいワヌクスペヌスを䜜成し、必芁に応じおGitHubリポゞトリからクロヌンする" + } + }, + "step2": { + "existingPath": "ワヌクスペヌスのパス", + "newPath": "ワヌクスペヌスのパス", + "existingPlaceholder": "/path/to/existing/workspace", + "newPlaceholder": "/path/to/new/workspace", + "existingHelp": "既存のワヌクスペヌスディレクトリのフルパス", + "newHelp": "ワヌクスペヌスディレクトリのフルパス", + "githubUrl": "GitHub URL任意", + "githubPlaceholder": "https://github.com/username/repository", + "githubHelp": "任意: リポゞトリをクロヌンするためのGitHub URLを入力しおください", + "githubAuth": "GitHub認蚌任意", + "githubAuthHelp": "プラむベヌトリポゞトリの堎合のみ必芁です。パブリックリポゞトリは認蚌なしでクロヌンできたす。", + "loadingTokens": "保存枈みトヌクンを読み蟌んでいたす...", + "storedToken": "保存枈みトヌクン", + "newToken": "新しいトヌクン", + "nonePublic": "なしパブリック", + "selectToken": "トヌクンを遞択", + "selectTokenPlaceholder": "-- トヌクンを遞択 --", + "tokenPlaceholder": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "tokenHelp": "このトヌクンはこの操䜜にのみ䜿甚されたす", + "publicRepoInfo": "パブリックリポゞトリには認蚌は䞍芁です。パブリックリポゞトリをクロヌンする堎合、トヌクンは省略できたす。", + "noTokensHelp": "保存枈みトヌクンがありたせん。蚭定 → APIキヌでトヌクンを远加するず再利甚が簡単になりたす。", + "optionalTokenPublic": "GitHubトヌクンパブリックリポゞトリの堎合は任意", + "tokenPublicPlaceholder": "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxパブリックリポゞトリの堎合は空欄可" + }, + "step3": { + "reviewConfig": "蚭定の確認", + "workspaceType": "ワヌクスペヌスの皮類:", + "existingWorkspace": "既存のワヌクスペヌス", + "newWorkspace": "新しいワヌクスペヌス", + "path": "パス:", + "cloneFrom": "クロヌン元:", + "authentication": "認蚌:", + "usingStoredToken": "保存枈みトヌクンを䜿甚:", + "usingProvidedToken": "入力されたトヌクンを䜿甚", + "noAuthentication": "認蚌なし", + "sshKey": "SSHキヌ", + "existingInfo": "ワヌクスペヌスがプロゞェクト䞀芧に远加され、Claude/Cursorセッションで䜿甚できるようになりたす。", + "newWithClone": "このフォルダからリポゞトリがクロヌンされたす。", + "newEmpty": "ワヌクスペヌスがプロゞェクト䞀芧に远加され、Claude/Cursorセッションで䜿甚できるようになりたす。", + "cloningRepository": "リポゞトリをクロヌンしおいたす..." + }, + "buttons": { + "cancel": "キャンセル", + "back": "戻る", + "next": "次ぞ", + "createProject": "プロゞェクトを䜜成", + "creating": "䜜成䞭...", + "cloning": "クロヌン䞭..." + }, + "errors": { + "selectType": "既存のワヌクスペヌスか新芏䜜成かを遞択しおください", + "providePath": "ワヌクスペヌスのパスを入力しおください", + "failedToCreate": "ワヌクスペヌスの䜜成に倱敗したした", + "failedToCreateFolder": "フォルダの䜜成に倱敗したした" + } + }, + "versionUpdate": { + "title": "アップデヌトのお知らせ", + "newVersionReady": "新しいバヌゞョンが利甚可胜です", + "currentVersion": "珟圚のバヌゞョン", + "latestVersion": "最新バヌゞョン", + "whatsNew": "倉曎点:", + "viewFullRelease": "リリヌス党文を芋る", + "updateProgress": "アップデヌトの進捗:", + "manualUpgrade": "手動アップグレヌド:", + "manualUpgradeHint": "たたは「今すぐ曎新」をクリックしお自動的にアップデヌトを実行できたす。", + "updateCompleted": "アップデヌトが完了したした", + "restartServer": "倉曎を適甚するにはサヌバヌを再起動しおください。", + "updateFailed": "アップデヌトに倱敗したした", + "buttons": { + "close": "閉じる", + "later": "埌で", + "copyCommand": "コマンドをコピヌ", + "updateNow": "今すぐ曎新", + "updating": "曎新䞭..." + }, + "ariaLabels": { + "closeModal": "バヌゞョンアップグレヌドモヌダルを閉じる", + "showSidebar": "サむドバヌを衚瀺", + "settings": "蚭定", + "updateAvailable": "アップデヌトあり", + "closeSidebar": "サむドバヌを閉じる" + } + } +} diff --git a/src/i18n/locales/ja/settings.json b/src/i18n/locales/ja/settings.json new file mode 100644 index 000000000..e3304b301 --- /dev/null +++ b/src/i18n/locales/ja/settings.json @@ -0,0 +1,418 @@ +{ + "title": "蚭定", + "tabs": { + "account": "アカりント", + "permissions": "暩限", + "mcpServers": "MCPサヌバヌ", + "appearance": "倖芳" + }, + "account": { + "title": "アカりント", + "language": "蚀語", + "languageLabel": "衚瀺蚀語", + "languageDescription": "むンタヌフェヌスの衚瀺蚀語を遞択しおください", + "username": "ナヌザヌ名", + "email": "メヌルアドレス", + "profile": "プロフィヌル", + "changePassword": "パスワヌドを倉曎" + }, + "mcp": { + "title": "MCPサヌバヌ", + "addServer": "サヌバヌを远加", + "editServer": "サヌバヌを線集", + "deleteServer": "サヌバヌを削陀", + "serverName": "サヌバヌ名", + "serverType": "サヌバヌの皮類", + "config": "蚭定", + "testConnection": "接続テスト", + "status": "状態", + "connected": "接続枈み", + "disconnected": "未接続", + "scope": { + "label": "スコヌプ", + "user": "ナヌザヌ", + "project": "プロゞェクト" + } + }, + "appearance": { + "title": "倖芳", + "theme": "テヌマ", + "codeEditor": "コヌド゚ディタ", + "editorTheme": "゚ディタのテヌマ", + "wordWrap": "折り返し", + "showMinimap": "ミニマップを衚瀺", + "lineNumbers": "行番号", + "fontSize": "フォントサむズ" + }, + "actions": { + "saveChanges": "倉曎を保存", + "resetToDefaults": "デフォルトに戻す", + "cancelChanges": "倉曎をキャンセル" + }, + "quickSettings": { + "title": "クむック蚭定", + "sections": { + "appearance": "倖芳", + "toolDisplay": "ツヌル衚瀺", + "viewOptions": "衚瀺オプション", + "inputSettings": "入力蚭定", + "whisperDictation": "Whisper音声入力" + }, + "darkMode": "ダヌクモヌド", + "autoExpandTools": "ツヌルを自動展開", + "showRawParameters": "生パラメヌタを衚瀺", + "showThinking": "思考を衚瀺", + "autoScrollToBottom": "自動スクロヌル", + "sendByCtrlEnter": "Ctrl+Enterで送信", + "sendByCtrlEnterDescription": "有効にするず、Enterではなく Ctrl+Enter でメッセヌゞを送信したす。IMEナヌザヌの誀送信防止に䟿利です。", + "dragHandle": { + "dragging": "ドラッグ䞭", + "closePanel": "蚭定パネルを閉じる", + "openPanel": "蚭定パネルを開く", + "draggingStatus": "ドラッグ䞭...", + "toggleAndMove": "クリックで切替、ドラッグで移動" + }, + "whisper": { + "modes": { + "default": "暙準モヌド", + "defaultDescription": "音声をそのたた文字起こししたす", + "prompt": "プロンプト匷化", + "promptDescription": "ラフなアむデアを明確で詳现なAIプロンプトに倉換したす", + "vibe": "バむブモヌド", + "vibeDescription": "アむデアを明確な゚ヌゞェント指瀺に敎圢したす" + } + } + }, + "mainTabs": { + "agents": "゚ヌゞェント", + "appearance": "倖芳", + "git": "Git", + "apiTokens": "API & トヌクン", + "tasks": "タスク" + }, + "appearanceSettings": { + "darkMode": { + "label": "ダヌクモヌド", + "description": "ラむトテヌマずダヌクテヌマを切り替えたす" + }, + "projectSorting": { + "label": "プロゞェクトの䞊び順", + "description": "サむドバヌでのプロゞェクトの䞊び順を蚭定したす", + "alphabetical": "アルファベット順", + "recentActivity": "最近のアクティビティ順" + }, + "codeEditor": { + "title": "コヌド゚ディタ", + "theme": { + "label": "゚ディタのテヌマ", + "description": "コヌド゚ディタのデフォルトテヌマ" + }, + "wordWrap": { + "label": "折り返し", + "description": "゚ディタでデフォルトで折り返しを有効にしたす" + }, + "showMinimap": { + "label": "ミニマップを衚瀺", + "description": "差分ビュヌでナビゲヌション甚のミニマップを衚瀺したす" + }, + "lineNumbers": { + "label": "行番号を衚瀺", + "description": "゚ディタに行番号を衚瀺したす" + }, + "fontSize": { + "label": "フォントサむズ", + "description": "゚ディタのフォントサむズピクセル" + } + } + }, + "mcpForm": { + "title": { + "add": "MCPサヌバヌを远加", + "edit": "MCPサヌバヌを線集" + }, + "importMode": { + "form": "フォヌム入力", + "json": "JSONむンポヌト" + }, + "scope": { + "label": "スコヌプ", + "userGlobal": "ナヌザヌグロヌバル", + "projectLocal": "プロゞェクトロヌカル", + "userDescription": "ナヌザヌスコヌプ: すべおのプロゞェクトで利甚可胜", + "projectDescription": "ロヌカルスコヌプ: 遞択したプロゞェクトでのみ利甚可胜", + "cannotChange": "既存のサヌバヌを線集する堎合、スコヌプは倉曎できたせん" + }, + "fields": { + "serverName": "サヌバヌ名", + "transportType": "トランスポヌトの皮類", + "command": "コマンド", + "arguments": "匕数1行に1぀", + "jsonConfig": "JSON蚭定", + "url": "URL", + "envVars": "環境倉数KEY=value、1行に1぀", + "headers": "ヘッダヌKEY=value、1行に1぀", + "selectProject": "プロゞェクトを遞択..." + }, + "placeholders": { + "serverName": "my-server" + }, + "validation": { + "missingType": "必須フィヌルドがありたせん: type", + "stdioRequiresCommand": "stdioタむプにはcommandフィヌルドが必芁です", + "httpRequiresUrl": "{{type}}タむプにはurlフィヌルドが必芁です", + "invalidJson": "無効なJSON圢匏です", + "jsonHelp": "MCPサヌバヌ蚭定をJSON圢匏で貌り付けおください。䟋:", + "jsonExampleStdio": "• stdio: {\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"@upstash/context7-mcp\"]}", + "jsonExampleHttp": "• http/sse: {\"type\":\"http\",\"url\":\"https://api.example.com/mcp\"}" + }, + "configDetails": "蚭定の詳现{{configFile}}より", + "projectPath": "パス: {{path}}", + "actions": { + "cancel": "キャンセル", + "saving": "保存䞭...", + "addServer": "サヌバヌを远加", + "updateServer": "サヌバヌを曎新" + } + }, + "saveStatus": { + "success": "蚭定を保存したした", + "error": "蚭定の保存に倱敗したした", + "saving": "保存䞭..." + }, + "footerActions": { + "save": "蚭定を保存", + "cancel": "キャンセル" + }, + "git": { + "title": "Git蚭定", + "description": "コミット甚のGit IDを蚭定したす。この蚭定は git config --global で適甚されたす", + "name": { + "label": "Git名前", + "help": "コミットに䜿甚する名前" + }, + "email": { + "label": "Gitメヌルアドレス", + "help": "コミットに䜿甚するメヌルアドレス" + }, + "actions": { + "save": "蚭定を保存", + "saving": "保存䞭..." + }, + "status": { + "success": "保存したした" + } + }, + "apiKeys": { + "title": "APIキヌ", + "description": "倖郚APIにアクセスするためのAPIキヌを生成したす。", + "newKey": { + "alertTitle": "⚠ APIキヌを保存しおください", + "alertMessage": "このキヌが衚瀺されるのは今回限りです。安党な堎所に保管しおください。", + "iveSavedIt": "保存したした" + }, + "form": { + "placeholder": "APIキヌの名前䟋: 本番サヌバヌ", + "createButton": "䜜成", + "cancelButton": "キャンセル" + }, + "newButton": "新しいAPIキヌ", + "empty": "APIキヌはただ䜜成されおいたせん。", + "list": { + "created": "䜜成日:", + "lastUsed": "最終䜿甚日:" + }, + "confirmDelete": "このAPIキヌを削陀しおもよろしいですか", + "status": { + "active": "有効", + "inactive": "無効" + }, + "github": { + "title": "GitHubトヌクン", + "description": "倖郚APIからプラむベヌトリポゞトリをクロヌンするためのGitHubパヌ゜ナルアクセストヌクンを远加したす。", + "descriptionAlt": "プラむベヌトリポゞトリをクロヌンするためのGitHubパヌ゜ナルアクセストヌクンを远加したす。保存せずにAPIリク゚ストで盎接トヌクンを枡すこずもできたす。", + "addButton": "トヌクンを远加", + "form": { + "namePlaceholder": "トヌクンの名前䟋: 個人リポゞトリ", + "tokenPlaceholder": "GitHubパヌ゜ナルアクセストヌクンghp_...", + "descriptionPlaceholder": "説明任意", + "addButton": "トヌクンを远加", + "cancelButton": "キャンセル", + "howToCreate": "GitHubパヌ゜ナルアクセストヌクンの䜜成方法 →" + }, + "empty": "GitHubトヌクンはただ远加されおいたせん。", + "added": "远加日:", + "confirmDelete": "このGitHubトヌクンを削陀しおもよろしいですか" + }, + "apiDocsLink": "APIドキュメント", + "documentation": { + "title": "倖郚APIドキュメント", + "description": "倖郚APIを䜿甚しおアプリケヌションからClaude/Cursorセッションを起動する方法を孊びたす。", + "viewLink": "APIドキュメントを芋る →" + }, + "loading": "読み蟌み䞭...", + "version": { + "updateAvailable": "アップデヌトあり: v{{version}}" + } + }, + "tasks": { + "checking": "TaskMasterのむンストヌルを確認しおいたす...", + "notInstalled": { + "title": "TaskMaster AI CLIがむンストヌルされおいたせん", + "description": "タスク管理機胜を䜿甚するにはTaskMaster CLIが必芁です。以䞋のコマンドでむンストヌルしおください:", + "installCommand": "npm install -g task-master-ai", + "viewOnGitHub": "GitHubで芋る", + "afterInstallation": "むンストヌル埌:", + "steps": { + "restart": "このアプリケヌションを再起動しおください", + "autoAvailable": "TaskMaster機胜が自動的に利甚可胜になりたす", + "initCommand": "プロゞェクトディレクトリで task-master init を実行しおください" + } + }, + "settings": { + "enableLabel": "TaskMaster統合を有効にする", + "enableDescription": "むンタヌフェヌス党䜓でTaskMasterのタスク、バナヌ、サむドバヌむンゞケヌタを衚瀺したす" + } + }, + "agents": { + "authStatus": { + "checking": "確認䞭...", + "connected": "接続枈み", + "notConnected": "未接続", + "disconnected": "切断", + "checkingAuth": "認蚌状態を確認しおいたす...", + "loggedInAs": "{{email}}でログむン䞭", + "authenticatedUser": "認蚌枈みナヌザヌ" + }, + "account": { + "claude": { + "description": "Anthropic Claude AIアシスタント" + }, + "cursor": { + "description": "Cursor AI搭茉コヌド゚ディタ" + }, + "codex": { + "description": "OpenAI Codex AIアシスタント" + } + }, + "connectionStatus": "接続状態", + "login": { + "title": "ログむン", + "reAuthenticate": "再認蚌", + "description": "{{agent}}アカりントにサむンむンしおAI機胜を有効にしたす", + "reAuthDescription": "別のアカりントでサむンむンするか、認蚌情報を曎新したす", + "button": "ログむン", + "reLoginButton": "再ログむン" + }, + "error": "゚ラヌ: {{error}}" + }, + "permissions": { + "title": "暩限蚭定", + "skipPermissions": { + "label": "暩限プロンプトをスキップ泚意しお䜿甚", + "claudeDescription": "--dangerously-skip-permissions フラグに盞圓", + "cursorDescription": "Cursor CLIの -f フラグに盞圓" + }, + "allowedTools": { + "title": "蚱可されたツヌル", + "description": "暩限の確認なしに自動的に蚱可されるツヌル", + "placeholder": "䟋: \"Bash(git log:*)\" たたは \"Write\"", + "quickAdd": "よく䜿うツヌルを远加:", + "empty": "蚱可されたツヌルはありたせん" + }, + "blockedTools": { + "title": "ブロックされたツヌル", + "description": "暩限の確認なしに自動的にブロックされるツヌル", + "placeholder": "䟋: \"Bash(rm:*)\"", + "empty": "ブロックされたツヌルはありたせん" + }, + "allowedCommands": { + "title": "蚱可されたシェルコマンド", + "description": "暩限の確認なしに自動的に蚱可されるシェルコマンド", + "placeholder": "䟋: \"Shell(ls)\" たたは \"Shell(git status)\"", + "quickAdd": "よく䜿うコマンドを远加:", + "empty": "蚱可されたコマンドはありたせん" + }, + "blockedCommands": { + "title": "ブロックされたシェルコマンド", + "description": "自動的にブロックされるシェルコマンド", + "placeholder": "䟋: \"Shell(rm -rf)\" たたは \"Shell(sudo)\"", + "empty": "ブロックされたコマンドはありたせん" + }, + "toolExamples": { + "title": "ツヌルパタヌンの䟋:", + "bashGitLog": "- すべおのgit logコマンドを蚱可", + "bashGitDiff": "- すべおのgit diffコマンドを蚱可", + "write": "- すべおのWriteツヌルの䜿甚を蚱可", + "bashRm": "- すべおのrmコマンドをブロック危険" + }, + "shellExamples": { + "title": "シェルコマンドの䟋:", + "ls": "- lsコマンドを蚱可", + "gitStatus": "- git statusを蚱可", + "npmInstall": "- npm installを蚱可", + "rmRf": "- 再垰的削陀をブロック" + }, + "codex": { + "permissionMode": "暩限モヌド", + "description": "Codexがファむルの倉曎やコマンドの実行を凊理する方法を制埡したす", + "modes": { + "default": { + "title": "デフォルト", + "description": "信頌されたコマンドls、cat、grep、git statusなどのみ自動実行。その他のコマンドはスキップ。ワヌクスペヌスぞの曞き蟌みは可胜。" + }, + "acceptEdits": { + "title": "線集を蚱可", + "description": "ワヌクスペヌス内ですべおのコマンドを自動実行。サンドボックス環境での完党自動モヌド。" + }, + "bypassPermissions": { + "title": "暩限をバむパス", + "description": "制限なしの完党なシステムアクセス。すべおのコマンドがディスクずネットワヌクぞの完党なアクセスで自動実行されたす。泚意しお䜿甚しおください。" + } + }, + "technicalDetails": "技術的な詳现", + "technicalInfo": { + "default": "sandboxMode=workspace-write, approvalPolicy=untrusted。信頌されたコマンド: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find-execなしなど。", + "acceptEdits": "sandboxMode=workspace-write, approvalPolicy=never。すべおのコマンドがプロゞェクトディレクトリ内で自動実行。", + "bypassPermissions": "sandboxMode=danger-full-access, approvalPolicy=never。完党なシステムアクセス。信頌された環境でのみ䜿甚しおください。", + "overrideNote": "チャットむンタヌフェヌスのモヌドボタンを䜿甚しおセッションごずに䞊曞きできたす。" + } + }, + "actions": { + "add": "远加" + } + }, + "mcpServers": { + "title": "MCPサヌバヌ", + "description": { + "claude": "Model Context Protocolサヌバヌは、Claudeに远加のツヌルやデヌタ゜ヌスを提䟛したす", + "cursor": "Model Context Protocolサヌバヌは、Cursorに远加のツヌルやデヌタ゜ヌスを提䟛したす", + "codex": "Model Context Protocolサヌバヌは、Codexに远加のツヌルやデヌタ゜ヌスを提䟛したす" + }, + "addButton": "MCPサヌバヌを远加", + "empty": "MCPサヌバヌは蚭定されおいたせん", + "serverType": "皮類", + "scope": { + "local": "ロヌカル", + "user": "ナヌザヌ" + }, + "config": { + "command": "コマンド", + "url": "URL", + "args": "匕数", + "environment": "環境倉数" + }, + "tools": { + "title": "ツヌル", + "count": "{{count}}:", + "more": "他{{count}}ä»¶" + }, + "actions": { + "edit": "サヌバヌを線集", + "delete": "サヌバヌを削陀" + }, + "help": { + "title": "Codex MCPに぀いお", + "description": "Codexはstdioベヌスのツヌルサヌバヌをサポヌトしおいたす。远加のツヌルやリ゜ヌスでCodexの機胜を拡匵するサヌバヌを远加できたす。" + } + } +} diff --git a/src/i18n/locales/ja/sidebar.json b/src/i18n/locales/ja/sidebar.json new file mode 100644 index 000000000..24ae81b78 --- /dev/null +++ b/src/i18n/locales/ja/sidebar.json @@ -0,0 +1,112 @@ +{ + "projects": { + "title": "プロゞェクト", + "newProject": "新芏プロゞェクト", + "deleteProject": "プロゞェクトを削陀", + "renameProject": "プロゞェクト名を倉曎", + "noProjects": "プロゞェクトが芋぀かりたせん", + "loadingProjects": "プロゞェクトを読み蟌んでいたす...", + "searchPlaceholder": "プロゞェクトを怜玢...", + "projectNamePlaceholder": "プロゞェクト名", + "starred": "お気に入り", + "all": "すべお", + "untitledSession": "無題のセッション", + "newSession": "新しいセッション", + "codexSession": "Codexセッション", + "fetchingProjects": "Claudeのプロゞェクトずセッションを取埗しおいたす", + "projects": "プロゞェクト", + "noMatchingProjects": "䞀臎するプロゞェクトがありたせん", + "tryDifferentSearch": "怜玢語を倉えおお詊しください", + "runClaudeCli": "プロゞェクトディレクトリでClaude CLIを実行しお始めたしょう" + }, + "app": { + "title": "Claude Code UI", + "subtitle": "AIコヌディングアシスタント" + }, + "sessions": { + "title": "セッション", + "newSession": "新しいセッション", + "deleteSession": "セッションを削陀", + "renameSession": "セッション名を倉曎", + "noSessions": "セッションはただありたせん", + "loadingSessions": "セッションを読み蟌んでいたす...", + "unnamed": "名称未蚭定", + "loading": "読み蟌み䞭...", + "showMore": "さらにセッションを衚瀺" + }, + "tooltips": { + "viewEnvironments": "環境を衚瀺", + "hideSidebar": "サむドバヌを隠す", + "createProject": "新しいプロゞェクトを䜜成", + "refresh": "プロゞェクトずセッションを曎新 (Ctrl+R)", + "renameProject": "プロゞェクト名を倉曎 (F2)", + "deleteProject": "空のプロゞェクトを削陀 (Delete)", + "addToFavorites": "お気に入りに远加", + "removeFromFavorites": "お気に入りから削陀", + "editSessionName": "セッション名を手動で線集", + "deleteSession": "このセッションを完党に削陀", + "save": "保存", + "cancel": "キャンセル" + }, + "navigation": { + "chat": "チャット", + "files": "ファむル", + "git": "Git", + "terminal": "タヌミナル", + "tasks": "タスク" + }, + "actions": { + "refresh": "曎新", + "settings": "蚭定", + "collapseAll": "すべお折りたたむ", + "expandAll": "すべお展開", + "cancel": "キャンセル", + "save": "保存", + "delete": "削陀", + "rename": "名前の倉曎" + }, + "status": { + "active": "アクティブ", + "inactive": "非アクティブ", + "thinking": "思考䞭...", + "error": "゚ラヌ", + "aborted": "äž­æ–­", + "unknown": "䞍明" + }, + "time": { + "justNow": "たった今", + "oneMinuteAgo": "1分前", + "minutesAgo": "{{count}}分前", + "oneHourAgo": "1時間前", + "hoursAgo": "{{count}}時間前", + "oneDayAgo": "1日前", + "daysAgo": "{{count}}日前" + }, + "messages": { + "deleteConfirm": "本圓に削陀したすか", + "renameSuccess": "名前を倉曎したした", + "deleteSuccess": "削陀したした", + "errorOccurred": "゚ラヌが発生したした", + "deleteSessionConfirm": "このセッションを削陀しおもよろしいですかこの操䜜は取り消せたせん。", + "deleteProjectConfirm": "この空のプロゞェクトを削陀しおもよろしいですかこの操䜜は取り消せたせん。", + "enterProjectPath": "プロゞェクトのパスを入力しおください", + "deleteSessionFailed": "セッションの削陀に倱敗したした。もう䞀床お詊しください。", + "deleteSessionError": "セッションの削陀で゚ラヌが発生したした。もう䞀床お詊しください。", + "deleteProjectFailed": "プロゞェクトの削陀に倱敗したした。もう䞀床お詊しください。", + "deleteProjectError": "プロゞェクトの削陀で゚ラヌが発生したした。もう䞀床お詊しください。", + "createProjectFailed": "プロゞェクトの䜜成に倱敗したした。もう䞀床お詊しください。", + "createProjectError": "プロゞェクトの䜜成で゚ラヌが発生したした。もう䞀床お詊しください。" + }, + "version": { + "updateAvailable": "アップデヌトあり" + }, + "deleteConfirmation": { + "deleteProject": "プロゞェクトを削陀", + "deleteSession": "セッションを削陀", + "confirmDelete": "本圓に削陀したすか", + "sessionCount_one": "このプロゞェクトには{{count}}件の䌚話がありたす。", + "sessionCount_other": "このプロゞェクトには{{count}}件の䌚話がありたす。", + "allConversationsDeleted": "すべおの䌚話が完党に削陀されたす。", + "cannotUndo": "この操䜜は取り消せたせん。" + } +} diff --git a/src/i18n/locales/ja/tasks.json b/src/i18n/locales/ja/tasks.json new file mode 100644 index 000000000..59a8d3e50 --- /dev/null +++ b/src/i18n/locales/ja/tasks.json @@ -0,0 +1,123 @@ +{ + "notConfigured": { + "title": "TaskMaster AIが蚭定されおいたせん", + "description": "TaskMasterは、AIを掻甚した支揎により、耇雑なプロゞェクトを管理しやすいタスクに分解するのに圹立ちたす", + "whatIsTitle": "🎯 TaskMasterずは", + "features": { + "aiPowered": "AIを掻甚したタスク管理耇雑なプロゞェクトを管理しやすいサブタスクに分解", + "prdTemplates": "PRDテンプレヌトProduct Requirements Documentからタスクを生成", + "dependencyTracking": "䟝存関係の远跡タスクの関係性ず実行順序を理解", + "progressVisualization": "進捗の可芖化カンバンボヌドず詳现なタスク分析", + "cliIntegration": "CLI統合高床なワヌクフロヌのためにtaskmasterコマンドを䜿甚" + }, + "initializeButton": "TaskMaster AIを初期化" + }, + "gettingStarted": { + "title": "TaskMasterを始める", + "subtitle": "TaskMasterが初期化されたした次にするこずは:", + "steps": { + "createPRD": { + "title": "Product Requirements Document (PRD) を䜜成", + "description": "プロゞェクトのアむデアに぀いお話し合い、構築したい内容を説明するPRDを䜜成したす。", + "addButton": "PRDを远加", + "existingPRDs": "既存のPRD:" + }, + "generateTasks": { + "title": "PRDからタスクを生成", + "description": "PRDができたら、AIアシスタントに解析を䟝頌しおください。TaskMasterが自動的に実装の詳现を含む管理しやすいタスクに分解したす。" + }, + "analyzeTasks": { + "title": "タスクの分析ず展開", + "description": "AIアシスタントにタスクの耇雑さを分析しおもらい、より簡単に実装できる詳现なサブタスクに展開したす。" + }, + "startBuilding": { + "title": "開発を始める", + "description": "AIアシスタントにタスクの䜜業を開始しおもらい、ステヌタスを曎新し、プロゞェクトの進行に応じお新しいタスクを远加したす。" + } + }, + "tip": "💡 ヒントTaskMasterのAIを掻甚したタスク生成を最倧限に掻甚するには、PRDから始めたしょう" + }, + "setupModal": { + "title": "TaskMasterのセットアップ", + "subtitle": "{{projectName}}のむンタラクティブCLI", + "willStart": "TaskMasterの初期化が自動的に開始されたす", + "completed": "TaskMasterのセットアップが完了したしたこのりィンドりを閉じるこずができたす。", + "closeButton": "閉じる", + "closeContinueButton": "閉じお続ける" + }, + "helpGuide": { + "title": "TaskMasterを始める", + "subtitle": "生産的なタスク管理のガむド", + "examples": { + "parsePRD": "💬 䟋\n「Claude Task Masterで新しいプロゞェクトを初期化したした。.taskmaster/docs/prd.txtにPRDがありたす。解析しお初期タスクを蚭定するのを手䌝っおもらえたすか」", + "expandTask": "💬 䟋\n「タスク5は耇雑そうです。サブタスクに分解しおもらえたすか」", + "addTask": "💬 䟋\n「Cloudinaryを䜿甚しおナヌザヌプロフィヌル画像のアップロヌドを実装する新しいタスクを远加しおください。最適なアプロヌチを調査しおください。」" + }, + "moreExamples": "さらなる䟋ず䜿甚パタヌンを芋る →", + "proTips": { + "title": "💡 プロのヒント", + "search": "怜玢バヌを䜿甚しお特定のタスクをすばやく芋぀ける", + "views": "ビュヌ切替を䜿甚しおカンバン、リスト、グリッドビュヌを切り替える", + "filters": "フィルタヌを䜿甚しお特定のタスクステヌタスや優先床に焊点を圓おる", + "details": "任意のタスクをクリックしお詳现情報を衚瀺し、サブタスクを管理する" + }, + "learnMore": { + "title": "📚 詳现を芋る", + "description": "TaskMaster AIは開発者向けに構築された高床なタスク管理システムです。ドキュメント、䟋を入手し、プロゞェクトに貢献できたす。", + "githubButton": "GitHubで芋る" + } + }, + "searchPlaceholder": "タスクを怜玢...", + "filters": { + "button": "フィルタヌ", + "status": "ステヌタス", + "priority": "優先床", + "sortBy": "䞊び替え", + "allStatuses": "すべおのステヌタス", + "allPriorities": "すべおの優先床", + "showing": "{{filtered}}件のタスクを衚瀺䞭党{{total}}件", + "clearFilters": "フィルタヌをクリア" + }, + "sort": { + "id": "ID", + "status": "ステヌタス", + "priority": "優先床", + "idAsc": "ID昇順", + "idDesc": "ID降順", + "titleAsc": "タむトルA-Z", + "titleDesc": "タむトルZ-A", + "statusAsc": "ステヌタス保留䞭が先", + "statusDesc": "ステヌタス完了が先", + "priorityAsc": "優先床高が先", + "priorityDesc": "優先床䜎が先" + }, + "views": { + "kanban": "カンバンビュヌ", + "list": "リストビュヌ", + "grid": "グリッドビュヌ" + }, + "kanban": { + "pending": "📋 やるこず", + "inProgress": "🚀 進行䞭", + "done": "✅ 完了", + "blocked": "🚫 ブロック䞭", + "deferred": "⏳ 延期", + "cancelled": "❌ キャンセル", + "noTasksYet": "ただタスクはありたせん", + "tasksWillAppear": "タスクはここに衚瀺されたす", + "moveTasksHere": "開始したらタスクをここに移動", + "completedTasksHere": "完了したタスクはここに衚瀺されたす", + "statusTasksHere": "このステヌタスのタスクはここに衚瀺されたす" + }, + "buttons": { + "help": "TaskMaster入門ガむド", + "prds": "PRD", + "addPRD": "PRDを远加", + "addTask": "タスクを远加", + "createNewPRD": "新しいPRDを䜜成" + }, + "noMatchingTasks": { + "title": "フィルタヌに䞀臎するタスクがありたせん", + "description": "怜玢条件たたはフィルタヌ基準を調敎しおみおください。" + } +} From 072fd0f169be76b9d9db3ff2ec4757d719d32868 Mon Sep 17 00:00:00 2001 From: Hinata Oishi <92960051+te19oishi@users.noreply.github.com> Date: Sat, 14 Feb 2026 15:57:13 +0900 Subject: [PATCH 2/3] fix(i18n): complete TaskList.jsx internationalization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address CodeRabbit review feedback by completing i18n migration for all user-facing strings in TaskList component. Changes: - Replace all hardcoded English strings with t() calls in TaskList.jsx - Filter section labels (Status, Priority, Sort By) - Sort options (ID, Title, Status, Priority with directions) - Filter actions (showing count, clear filters) - Quick sort buttons - Kanban empty state messages - No matching tasks message - Help Guide modal (complete translation) - PRD-related labels and buttons - Restructure search translation key from 'searchPlaceholder' to 'search.placeholder' - Remove unnecessary Japanese plural form 'sessionCount_one' (Japanese has no plural distinction) All translation keys already exist in both en/tasks.json and ja/tasks.json. Fixes issues identified in CodeRabbit review. 🀖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/components/TaskList.jsx | 211 +++++++++++++++---------------- src/i18n/locales/en/tasks.json | 4 +- src/i18n/locales/ja/sidebar.json | 3 +- src/i18n/locales/ja/tasks.json | 4 +- 4 files changed, 111 insertions(+), 111 deletions(-) diff --git a/src/components/TaskList.jsx b/src/components/TaskList.jsx index afee4634a..8faa6881a 100644 --- a/src/components/TaskList.jsx +++ b/src/components/TaskList.jsx @@ -145,45 +145,45 @@ const TaskList = ({ // Organize tasks by status for Kanban view const kanbanColumns = useMemo(() => { const allColumns = [ - { - id: 'pending', - title: '📋 To Do', - status: 'pending', + { + id: 'pending', + title: t('kanban.pending'), + status: 'pending', color: 'bg-slate-50 dark:bg-slate-900/50 border-slate-200 dark:border-slate-700', headerColor: 'bg-slate-100 dark:bg-slate-800 text-slate-800 dark:text-slate-200' }, - { - id: 'in-progress', - title: '🚀 In Progress', - status: 'in-progress', + { + id: 'in-progress', + title: t('kanban.inProgress'), + status: 'in-progress', color: 'bg-blue-50 dark:bg-blue-900/50 border-blue-200 dark:border-blue-700', headerColor: 'bg-blue-100 dark:bg-blue-800 text-blue-800 dark:text-blue-200' }, - { - id: 'done', - title: '✅ Done', - status: 'done', + { + id: 'done', + title: t('kanban.done'), + status: 'done', color: 'bg-emerald-50 dark:bg-emerald-900/50 border-emerald-200 dark:border-emerald-700', headerColor: 'bg-emerald-100 dark:bg-emerald-800 text-emerald-800 dark:text-emerald-200' }, - { - id: 'blocked', - title: '🚫 Blocked', - status: 'blocked', + { + id: 'blocked', + title: t('kanban.blocked'), + status: 'blocked', color: 'bg-red-50 dark:bg-red-900/50 border-red-200 dark:border-red-700', headerColor: 'bg-red-100 dark:bg-red-800 text-red-800 dark:text-red-200' }, - { - id: 'deferred', - title: '⏳ Deferred', - status: 'deferred', + { + id: 'deferred', + title: t('kanban.deferred'), + status: 'deferred', color: 'bg-amber-50 dark:bg-amber-900/50 border-amber-200 dark:border-amber-700', headerColor: 'bg-amber-100 dark:bg-amber-800 text-amber-800 dark:text-amber-200' }, - { - id: 'cancelled', - title: '❌ Cancelled', - status: 'cancelled', + { + id: 'cancelled', + title: t('kanban.cancelled'), + status: 'cancelled', color: 'bg-gray-50 dark:bg-gray-900/50 border-gray-200 dark:border-gray-700', headerColor: 'bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200' } @@ -201,7 +201,7 @@ const TaskList = ({ ...column, tasks: filteredAndSortedTasks.filter(task => task.status === column.status) })); - }, [filteredAndSortedTasks]); + }, [filteredAndSortedTasks, t]); const handleSortChange = (newSortBy) => { if (sortBy === newSortBy) { @@ -378,7 +378,7 @@ const TaskList = ({ style={{ zIndex: 10 }} > - Add PRD + {t('buttons.addPRD')} @@ -512,7 +512,7 @@ const TaskList = ({ setSearchTerm(e.target.value)} className="pl-10 pr-4 py-2 w-full border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 text-gray-900 dark:text-white focus:ring-2 focus:ring-blue-500 focus:border-blue-500" @@ -531,7 +531,7 @@ const TaskList = ({ ? 'bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300' )} - title="Kanban view" + title={t('views.kanban')} > @@ -539,11 +539,11 @@ const TaskList = ({ onClick={() => setViewMode('list')} className={cn( 'p-2 rounded-md transition-colors', - viewMode === 'list' - ? 'bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm' + viewMode === 'list' + ? 'bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300' )} - title="List view" + title={t('views.list')} > @@ -551,11 +551,11 @@ const TaskList = ({ onClick={() => setViewMode('grid')} className={cn( 'p-2 rounded-md transition-colors', - viewMode === 'grid' - ? 'bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm' + viewMode === 'grid' + ? 'bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm' : 'text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300' )} - title="Grid view" + title={t('views.grid')} > @@ -572,7 +572,7 @@ const TaskList = ({ )} > - Filters + {t('filters.button')} @@ -583,7 +583,7 @@ const TaskList = ({ @@ -599,13 +599,13 @@ const TaskList = ({ title={`${existingPRDs.length} PRD${existingPRDs.length > 1 ? 's' : ''} available`} > - PRDs + {t('buttons.prds')} {existingPRDs.length}