From 343096b82e43895906dcab45f55c420dea08f7e4 Mon Sep 17 00:00:00 2001 From: d-kimsuon Date: Sun, 26 Oct 2025 18:05:35 +0900 Subject: [PATCH] fix not found page --- package.json | 2 +- src/components/NotFound.tsx | 55 +++++++++++++++++++ src/lib/i18n/LinguiProvider.tsx | 8 +-- src/lib/i18n/index.ts | 39 +++++++------ src/lib/i18n/locales/en/messages.json | 53 ++++++++++++++++++ src/lib/i18n/locales/en/messages.ts | 2 +- src/lib/i18n/locales/ja/messages.json | 53 ++++++++++++++++++ src/lib/i18n/locales/ja/messages.ts | 2 +- src/main.tsx | 2 + .../projects/$projectId/latest/index.tsx | 15 +++++ .../$projectId/sessions/$sessionId/index.tsx | 15 +++++ 11 files changed, 221 insertions(+), 25 deletions(-) create mode 100644 src/components/NotFound.tsx diff --git a/package.json b/package.json index ae5c9cc..7af8996 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "e2e": "./scripts/e2e/exec_e2e.sh", "e2e:start-server": "./scripts/e2e/start_server.sh", "e2e:capture-snapshots": "./scripts/e2e/capture_snapshots.sh", - "lingui:extract": "lingui extract --clean", + "lingui:extract": "lingui extract", "lingui:compile": "lingui compile --typescript" }, "dependencies": { diff --git a/src/components/NotFound.tsx b/src/components/NotFound.tsx new file mode 100644 index 0000000..f47d817 --- /dev/null +++ b/src/components/NotFound.tsx @@ -0,0 +1,55 @@ +import { Trans } from "@lingui/react"; +import { FileQuestion, Home } from "lucide-react"; +import type { FC, ReactNode } from "react"; +import { Button } from "@/components/ui/button"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; + +interface NotFoundProps { + message?: ReactNode; + description?: ReactNode; +} + +export const NotFound: FC = ({ + message = , + description = ( + + ), +}) => { + return ( +
+ + +
+ +
+ {message} + {description} +
+
+
+ +
+ +
+
+
+
+ ); +}; diff --git a/src/lib/i18n/LinguiProvider.tsx b/src/lib/i18n/LinguiProvider.tsx index 6e669de..e674271 100644 --- a/src/lib/i18n/LinguiProvider.tsx +++ b/src/lib/i18n/LinguiProvider.tsx @@ -2,17 +2,13 @@ import { i18n } from "@lingui/core"; import { I18nProvider } from "@lingui/react"; import { type FC, type PropsWithChildren, useEffect } from "react"; import { useConfig } from "../../app/hooks/useConfig"; -import { i18nMessages } from "."; - -for (const { locale, messages } of i18nMessages) { - i18n.load(locale, messages); -} +import { activateLocale } from "."; export const LinguiClientProvider: FC = ({ children }) => { const { config } = useConfig(); useEffect(() => { - i18n.activate(config.locale); + void activateLocale(config.locale); }, [config.locale]); return {children}; diff --git a/src/lib/i18n/index.ts b/src/lib/i18n/index.ts index 78ff732..615fc29 100644 --- a/src/lib/i18n/index.ts +++ b/src/lib/i18n/index.ts @@ -1,20 +1,27 @@ -import type { Messages } from "@lingui/core"; -import { messages as enMessages } from "./locales/en/messages"; -import { messages as jaMessages } from "./locales/ja/messages"; +import { i18n } from "@lingui/core"; import type { SupportedLocale } from "./schema"; export const locales: SupportedLocale[] = ["ja", "en"]; -export const i18nMessages = [ - { - locale: "ja", - messages: jaMessages, - }, - { - locale: "en", - messages: enMessages, - }, -] as const satisfies Array<{ - locale: SupportedLocale; - messages: Messages; -}>; +const importMessages = async (locale: SupportedLocale) => { + switch (locale) { + case "ja": + return import("./locales/ja/messages"); + case "en": + return import("./locales/en/messages"); + default: + locale satisfies never; + throw new Error(`Unsupported locale: ${locale}`); + } +}; + +const loadedLocales: SupportedLocale[] = []; +export const activateLocale = async (locale: SupportedLocale) => { + if (!loadedLocales.includes(locale)) { + const { messages } = await importMessages(locale); + i18n.load(locale, messages); + loadedLocales.push(locale); + } + + i18n.activate(locale); +}; diff --git a/src/lib/i18n/locales/en/messages.json b/src/lib/i18n/locales/en/messages.json index 38dd640..c7cbfb1 100644 --- a/src/lib/i18n/locales/en/messages.json +++ b/src/lib/i18n/locales/en/messages.json @@ -1669,5 +1669,58 @@ "comments": [], "origin": [["src/components/SettingsControls.tsx", 281]], "translation": "日本語" + }, + "notfound.default.title": { + "message": "Page Not Found", + "placeholders": {}, + "comments": [], + "origin": [["src/components/NotFound.tsx", 19]], + "translation": "Page Not Found" + }, + "notfound.default.description": { + "message": "The page you are looking for does not exist or has been moved.", + "placeholders": {}, + "comments": [], + "origin": [["src/components/NotFound.tsx", 23]], + "translation": "The page you are looking for does not exist or has been moved." + }, + "notfound.button.go_home": { + "message": "Go to Home", + "placeholders": {}, + "comments": [], + "origin": [["src/components/NotFound.tsx", 48]], + "translation": "Go to Home" + }, + "notfound.project.title": { + "message": "Project Not Found", + "placeholders": {}, + "comments": [], + "origin": [["src/routes/projects/$projectId/latest/index.tsx", 15]], + "translation": "Project Not Found" + }, + "notfound.project.description": { + "message": "The project you are looking for does not exist.", + "placeholders": {}, + "comments": [], + "origin": [["src/routes/projects/$projectId/latest/index.tsx", 19]], + "translation": "The project you are looking for does not exist." + }, + "notfound.session.title": { + "message": "Session Not Found", + "placeholders": {}, + "comments": [], + "origin": [ + ["src/routes/projects/$projectId/sessions/$sessionId/index.tsx", 13] + ], + "translation": "Session Not Found" + }, + "notfound.session.description": { + "message": "The session you are looking for does not exist.", + "placeholders": {}, + "comments": [], + "origin": [ + ["src/routes/projects/$projectId/sessions/$sessionId/index.tsx", 17] + ], + "translation": "The session you are looking for does not exist." } } diff --git a/src/lib/i18n/locales/en/messages.ts b/src/lib/i18n/locales/en/messages.ts index 8ad72f9..d9e03cc 100644 --- a/src/lib/i18n/locales/en/messages.ts +++ b/src/lib/i18n/locales/en/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"Available commands\"],\"Available files and directories\":[\"Available files and directories\"],\"Close sidebar\":[\"Close sidebar\"],\"Compare from\":[\"Compare from\"],\"Compare to\":[\"Compare to\"],\"Failed to commit\":[\"Failed to commit\"],\"Failed to commit and push\":[\"Failed to commit and push\"],\"Failed to push\":[\"Failed to push\"],\"Message input with completion support\":[\"Message input with completion support\"],\"Reload MCP servers\":[\"Reload MCP servers\"],\"Retry Push\":[\"Retry Push\"],\"Select enter key behavior\":[\"Select enter key behavior\"],\"Select language\":[\"Select language\"],\"Select permission mode\":[\"Select permission mode\"],\"Select theme\":[\"Select theme\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Uncommitted changes\":[\"Uncommitted changes\"],\"assistant.thinking\":[\"Thinking\"],\"assistant.tool.input_parameters\":[\"Input Parameters\"],\"assistant.tool.message_count\":[[\"count\"],\" messages\"],\"assistant.tool.result\":[\"Tool Result\"],\"assistant.tool.task_id\":[\"Task ID\"],\"assistant.tool.tool_id\":[\"Tool ID\"],\"assistant.tool.view_task\":[\"View Task\"],\"assistant.tool.view_task_details\":[\"View Task\"],\"chat.autocomplete.active\":[\"Autocomplete active\"],\"chat.button.start\":[\"Start Chat\"],\"chat.error.send_failed\":[\"Failed to send message. Please try again.\"],\"chat.modal.title\":[\"Start New Chat\"],\"chat.resume\":[\"Resume\"],\"chat.send\":[\"Send\"],\"chat.status.processing\":[\"Processing...\"],\"common.action.cancel\":[\"Cancel\"],\"common.error\":[\"Error\"],\"common.loading\":[\"Loading...\"],\"conversation.error.raw_content\":[\"Raw Content:\"],\"conversation.error.report_issue\":[\"Report this issue\"],\"conversation.error.schema\":[\"Schema Error\"],\"conversation.error.schema_validation\":[\"Schema Validation Error\"],\"conversation.error.schema_validation.description\":[\"This conversation entry failed to parse correctly. This might indicate a format change or parsing issue.\"],\"cron_builder.cron_expression\":[\"Cron Expression\"],\"cron_builder.custom\":[\"Custom\"],\"cron_builder.daily\":[\"Daily\"],\"cron_builder.day_of_week\":[\"Day of Week\"],\"cron_builder.expression\":[\"Expression\"],\"cron_builder.friday\":[\"Friday\"],\"cron_builder.hour\":[\"Hour (0-23)\"],\"cron_builder.hourly\":[\"Hourly\"],\"cron_builder.minute\":[\"Minute (0-59)\"],\"cron_builder.monday\":[\"Monday\"],\"cron_builder.preview\":[\"Preview\"],\"cron_builder.saturday\":[\"Saturday\"],\"cron_builder.schedule_type\":[\"Schedule Type\"],\"cron_builder.sunday\":[\"Sunday\"],\"cron_builder.thursday\":[\"Thursday\"],\"cron_builder.tuesday\":[\"Tuesday\"],\"cron_builder.wednesday\":[\"Wednesday\"],\"cron_builder.weekly\":[\"Weekly\"],\"diff.commit\":[\"Commit\"],\"diff.commit.changes\":[\"Commit Changes\"],\"diff.commit.message\":[\"Commit message\"],\"diff.commit.push\":[\"Commit & Push\"],\"diff.committing\":[\"Committing...\"],\"diff.committing.pushing\":[\"Committing & Pushing...\"],\"diff.deselect.all\":[\"Deselect All\"],\"diff.enter.message\":[\"Enter a commit message\"],\"diff.files\":[\"files\"],\"diff.files.changed\":[\"files changed\"],\"diff.loading\":[\"Loading diff...\"],\"diff.push\":[\"Push\"],\"diff.pushing\":[\"Pushing...\"],\"diff.select.all\":[\"Select All\"],\"diff.select.file\":[\"Select at least one file\"],\"directory_picker.current\":[\"Current:\"],\"directory_picker.loading\":[\"Loading...\"],\"directory_picker.no_directories\":[\"No directories found\"],\"directory_picker.select\":[\"Select This Directory\"],\"mcp.error.load_failed\":[\"Failed to load MCP servers: \",[\"error\"]],\"mcp.no.servers\":[\"No MCP servers found\"],\"mcp.title\":[\"MCP Servers\"],\"notification.beep\":[\"Beep\"],\"notification.chime\":[\"Chime\"],\"notification.description\":[\"Select a sound to play when a task completes\"],\"notification.none\":[\"None\"],\"notification.ping\":[\"Ping\"],\"notification.pop\":[\"Pop\"],\"notification.test\":[\"Test\"],\"project.create.action.create\":[\"Create Project\"],\"project.create.action.creating\":[\"Creating...\"],\"project.create.description\":[\"Select a directory to initialize as a Claude Code project. This will run <0>/init in the selected directory.\"],\"project.create.selected_directory\":[\"Selected directory:\"],\"project.create.title\":[\"Create New Project\"],\"project.error.back_to_projects\":[\"Back to Projects\"],\"project.error.description\":[\"We encountered an error while loading this project\"],\"project.error.details_title\":[\"Error Details\"],\"project.error.error_id\":[\"Error ID:\"],\"project.error.title\":[\"Failed to load project\"],\"project.error.try_again\":[\"Try Again\"],\"project.new\":[\"New Project\"],\"project.not_found.back_to_projects\":[\"Back to Projects\"],\"project.not_found.description\":[\"The project you are looking for does not exist or has been removed\"],\"project.not_found.title\":[\"Project Not Found\"],\"project_list.last_modified\":[\"Last modified:\"],\"project_list.messages\":[\"Messages:\"],\"project_list.no_projects.description\":[\"No Claude Code projects found in your ~/.claude/projects directory. Start a conversation with Claude Code to create your first project.\"],\"project_list.no_projects.title\":[\"No projects found\"],\"project_list.view_conversations\":[\"View Conversations\"],\"projects.page.description\":[\"Browse your Claude Code conversation history and project interactions\"],\"projects.page.loading\":[\"Loading projects...\"],\"projects.page.title\":[\"Your Projects\"],\"session.conversation.abort\":[\"Abort\"],\"session.conversation.in.progress\":[\"Conversation is in progress...\"],\"session.conversation.paused\":[\"Conversation is paused...\"],\"session.processing\":[\"Claude Code is processing...\"],\"session.status.paused\":[\"Paused\"],\"session.status.running\":[\"Running\"],\"sessions.load.more\":[\"Load More\"],\"sessions.new\":[\"New\"],\"sessions.title\":[\"Sessions\"],\"sessions.total\":[\"total\"],\"settings.description\":[\"Display and behavior preferences\"],\"settings.input.enter_key_behavior\":[\"Enter Key Behavior\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enter to send\"],\"settings.input.enter_key_behavior.description\":[\"Choose how the Enter key behaves in message input\"],\"settings.input.enter_key_behavior.enter\":[\"Enter to send\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enter to send (default)\"],\"settings.loading\":[\"Loading settings...\"],\"settings.locale\":[\"Language\"],\"settings.locale.description\":[\"Choose your preferred language\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"Notifications\"],\"settings.permission.mode\":[\"Permission Mode\"],\"settings.permission.mode.accept_edits\":[\"Accept Edits (Auto-approve file edits)\"],\"settings.permission.mode.bypass_permissions\":[\"Bypass Permissions (No prompts)\"],\"settings.permission.mode.default\":[\"Default (Ask permission)\"],\"settings.permission.mode.description\":[\"Control how Claude Code handles permission requests for file operations\"],\"settings.permission.mode.plan\":[\"Plan Mode (Planning only)\"],\"settings.section.notifications\":[\"Notifications\"],\"settings.section.session_display\":[\"Session Display\"],\"settings.section.system_info\":[\"System Information\"],\"settings.session.display\":[\"Session Display\"],\"settings.session.hide_no_user_message\":[\"Hide sessions without user messages\"],\"settings.session.hide_no_user_message.description\":[\"Only show sessions that contain user commands or messages\"],\"settings.session.unify_same_title\":[\"Unify sessions with same title\"],\"settings.session.unify_same_title.description\":[\"Show only the latest session when multiple sessions have the same title\"],\"settings.tab.title\":[\"Settings for display and notifications\"],\"settings.theme\":[\"Theme\"],\"settings.theme.dark\":[\"Dark\"],\"settings.theme.description\":[\"Choose your preferred color theme\"],\"settings.theme.light\":[\"Light\"],\"settings.theme.system\":[\"System\"],\"settings.title\":[\"Settings\"],\"sidebar.back.to.projects\":[\"Back to projects\"],\"sidebar.show.mcp.settings\":[\"Show MCP server settings\"],\"sidebar.show.session.list\":[\"Show session list\"],\"system.info.tab.title\":[\"Show system information\"],\"system_info.available_features\":[\"Available Features\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"Version and feature information\"],\"system_info.executable_path\":[\"Executable\"],\"system_info.feature.agent_sdk.description\":[\"Uses Claude Agent SDK instead of Claude Code SDK (v1.0.125+)\"],\"system_info.feature.agent_sdk.title\":[\"Claude Agent SDK\"],\"system_info.feature.can_use_tool.description\":[\"Dynamically control tool usage permissions and request user approval before tool execution (v1.0.82+)\"],\"system_info.feature.can_use_tool.title\":[\"Tool Use Permission Control\"],\"system_info.feature.unknown.description\":[\"Feature information not available\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"Adds unique identifiers to SDK messages for better tracking (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"Message UUID Support\"],\"system_info.loading\":[\"Loading system information...\"],\"system_info.title\":[\"System Information\"],\"system_info.unknown\":[\"Unknown\"],\"system_info.version_label\":[\"Version\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.image\":[\"Image\"],\"user.content.image.description\":[\"User uploaded image content\"],\"user.content.unsupported_media\":[\"Unsupported Media\"],\"user.content.unsupported_media.description\":[\"Media type not supported for display\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"Available commands\"],\"Available files and directories\":[\"Available files and directories\"],\"Close sidebar\":[\"Close sidebar\"],\"Compare from\":[\"Compare from\"],\"Compare to\":[\"Compare to\"],\"Failed to commit\":[\"Failed to commit\"],\"Failed to commit and push\":[\"Failed to commit and push\"],\"Failed to push\":[\"Failed to push\"],\"Message input with completion support\":[\"Message input with completion support\"],\"Reload MCP servers\":[\"Reload MCP servers\"],\"Retry Push\":[\"Retry Push\"],\"Select enter key behavior\":[\"Select enter key behavior\"],\"Select language\":[\"Select language\"],\"Select permission mode\":[\"Select permission mode\"],\"Select theme\":[\"Select theme\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Enter to send)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\"],\"Uncommitted changes\":[\"Uncommitted changes\"],\"assistant.thinking\":[\"Thinking\"],\"assistant.tool.input_parameters\":[\"Input Parameters\"],\"assistant.tool.message_count\":[[\"count\"],\" messages\"],\"assistant.tool.result\":[\"Tool Result\"],\"assistant.tool.task_id\":[\"Task ID\"],\"assistant.tool.tool_id\":[\"Tool ID\"],\"assistant.tool.view_task\":[\"View Task\"],\"assistant.tool.view_task_details\":[\"View Task\"],\"chat.autocomplete.active\":[\"Autocomplete active\"],\"chat.button.start\":[\"Start Chat\"],\"chat.error.send_failed\":[\"Failed to send message. Please try again.\"],\"chat.modal.title\":[\"Start New Chat\"],\"chat.resume\":[\"Resume\"],\"chat.send\":[\"Send\"],\"chat.status.processing\":[\"Processing...\"],\"common.action.cancel\":[\"Cancel\"],\"common.error\":[\"Error\"],\"common.loading\":[\"Loading...\"],\"conversation.error.raw_content\":[\"Raw Content:\"],\"conversation.error.report_issue\":[\"Report this issue\"],\"conversation.error.schema\":[\"Schema Error\"],\"conversation.error.schema_validation\":[\"Schema Validation Error\"],\"conversation.error.schema_validation.description\":[\"This conversation entry failed to parse correctly. This might indicate a format change or parsing issue.\"],\"cron_builder.cron_expression\":[\"Cron Expression\"],\"cron_builder.custom\":[\"Custom\"],\"cron_builder.daily\":[\"Daily\"],\"cron_builder.day_of_week\":[\"Day of Week\"],\"cron_builder.expression\":[\"Expression\"],\"cron_builder.friday\":[\"Friday\"],\"cron_builder.hour\":[\"Hour (0-23)\"],\"cron_builder.hourly\":[\"Hourly\"],\"cron_builder.minute\":[\"Minute (0-59)\"],\"cron_builder.monday\":[\"Monday\"],\"cron_builder.preview\":[\"Preview\"],\"cron_builder.saturday\":[\"Saturday\"],\"cron_builder.schedule_type\":[\"Schedule Type\"],\"cron_builder.sunday\":[\"Sunday\"],\"cron_builder.thursday\":[\"Thursday\"],\"cron_builder.tuesday\":[\"Tuesday\"],\"cron_builder.wednesday\":[\"Wednesday\"],\"cron_builder.weekly\":[\"Weekly\"],\"diff.commit\":[\"Commit\"],\"diff.commit.changes\":[\"Commit Changes\"],\"diff.commit.message\":[\"Commit message\"],\"diff.commit.push\":[\"Commit & Push\"],\"diff.committing\":[\"Committing...\"],\"diff.committing.pushing\":[\"Committing & Pushing...\"],\"diff.deselect.all\":[\"Deselect All\"],\"diff.enter.message\":[\"Enter a commit message\"],\"diff.files\":[\"files\"],\"diff.files.changed\":[\"files changed\"],\"diff.loading\":[\"Loading diff...\"],\"diff.push\":[\"Push\"],\"diff.pushing\":[\"Pushing...\"],\"diff.select.all\":[\"Select All\"],\"diff.select.file\":[\"Select at least one file\"],\"directory_picker.current\":[\"Current:\"],\"directory_picker.loading\":[\"Loading...\"],\"directory_picker.no_directories\":[\"No directories found\"],\"directory_picker.select\":[\"Select This Directory\"],\"mcp.error.load_failed\":[\"Failed to load MCP servers: \",[\"error\"]],\"mcp.no.servers\":[\"No MCP servers found\"],\"mcp.title\":[\"MCP Servers\"],\"notfound.button.go_home\":[\"Go to Home\"],\"notfound.default.description\":[\"The page you are looking for does not exist or has been moved.\"],\"notfound.default.title\":[\"Page Not Found\"],\"notfound.project.description\":[\"The project you are looking for does not exist.\"],\"notfound.project.title\":[\"Project Not Found\"],\"notfound.session.description\":[\"The session you are looking for does not exist.\"],\"notfound.session.title\":[\"Session Not Found\"],\"notification.beep\":[\"Beep\"],\"notification.chime\":[\"Chime\"],\"notification.description\":[\"Select a sound to play when a task completes\"],\"notification.none\":[\"None\"],\"notification.ping\":[\"Ping\"],\"notification.pop\":[\"Pop\"],\"notification.test\":[\"Test\"],\"project.create.action.create\":[\"Create Project\"],\"project.create.action.creating\":[\"Creating...\"],\"project.create.description\":[\"Select a directory to initialize as a Claude Code project. This will run <0>/init in the selected directory.\"],\"project.create.selected_directory\":[\"Selected directory:\"],\"project.create.title\":[\"Create New Project\"],\"project.error.back_to_projects\":[\"Back to Projects\"],\"project.error.description\":[\"We encountered an error while loading this project\"],\"project.error.details_title\":[\"Error Details\"],\"project.error.error_id\":[\"Error ID:\"],\"project.error.title\":[\"Failed to load project\"],\"project.error.try_again\":[\"Try Again\"],\"project.new\":[\"New Project\"],\"project.not_found.back_to_projects\":[\"Back to Projects\"],\"project.not_found.description\":[\"The project you are looking for does not exist or has been removed\"],\"project.not_found.title\":[\"Project Not Found\"],\"project_list.last_modified\":[\"Last modified:\"],\"project_list.messages\":[\"Messages:\"],\"project_list.no_projects.description\":[\"No Claude Code projects found in your ~/.claude/projects directory. Start a conversation with Claude Code to create your first project.\"],\"project_list.no_projects.title\":[\"No projects found\"],\"project_list.view_conversations\":[\"View Conversations\"],\"projects.page.description\":[\"Browse your Claude Code conversation history and project interactions\"],\"projects.page.loading\":[\"Loading projects...\"],\"projects.page.title\":[\"Your Projects\"],\"session.conversation.abort\":[\"Abort\"],\"session.conversation.in.progress\":[\"Conversation is in progress...\"],\"session.conversation.paused\":[\"Conversation is paused...\"],\"session.processing\":[\"Claude Code is processing...\"],\"session.status.paused\":[\"Paused\"],\"session.status.running\":[\"Running\"],\"sessions.load.more\":[\"Load More\"],\"sessions.new\":[\"New\"],\"sessions.title\":[\"Sessions\"],\"sessions.total\":[\"total\"],\"settings.description\":[\"Display and behavior preferences\"],\"settings.input.enter_key_behavior\":[\"Enter Key Behavior\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enter to send\"],\"settings.input.enter_key_behavior.description\":[\"Choose how the Enter key behaves in message input\"],\"settings.input.enter_key_behavior.enter\":[\"Enter to send\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enter to send (default)\"],\"settings.loading\":[\"Loading settings...\"],\"settings.locale\":[\"Language\"],\"settings.locale.description\":[\"Choose your preferred language\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"Notifications\"],\"settings.permission.mode\":[\"Permission Mode\"],\"settings.permission.mode.accept_edits\":[\"Accept Edits (Auto-approve file edits)\"],\"settings.permission.mode.bypass_permissions\":[\"Bypass Permissions (No prompts)\"],\"settings.permission.mode.default\":[\"Default (Ask permission)\"],\"settings.permission.mode.description\":[\"Control how Claude Code handles permission requests for file operations\"],\"settings.permission.mode.plan\":[\"Plan Mode (Planning only)\"],\"settings.section.notifications\":[\"Notifications\"],\"settings.section.session_display\":[\"Session Display\"],\"settings.section.system_info\":[\"System Information\"],\"settings.session.display\":[\"Session Display\"],\"settings.session.hide_no_user_message\":[\"Hide sessions without user messages\"],\"settings.session.hide_no_user_message.description\":[\"Only show sessions that contain user commands or messages\"],\"settings.session.unify_same_title\":[\"Unify sessions with same title\"],\"settings.session.unify_same_title.description\":[\"Show only the latest session when multiple sessions have the same title\"],\"settings.tab.title\":[\"Settings for display and notifications\"],\"settings.theme\":[\"Theme\"],\"settings.theme.dark\":[\"Dark\"],\"settings.theme.description\":[\"Choose your preferred color theme\"],\"settings.theme.light\":[\"Light\"],\"settings.theme.system\":[\"System\"],\"settings.title\":[\"Settings\"],\"sidebar.back.to.projects\":[\"Back to projects\"],\"sidebar.show.mcp.settings\":[\"Show MCP server settings\"],\"sidebar.show.session.list\":[\"Show session list\"],\"system.info.tab.title\":[\"Show system information\"],\"system_info.available_features\":[\"Available Features\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"Version and feature information\"],\"system_info.executable_path\":[\"Executable\"],\"system_info.feature.agent_sdk.description\":[\"Uses Claude Agent SDK instead of Claude Code SDK (v1.0.125+)\"],\"system_info.feature.agent_sdk.title\":[\"Claude Agent SDK\"],\"system_info.feature.can_use_tool.description\":[\"Dynamically control tool usage permissions and request user approval before tool execution (v1.0.82+)\"],\"system_info.feature.can_use_tool.title\":[\"Tool Use Permission Control\"],\"system_info.feature.unknown.description\":[\"Feature information not available\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"Adds unique identifiers to SDK messages for better tracking (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"Message UUID Support\"],\"system_info.loading\":[\"Loading system information...\"],\"system_info.title\":[\"System Information\"],\"system_info.unknown\":[\"Unknown\"],\"system_info.version_label\":[\"Version\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.image\":[\"Image\"],\"user.content.image.description\":[\"User uploaded image content\"],\"user.content.unsupported_media\":[\"Unsupported Media\"],\"user.content.unsupported_media.description\":[\"Media type not supported for display\"]}")as Messages; \ No newline at end of file diff --git a/src/lib/i18n/locales/ja/messages.json b/src/lib/i18n/locales/ja/messages.json index f45c2a5..1d37d10 100644 --- a/src/lib/i18n/locales/ja/messages.json +++ b/src/lib/i18n/locales/ja/messages.json @@ -1669,5 +1669,58 @@ "comments": [], "origin": [["src/components/SettingsControls.tsx", 281]], "translation": "日本語" + }, + "notfound.default.title": { + "message": "Page Not Found", + "placeholders": {}, + "comments": [], + "origin": [["src/components/NotFound.tsx", 19]], + "translation": "ページが見つかりません" + }, + "notfound.default.description": { + "message": "The page you are looking for does not exist or has been moved.", + "placeholders": {}, + "comments": [], + "origin": [["src/components/NotFound.tsx", 23]], + "translation": "お探しのページは存在しないか、移動されました。" + }, + "notfound.button.go_home": { + "message": "Go to Home", + "placeholders": {}, + "comments": [], + "origin": [["src/components/NotFound.tsx", 48]], + "translation": "ホームに戻る" + }, + "notfound.project.title": { + "message": "Project Not Found", + "placeholders": {}, + "comments": [], + "origin": [["src/routes/projects/$projectId/latest/index.tsx", 15]], + "translation": "プロジェクトが見つかりません" + }, + "notfound.project.description": { + "message": "The project you are looking for does not exist.", + "placeholders": {}, + "comments": [], + "origin": [["src/routes/projects/$projectId/latest/index.tsx", 19]], + "translation": "お探しのプロジェクトは存在しません。" + }, + "notfound.session.title": { + "message": "Session Not Found", + "placeholders": {}, + "comments": [], + "origin": [ + ["src/routes/projects/$projectId/sessions/$sessionId/index.tsx", 13] + ], + "translation": "セッションが見つかりません" + }, + "notfound.session.description": { + "message": "The session you are looking for does not exist.", + "placeholders": {}, + "comments": [], + "origin": [ + ["src/routes/projects/$projectId/sessions/$sessionId/index.tsx", 17] + ], + "translation": "お探しのセッションは存在しません。" } } diff --git a/src/lib/i18n/locales/ja/messages.ts b/src/lib/i18n/locales/ja/messages.ts index 9ccf10e..45ef674 100644 --- a/src/lib/i18n/locales/ja/messages.ts +++ b/src/lib/i18n/locales/ja/messages.ts @@ -1 +1 @@ -/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"利用可能なコマンド\"],\"Available files and directories\":[\"利用可能なファイルとディレクトリ\"],\"Close sidebar\":[\"サイドバーを閉じる\"],\"Compare from\":[\"比較元\"],\"Compare to\":[\"比較先\"],\"Failed to commit\":[\"コミットに失敗しました\"],\"Failed to commit and push\":[\"コミットとプッシュに失敗しました\"],\"Failed to push\":[\"プッシュに失敗しました\"],\"Message input with completion support\":[\"補完機能付きメッセージ入力\"],\"Reload MCP servers\":[\"MCPサーバーを再読み込み\"],\"Retry Push\":[\"プッシュを再試行\"],\"Select enter key behavior\":[\"Enterキーの動作を選択\"],\"Select language\":[\"言語を選択\"],\"Select permission mode\":[\"権限モードを選択\"],\"Select theme\":[\"テーマを選択\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Uncommitted changes\":[\"未コミットの変更\"],\"assistant.thinking\":[\"思考中\"],\"assistant.tool.input_parameters\":[\"入力パラメータ\"],\"assistant.tool.message_count\":[[\"count\"],\"件のメッセージ\"],\"assistant.tool.result\":[\"ツール実行結果\"],\"assistant.tool.task_id\":[\"タスクID\"],\"assistant.tool.tool_id\":[\"ツールID\"],\"assistant.tool.view_task\":[\"タスクを表示\"],\"assistant.tool.view_task_details\":[\"タスクを確認\"],\"chat.autocomplete.active\":[\"オートコンプリート有効\"],\"chat.button.start\":[\"チャット開始\"],\"chat.error.send_failed\":[\"メッセージの送信に失敗しました。もう一度お試しください。\"],\"chat.modal.title\":[\"新しいチャットを開始\"],\"chat.resume\":[\"再開\"],\"chat.send\":[\"送信\"],\"chat.status.processing\":[\"処理中...\"],\"common.action.cancel\":[\"キャンセル\"],\"common.error\":[\"エラー\"],\"common.loading\":[\"読み込み中...\"],\"conversation.error.raw_content\":[\"生データ:\"],\"conversation.error.report_issue\":[\"この問題を報告\"],\"conversation.error.schema\":[\"スキーマエラー\"],\"conversation.error.schema_validation\":[\"スキーマ検証エラー\"],\"conversation.error.schema_validation.description\":[\"この会話エントリの解析に失敗しました。フォーマットの変更または解析の問題が考えられます。\"],\"cron_builder.cron_expression\":[\"Cron式\"],\"cron_builder.custom\":[\"カスタム\"],\"cron_builder.daily\":[\"毎日\"],\"cron_builder.day_of_week\":[\"曜日\"],\"cron_builder.expression\":[\"Cron式\"],\"cron_builder.friday\":[\"金曜日\"],\"cron_builder.hour\":[\"時 (0-23)\"],\"cron_builder.hourly\":[\"毎時\"],\"cron_builder.minute\":[\"分 (0-59)\"],\"cron_builder.monday\":[\"月曜日\"],\"cron_builder.preview\":[\"プレビュー\"],\"cron_builder.saturday\":[\"土曜日\"],\"cron_builder.schedule_type\":[\"スケジュールタイプ\"],\"cron_builder.sunday\":[\"日曜日\"],\"cron_builder.thursday\":[\"木曜日\"],\"cron_builder.tuesday\":[\"火曜日\"],\"cron_builder.wednesday\":[\"水曜日\"],\"cron_builder.weekly\":[\"毎週\"],\"diff.commit\":[\"コミット\"],\"diff.commit.changes\":[\"変更をコミット\"],\"diff.commit.message\":[\"コミットメッセージ\"],\"diff.commit.push\":[\"コミット&プッシュ\"],\"diff.committing\":[\"コミット中...\"],\"diff.committing.pushing\":[\"コミット&プッシュ中...\"],\"diff.deselect.all\":[\"すべて選択解除\"],\"diff.enter.message\":[\"コミットメッセージを入力\"],\"diff.files\":[\"ファイル\"],\"diff.files.changed\":[\"ファイルが変更されました\"],\"diff.loading\":[\"差分を読み込み中...\"],\"diff.push\":[\"プッシュ\"],\"diff.pushing\":[\"プッシュ中...\"],\"diff.select.all\":[\"すべて選択\"],\"diff.select.file\":[\"少なくとも1つのファイルを選択してください\"],\"directory_picker.current\":[\"現在:\"],\"directory_picker.loading\":[\"読み込み中...\"],\"directory_picker.no_directories\":[\"ディレクトリが見つかりません\"],\"directory_picker.select\":[\"このディレクトリを選択\"],\"mcp.error.load_failed\":[\"MCPサーバーの読み込みに失敗しました: \",[\"error\"]],\"mcp.no.servers\":[\"MCPサーバーが見つかりません\"],\"mcp.title\":[\"MCPサーバー\"],\"notification.beep\":[\"ビープ音\"],\"notification.chime\":[\"チャイム\"],\"notification.description\":[\"Claude Code のタスクが完了した時に再生する音を選択してください\"],\"notification.none\":[\"なし\"],\"notification.ping\":[\"ピン\"],\"notification.pop\":[\"ポップ\"],\"notification.test\":[\"テスト\"],\"project.create.action.create\":[\"プロジェクトを作成\"],\"project.create.action.creating\":[\"作成中...\"],\"project.create.description\":[\"Claude Codeプロジェクトとして初期化するディレクトリを選択してください。選択したディレクトリで<0>/initが実行されます。\"],\"project.create.selected_directory\":[\"選択したディレクトリ:\"],\"project.create.title\":[\"新規プロジェクトを作成\"],\"project.error.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.error.description\":[\"このプロジェクトの読み込み中にエラーが発生しました\"],\"project.error.details_title\":[\"エラー詳細\"],\"project.error.error_id\":[\"エラーID:\"],\"project.error.title\":[\"プロジェクトの読み込みに失敗しました\"],\"project.error.try_again\":[\"再試行\"],\"project.new\":[\"新規プロジェクト\"],\"project.not_found.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.not_found.description\":[\"お探しのプロジェクトは存在しないか、削除されています\"],\"project.not_found.title\":[\"プロジェクトが見つかりません\"],\"project_list.last_modified\":[\"最終更新:\"],\"project_list.messages\":[\"メッセージ:\"],\"project_list.no_projects.description\":[\"~/.claude/projectsディレクトリにClaude Codeプロジェクトが見つかりません。Claude Codeとの会話を開始して、最初のプロジェクトを作成してください。\"],\"project_list.no_projects.title\":[\"プロジェクトが見つかりません\"],\"project_list.view_conversations\":[\"会話を表示\"],\"projects.page.description\":[\"Claude Codeの会話履歴とプロジェクトの操作を閲覧\"],\"projects.page.loading\":[\"プロジェクトを読み込み中...\"],\"projects.page.title\":[\"プロジェクト\"],\"session.conversation.abort\":[\"中止\"],\"session.conversation.in.progress\":[\"会話を進行中...\"],\"session.conversation.paused\":[\"会話を一時停止中...\"],\"session.processing\":[\"Claude Codeが処理中...\"],\"session.status.paused\":[\"一時停止\"],\"session.status.running\":[\"実行中\"],\"sessions.load.more\":[\"さらに読み込む\"],\"sessions.new\":[\"新規\"],\"sessions.title\":[\"セッション\"],\"sessions.total\":[\"合計\"],\"settings.description\":[\"表示と動作の設定\"],\"settings.input.enter_key_behavior\":[\"Enterキーの動作\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enterで送信\"],\"settings.input.enter_key_behavior.description\":[\"メッセージ入力でのEnterキーの動作を選択\"],\"settings.input.enter_key_behavior.enter\":[\"Enterで送信\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enterで送信(デフォルト)\"],\"settings.loading\":[\"設定を読み込み中...\"],\"settings.locale\":[\"言語\"],\"settings.locale.description\":[\"お好みの言語を選択\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"通知\"],\"settings.permission.mode\":[\"権限モード\"],\"settings.permission.mode.accept_edits\":[\"編集を承認(ファイル編集を自動承認)\"],\"settings.permission.mode.bypass_permissions\":[\"権限をバイパス(プロンプトなし)\"],\"settings.permission.mode.default\":[\"デフォルト(権限を確認)\"],\"settings.permission.mode.description\":[\"ファイル操作の権限リクエストの処理方法を制御\"],\"settings.permission.mode.plan\":[\"プランモード(計画のみ)\"],\"settings.section.notifications\":[\"通知\"],\"settings.section.session_display\":[\"セッション表示\"],\"settings.section.system_info\":[\"システム情報\"],\"settings.session.display\":[\"セッション表示\"],\"settings.session.hide_no_user_message\":[\"ユーザーメッセージのないセッションを非表示\"],\"settings.session.hide_no_user_message.description\":[\"ユーザーコマンドまたはメッセージを含むセッションのみを表示\"],\"settings.session.unify_same_title\":[\"同じタイトルのセッションを統合\"],\"settings.session.unify_same_title.description\":[\"同じタイトルの複数のセッションがある場合、最新のセッションのみを表示\"],\"settings.tab.title\":[\"表示と通知の設定\"],\"settings.theme\":[\"テーマ\"],\"settings.theme.dark\":[\"ダーク\"],\"settings.theme.description\":[\"お好みのカラーテーマを選択\"],\"settings.theme.light\":[\"ライト\"],\"settings.theme.system\":[\"システム\"],\"settings.title\":[\"設定\"],\"sidebar.back.to.projects\":[\"プロジェクト一覧に戻る\"],\"sidebar.show.mcp.settings\":[\"MCPサーバー設定を表示\"],\"sidebar.show.session.list\":[\"セッション一覧を表示\"],\"system.info.tab.title\":[\"システム情報を表示\"],\"system_info.available_features\":[\"利用可能機能\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"バージョンと機能情報\"],\"system_info.executable_path\":[\"実行ファイル\"],\"system_info.feature.agent_sdk.description\":[\"Claude Code SDKではなくClaude Agent SDKを使用 (v1.0.125+)\"],\"system_info.feature.agent_sdk.title\":[\"Claude Agent SDK\"],\"system_info.feature.can_use_tool.description\":[\"動的にツールの使用許可を制御し、ツール実行前にユーザーの承認を求めることができます (v1.0.82+)\"],\"system_info.feature.can_use_tool.title\":[\"ツール使用権限制御\"],\"system_info.feature.unknown.description\":[\"機能情報は利用できません\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"SDKメッセージに一意の識別子を追加して追跡を改善します (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"メッセージUUIDサポート\"],\"system_info.loading\":[\"システム情報を読み込んでいます...\"],\"system_info.title\":[\"システム情報\"],\"system_info.unknown\":[\"不明\"],\"system_info.version_label\":[\"バージョン\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.image\":[\"画像\"],\"user.content.image.description\":[\"ユーザーがアップロードした画像コンテンツ\"],\"user.content.unsupported_media\":[\"サポートされていないメディア\"],\"user.content.unsupported_media.description\":[\"表示がサポートされていないメディア形式です\"]}")as Messages; \ No newline at end of file +/*eslint-disable*/import type{Messages}from"@lingui/core";export const messages=JSON.parse("{\"Available commands\":[\"利用可能なコマンド\"],\"Available files and directories\":[\"利用可能なファイルとディレクトリ\"],\"Close sidebar\":[\"サイドバーを閉じる\"],\"Compare from\":[\"比較元\"],\"Compare to\":[\"比較先\"],\"Failed to commit\":[\"コミットに失敗しました\"],\"Failed to commit and push\":[\"コミットとプッシュに失敗しました\"],\"Failed to push\":[\"プッシュに失敗しました\"],\"Message input with completion support\":[\"補完機能付きメッセージ入力\"],\"Reload MCP servers\":[\"MCPサーバーを再読み込み\"],\"Retry Push\":[\"プッシュを再試行\"],\"Select enter key behavior\":[\"Enterキーの動作を選択\"],\"Select language\":[\"言語を選択\"],\"Select permission mode\":[\"権限モードを選択\"],\"Select theme\":[\"テーマを選択\"],\"Type your message here... (Start with / for commands, @ for files, Command+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message here... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"ここにメッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Command+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Command+Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Enterで送信)\"],\"Type your message... (Start with / for commands, @ for files, Shift+Enter to send)\":[\"メッセージを入力... (/でコマンド、@でファイル、Shift+Enterで送信)\"],\"Uncommitted changes\":[\"未コミットの変更\"],\"assistant.thinking\":[\"思考中\"],\"assistant.tool.input_parameters\":[\"入力パラメータ\"],\"assistant.tool.message_count\":[[\"count\"],\"件のメッセージ\"],\"assistant.tool.result\":[\"ツール実行結果\"],\"assistant.tool.task_id\":[\"タスクID\"],\"assistant.tool.tool_id\":[\"ツールID\"],\"assistant.tool.view_task\":[\"タスクを表示\"],\"assistant.tool.view_task_details\":[\"タスクを確認\"],\"chat.autocomplete.active\":[\"オートコンプリート有効\"],\"chat.button.start\":[\"チャット開始\"],\"chat.error.send_failed\":[\"メッセージの送信に失敗しました。もう一度お試しください。\"],\"chat.modal.title\":[\"新しいチャットを開始\"],\"chat.resume\":[\"再開\"],\"chat.send\":[\"送信\"],\"chat.status.processing\":[\"処理中...\"],\"common.action.cancel\":[\"キャンセル\"],\"common.error\":[\"エラー\"],\"common.loading\":[\"読み込み中...\"],\"conversation.error.raw_content\":[\"生データ:\"],\"conversation.error.report_issue\":[\"この問題を報告\"],\"conversation.error.schema\":[\"スキーマエラー\"],\"conversation.error.schema_validation\":[\"スキーマ検証エラー\"],\"conversation.error.schema_validation.description\":[\"この会話エントリの解析に失敗しました。フォーマットの変更または解析の問題が考えられます。\"],\"cron_builder.cron_expression\":[\"Cron式\"],\"cron_builder.custom\":[\"カスタム\"],\"cron_builder.daily\":[\"毎日\"],\"cron_builder.day_of_week\":[\"曜日\"],\"cron_builder.expression\":[\"Cron式\"],\"cron_builder.friday\":[\"金曜日\"],\"cron_builder.hour\":[\"時 (0-23)\"],\"cron_builder.hourly\":[\"毎時\"],\"cron_builder.minute\":[\"分 (0-59)\"],\"cron_builder.monday\":[\"月曜日\"],\"cron_builder.preview\":[\"プレビュー\"],\"cron_builder.saturday\":[\"土曜日\"],\"cron_builder.schedule_type\":[\"スケジュールタイプ\"],\"cron_builder.sunday\":[\"日曜日\"],\"cron_builder.thursday\":[\"木曜日\"],\"cron_builder.tuesday\":[\"火曜日\"],\"cron_builder.wednesday\":[\"水曜日\"],\"cron_builder.weekly\":[\"毎週\"],\"diff.commit\":[\"コミット\"],\"diff.commit.changes\":[\"変更をコミット\"],\"diff.commit.message\":[\"コミットメッセージ\"],\"diff.commit.push\":[\"コミット&プッシュ\"],\"diff.committing\":[\"コミット中...\"],\"diff.committing.pushing\":[\"コミット&プッシュ中...\"],\"diff.deselect.all\":[\"すべて選択解除\"],\"diff.enter.message\":[\"コミットメッセージを入力\"],\"diff.files\":[\"ファイル\"],\"diff.files.changed\":[\"ファイルが変更されました\"],\"diff.loading\":[\"差分を読み込み中...\"],\"diff.push\":[\"プッシュ\"],\"diff.pushing\":[\"プッシュ中...\"],\"diff.select.all\":[\"すべて選択\"],\"diff.select.file\":[\"少なくとも1つのファイルを選択してください\"],\"directory_picker.current\":[\"現在:\"],\"directory_picker.loading\":[\"読み込み中...\"],\"directory_picker.no_directories\":[\"ディレクトリが見つかりません\"],\"directory_picker.select\":[\"このディレクトリを選択\"],\"mcp.error.load_failed\":[\"MCPサーバーの読み込みに失敗しました: \",[\"error\"]],\"mcp.no.servers\":[\"MCPサーバーが見つかりません\"],\"mcp.title\":[\"MCPサーバー\"],\"notfound.button.go_home\":[\"ホームに戻る\"],\"notfound.default.description\":[\"お探しのページは存在しないか、移動されました。\"],\"notfound.default.title\":[\"ページが見つかりません\"],\"notfound.project.description\":[\"お探しのプロジェクトは存在しません。\"],\"notfound.project.title\":[\"プロジェクトが見つかりません\"],\"notfound.session.description\":[\"お探しのセッションは存在しません。\"],\"notfound.session.title\":[\"セッションが見つかりません\"],\"notification.beep\":[\"ビープ音\"],\"notification.chime\":[\"チャイム\"],\"notification.description\":[\"Claude Code のタスクが完了した時に再生する音を選択してください\"],\"notification.none\":[\"なし\"],\"notification.ping\":[\"ピン\"],\"notification.pop\":[\"ポップ\"],\"notification.test\":[\"テスト\"],\"project.create.action.create\":[\"プロジェクトを作成\"],\"project.create.action.creating\":[\"作成中...\"],\"project.create.description\":[\"Claude Codeプロジェクトとして初期化するディレクトリを選択してください。選択したディレクトリで<0>/initが実行されます。\"],\"project.create.selected_directory\":[\"選択したディレクトリ:\"],\"project.create.title\":[\"新規プロジェクトを作成\"],\"project.error.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.error.description\":[\"このプロジェクトの読み込み中にエラーが発生しました\"],\"project.error.details_title\":[\"エラー詳細\"],\"project.error.error_id\":[\"エラーID:\"],\"project.error.title\":[\"プロジェクトの読み込みに失敗しました\"],\"project.error.try_again\":[\"再試行\"],\"project.new\":[\"新規プロジェクト\"],\"project.not_found.back_to_projects\":[\"プロジェクト一覧に戻る\"],\"project.not_found.description\":[\"お探しのプロジェクトは存在しないか、削除されています\"],\"project.not_found.title\":[\"プロジェクトが見つかりません\"],\"project_list.last_modified\":[\"最終更新:\"],\"project_list.messages\":[\"メッセージ:\"],\"project_list.no_projects.description\":[\"~/.claude/projectsディレクトリにClaude Codeプロジェクトが見つかりません。Claude Codeとの会話を開始して、最初のプロジェクトを作成してください。\"],\"project_list.no_projects.title\":[\"プロジェクトが見つかりません\"],\"project_list.view_conversations\":[\"会話を表示\"],\"projects.page.description\":[\"Claude Codeの会話履歴とプロジェクトの操作を閲覧\"],\"projects.page.loading\":[\"プロジェクトを読み込み中...\"],\"projects.page.title\":[\"プロジェクト\"],\"session.conversation.abort\":[\"中止\"],\"session.conversation.in.progress\":[\"会話を進行中...\"],\"session.conversation.paused\":[\"会話を一時停止中...\"],\"session.processing\":[\"Claude Codeが処理中...\"],\"session.status.paused\":[\"一時停止\"],\"session.status.running\":[\"実行中\"],\"sessions.load.more\":[\"さらに読み込む\"],\"sessions.new\":[\"新規\"],\"sessions.title\":[\"セッション\"],\"sessions.total\":[\"合計\"],\"settings.description\":[\"表示と動作の設定\"],\"settings.input.enter_key_behavior\":[\"Enterキーの動作\"],\"settings.input.enter_key_behavior.command_enter\":[\"Command+Enterで送信\"],\"settings.input.enter_key_behavior.description\":[\"メッセージ入力でのEnterキーの動作を選択\"],\"settings.input.enter_key_behavior.enter\":[\"Enterで送信\"],\"settings.input.enter_key_behavior.shift_enter\":[\"Shift+Enterで送信(デフォルト)\"],\"settings.loading\":[\"設定を読み込み中...\"],\"settings.locale\":[\"言語\"],\"settings.locale.description\":[\"お好みの言語を選択\"],\"settings.locale.en\":[\"English\"],\"settings.locale.ja\":[\"日本語\"],\"settings.notifications\":[\"通知\"],\"settings.permission.mode\":[\"権限モード\"],\"settings.permission.mode.accept_edits\":[\"編集を承認(ファイル編集を自動承認)\"],\"settings.permission.mode.bypass_permissions\":[\"権限をバイパス(プロンプトなし)\"],\"settings.permission.mode.default\":[\"デフォルト(権限を確認)\"],\"settings.permission.mode.description\":[\"ファイル操作の権限リクエストの処理方法を制御\"],\"settings.permission.mode.plan\":[\"プランモード(計画のみ)\"],\"settings.section.notifications\":[\"通知\"],\"settings.section.session_display\":[\"セッション表示\"],\"settings.section.system_info\":[\"システム情報\"],\"settings.session.display\":[\"セッション表示\"],\"settings.session.hide_no_user_message\":[\"ユーザーメッセージのないセッションを非表示\"],\"settings.session.hide_no_user_message.description\":[\"ユーザーコマンドまたはメッセージを含むセッションのみを表示\"],\"settings.session.unify_same_title\":[\"同じタイトルのセッションを統合\"],\"settings.session.unify_same_title.description\":[\"同じタイトルの複数のセッションがある場合、最新のセッションのみを表示\"],\"settings.tab.title\":[\"表示と通知の設定\"],\"settings.theme\":[\"テーマ\"],\"settings.theme.dark\":[\"ダーク\"],\"settings.theme.description\":[\"お好みのカラーテーマを選択\"],\"settings.theme.light\":[\"ライト\"],\"settings.theme.system\":[\"システム\"],\"settings.title\":[\"設定\"],\"sidebar.back.to.projects\":[\"プロジェクト一覧に戻る\"],\"sidebar.show.mcp.settings\":[\"MCPサーバー設定を表示\"],\"sidebar.show.session.list\":[\"セッション一覧を表示\"],\"system.info.tab.title\":[\"システム情報を表示\"],\"system_info.available_features\":[\"利用可能機能\"],\"system_info.claude_code\":[\"Claude Code\"],\"system_info.description\":[\"バージョンと機能情報\"],\"system_info.executable_path\":[\"実行ファイル\"],\"system_info.feature.agent_sdk.description\":[\"Claude Code SDKではなくClaude Agent SDKを使用 (v1.0.125+)\"],\"system_info.feature.agent_sdk.title\":[\"Claude Agent SDK\"],\"system_info.feature.can_use_tool.description\":[\"動的にツールの使用許可を制御し、ツール実行前にユーザーの承認を求めることができます (v1.0.82+)\"],\"system_info.feature.can_use_tool.title\":[\"ツール使用権限制御\"],\"system_info.feature.unknown.description\":[\"機能情報は利用できません\"],\"system_info.feature.uuid_on_sdk_message.description\":[\"SDKメッセージに一意の識別子を追加して追跡を改善します (v1.0.86+)\"],\"system_info.feature.uuid_on_sdk_message.title\":[\"メッセージUUIDサポート\"],\"system_info.loading\":[\"システム情報を読み込んでいます...\"],\"system_info.title\":[\"システム情報\"],\"system_info.unknown\":[\"不明\"],\"system_info.version_label\":[\"バージョン\"],\"system_info.viewer_version\":[\"Claude Code Viewer\"],\"user.content.image\":[\"画像\"],\"user.content.image.description\":[\"ユーザーがアップロードした画像コンテンツ\"],\"user.content.unsupported_media\":[\"サポートされていないメディア\"],\"user.content.unsupported_media.description\":[\"表示がサポートされていないメディア形式です\"]}")as Messages; \ No newline at end of file diff --git a/src/main.tsx b/src/main.tsx index 4ea2668..056aa80 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -5,6 +5,7 @@ import ReactDOM from "react-dom/client"; import { routeTree } from "./routeTree.gen"; import "./styles.css"; +import { NotFound } from "./components/NotFound"; import { QueryClientProviderWrapper } from "./lib/api/QueryClientProviderWrapper"; const router = createRouter({ @@ -14,6 +15,7 @@ const router = createRouter({ scrollRestoration: true, defaultStructuralSharing: true, defaultPreloadStaleTime: 0, + defaultNotFoundComponent: () => , }); declare module "@tanstack/react-router" { diff --git a/src/routes/projects/$projectId/latest/index.tsx b/src/routes/projects/$projectId/latest/index.tsx index b439853..53bce4b 100644 --- a/src/routes/projects/$projectId/latest/index.tsx +++ b/src/routes/projects/$projectId/latest/index.tsx @@ -1,12 +1,27 @@ +import { Trans } from "@lingui/react"; import { createFileRoute, useLoaderData, useRouter, } from "@tanstack/react-router"; +import { NotFound } from "../../../../components/NotFound"; import { honoClient } from "../../../../lib/api/client"; export const Route = createFileRoute("/projects/$projectId/latest/")({ component: RouteComponent, + notFoundComponent: () => ( + + } + description={ + + } + /> + ), loader: async ({ params }) => { const { projectId } = params; const response = await honoClient.api.projects[":projectId"][ diff --git a/src/routes/projects/$projectId/sessions/$sessionId/index.tsx b/src/routes/projects/$projectId/sessions/$sessionId/index.tsx index a74e048..0093974 100644 --- a/src/routes/projects/$projectId/sessions/$sessionId/index.tsx +++ b/src/routes/projects/$projectId/sessions/$sessionId/index.tsx @@ -1,10 +1,25 @@ +import { Trans } from "@lingui/react"; import { createFileRoute } from "@tanstack/react-router"; import { SessionPageContent } from "../../../../../app/projects/[projectId]/sessions/[sessionId]/components/SessionPageContent"; +import { NotFound } from "../../../../../components/NotFound"; export const Route = createFileRoute( "/projects/$projectId/sessions/$sessionId/", )({ component: RouteComponent, + notFoundComponent: () => ( + + } + description={ + + } + /> + ), }); function RouteComponent() {