diff --git a/web-app/src/containers/LanguageSwitcher.tsx b/web-app/src/containers/LanguageSwitcher.tsx
index 70e595a5a..3358c348f 100644
--- a/web-app/src/containers/LanguageSwitcher.tsx
+++ b/web-app/src/containers/LanguageSwitcher.tsx
@@ -16,6 +16,7 @@ const LANGUAGES = [
{ value: 'zh-CN', label: '简体中文' },
{ value: 'zh-TW', label: '繁體中文' },
{ value: 'de-DE', label: 'Deutsch' },
+ { value: 'ja', label: '日本語' },
]
export default function LanguageSwitcher() {
diff --git a/web-app/src/locales/ja/assistants.json b/web-app/src/locales/ja/assistants.json
new file mode 100644
index 000000000..53e35ecb7
--- /dev/null
+++ b/web-app/src/locales/ja/assistants.json
@@ -0,0 +1,35 @@
+{
+ "title": "アシスタント",
+ "editAssistant": "アシスタントを編集",
+ "deleteAssistant": "アシスタントを削除",
+ "deleteConfirmation": "アシスタントを削除",
+ "deleteConfirmationDesc": "本当にこのアシスタントを削除しますか?この操作は元に戻せません。",
+ "cancel": "キャンセル",
+ "delete": "削除",
+ "addAssistant": "アシスタントを追加",
+ "emoji": "絵文字",
+ "name": "名前",
+ "enterName": "名前を入力",
+ "nameRequired": "名前は必須です",
+ "description": "説明(任意)",
+ "enterDescription": "説明を入力",
+ "instructions": "指示",
+ "enterInstructions": "指示を入力",
+ "predefinedParameters": "事前定義されたパラメータ",
+ "parameters": "パラメータ",
+ "key": "キー",
+ "value": "値",
+ "stringValue": "文字列",
+ "numberValue": "数値",
+ "booleanValue": "ブール値",
+ "jsonValue": "JSON",
+ "trueValue": "真",
+ "falseValue": "偽",
+ "jsonValuePlaceholder": "JSON値",
+ "save": "保存",
+ "createNew": "新しいアシスタントを作成",
+ "personality": "個性",
+ "capabilities": "機能",
+ "instructionsDateHint": "ヒント: {{current_date}} を使用して今日の日付を挿入します。",
+ "maxToolSteps": "最大ツールステップ数"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/chat.json b/web-app/src/locales/ja/chat.json
new file mode 100644
index 000000000..87bfa5967
--- /dev/null
+++ b/web-app/src/locales/ja/chat.json
@@ -0,0 +1,12 @@
+{
+ "welcome": "こんにちは、何かお手伝いできることはありますか?",
+ "description": "今日はどのようなご用件でしょうか?",
+ "temporaryChat": "一時的なチャット",
+ "temporaryChatDescription": "チャット履歴に保存されない一時的な会話を開始します。",
+ "status": {
+ "empty": "チャットが見つかりません"
+ },
+ "sendMessage": "メッセージを送信",
+ "newConversation": "新しい会話",
+ "clearHistory": "履歴を消去"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/common.json b/web-app/src/locales/ja/common.json
new file mode 100644
index 000000000..3d828c550
--- /dev/null
+++ b/web-app/src/locales/ja/common.json
@@ -0,0 +1,367 @@
+{
+ "assistants": "アシスタント",
+ "hardware": "ハードウェア",
+ "mcp-servers": "MCPサーバー",
+ "local_api_server": "ローカルAPIサーバー",
+ "https_proxy": "HTTPSプロキシ",
+ "extensions": "拡張機能",
+ "general": "全般",
+ "settings": "設定",
+ "modelProviders": "モデルプロバイダー",
+ "appearance": "外観",
+ "privacy": "プライバシー",
+ "keyboardShortcuts": "ショートカット",
+ "newChat": "新しいチャット",
+ "favorites": "お気に入り",
+ "recents": "最近の項目",
+ "hub": "ハブ",
+ "helpSupport": "ヘルプとサポート",
+ "helpUsImproveJan": "Janの改善にご協力ください",
+ "unstarAll": "すべてのスターを解除",
+ "unstar": "スターを解除",
+ "deleteAll": "すべて削除",
+ "star": "スターを付ける",
+ "rename": "名前を変更",
+ "delete": "削除",
+ "copied": "コピーしました!",
+ "dataFolder": "データフォルダ",
+ "others": "その他",
+ "language": "言語",
+ "login": "ログイン",
+ "loginWith": "{{provider}}でログイン",
+ "loginFailed": "ログインに失敗しました",
+ "logout": "ログアウト",
+ "loggingOut": "ログアウト中...",
+ "loggedOut": "正常にログアウトしました",
+ "logoutFailed": "ログアウトに失敗しました",
+ "profile": "プロフィール",
+ "reset": "リセット",
+ "search": "検索",
+ "name": "名前",
+ "cancel": "キャンセル",
+ "create": "作成",
+ "save": "保存",
+ "edit": "編集",
+ "copy": "コピー",
+ "back": "戻る",
+ "close": "閉じる",
+ "next": "次へ",
+ "finish": "完了",
+ "skip": "スキップ",
+ "allow": "許可",
+ "deny": "拒否",
+ "start": "開始",
+ "stop": "停止",
+ "preview": "プレビュー",
+ "compactWidth": "コンパクト幅",
+ "fullWidth": "全幅",
+ "dark": "ダーク",
+ "light": "ライト",
+ "system": "システム",
+ "auto": "自動",
+ "english": "英語",
+ "medium": "中",
+ "newThread": "新しいスレッド",
+ "noResultsFound": "結果が見つかりません",
+ "noThreadsYet": "スレッドはまだありません",
+ "noThreadsYetDesc": "新しい会話を始めると、ここにスレッドの履歴が表示されます。",
+ "downloads": "ダウンロード",
+ "downloading": "ダウンロード中",
+ "cancelDownload": "ダウンロードをキャンセル",
+ "downloadCancelled": "ダウンロードがキャンセルされました",
+ "downloadComplete": "ダウンロード完了",
+ "thinking": "考え中...",
+ "thought": "思考",
+ "callingTool": "ツールを呼び出し中",
+ "completed": "完了",
+ "image": "画像",
+ "vision": "画像認識",
+ "embeddings": "埋め込み",
+ "tools": "ツール",
+ "webSearch": "ウェブ検索",
+ "reasoning": "推論",
+ "selectAModel": "モデルを選択",
+ "noToolsAvailable": "利用可能なツールはありません",
+ "noModelsFoundFor": "\"{{searchValue}}\"に一致するモデルが見つかりません",
+ "failedToLoadModels": "モデルの読み込みに失敗しました",
+ "noModels": "モデルが見つかりません",
+ "customAvatar": "カスタムアバター",
+ "editAssistant": "アシスタントを編集",
+ "jan": "Jan",
+ "metadata": "メタデータ",
+ "regenerate": "再生成",
+ "threadImage": "スレッド画像",
+ "editMessage": "メッセージを編集",
+ "deleteMessage": "メッセージを削除",
+ "deleteThread": "スレッドを削除",
+ "renameThread": "スレッド名を変更",
+ "threadTitle": "スレッドのタイトル",
+ "deleteAllThreads": "すべてのスレッドを削除",
+ "allThreadsUnfavorited": "すべてのスレッドのお気に入りを解除しました",
+ "deleteAllThreadsConfirm": "本当にすべてのスレッドを削除しますか?この操作は元に戻せません。",
+ "addProvider": "プロバイダーを追加",
+ "addOpenAIProvider": "OpenAIプロバイダーを追加",
+ "enterNameForProvider": "プロバイダーの名前を入力してください",
+ "providerAlreadyExists": "プロバイダー名「{{name}}」はすでに存在します。別の名前を選択してください。",
+ "adjustFontSize": "フォントサイズを調整",
+ "changeLanguage": "言語を変更",
+ "editTheme": "テーマを編集",
+ "editCodeBlockStyle": "コードブロックのスタイルを編集",
+ "editServerHost": "サーバーホストを編集",
+ "pickColorWindowBackground": "ウィンドウの背景色を選択",
+ "pickColorAppMainView": "アプリのメインビューの色を選択",
+ "pickColorAppPrimary": "アプリのプライマリカラーを選択",
+ "pickColorAppAccent": "アプリのアクセントカラーを選択",
+ "pickColorAppDestructive": "アプリの破壊的アクションの色を選択",
+ "apiKeyRequired": "APIキーが必要です",
+ "enterTrustedHosts": "信頼できるホストを入力してください",
+ "placeholder": {
+ "chatInput": "何でも聞いてください..."
+ },
+ "confirm": "確認",
+ "continue": "続ける",
+ "loading": "読み込み中...",
+ "error": "エラー",
+ "success": "成功",
+ "warning": "警告",
+ "conversationNotAvailable": "会話を利用できません",
+ "conversationNotAvailableDescription": "アクセスしようとしている会話は利用できないか、削除されています。",
+ "temporaryChat": "一時的なチャット",
+ "temporaryChatTooltip": "一時的なチャットは履歴に表示されません",
+ "noResultsFoundDesc": "検索に一致するチャットが見つかりませんでした。別のキーワードをお試しください。",
+ "searchModels": "モデルを検索...",
+ "searchStyles": "スタイルを検索...",
+ "createAssistant": "アシスタントを作成",
+ "enterApiKey": "APIキーを入力",
+ "scrollToBottom": "一番下までスクロール",
+ "generateAiResponse": "AIの応答を生成",
+ "addModel": {
+ "title": "モデルを追加",
+ "modelId": "モデルID",
+ "enterModelId": "モデルIDを入力",
+ "addModel": "モデルを追加",
+ "description": "プロバイダーに新しいモデルを追加します",
+ "exploreModels": "プロバイダーのモデルリストを見る"
+ },
+ "mcpServers": {
+ "editServer": "サーバーを編集",
+ "addServer": "サーバーを追加",
+ "serverName": "サーバー名",
+ "enterServerName": "サーバー名を入力",
+ "command": "コマンド",
+ "enterCommand": "コマンドを入力",
+ "arguments": "引数",
+ "argument": "引数 {{index}}",
+ "envVars": "環境変数",
+ "key": "キー",
+ "value": "値",
+ "save": "保存"
+ },
+ "deleteServer": {
+ "title": "サーバーを削除",
+ "delete": "削除"
+ },
+ "editJson": {
+ "errorParse": "JSONの解析に失敗しました",
+ "errorPaste": "JSONの貼り付けに失敗しました",
+ "errorFormat": "無効なJSON形式です",
+ "titleAll": "すべてのサーバー構成を編集",
+ "placeholder": "JSON構成を入力...",
+ "save": "保存"
+ },
+ "editModel": {
+ "title": "モデルを編集: {{modelId}}",
+ "description": "以下のオプションを切り替えて、モデルの機能を設定します。",
+ "capabilities": "機能",
+ "tools": "ツール",
+ "vision": "画像認識",
+ "embeddings": "埋め込み",
+ "notAvailable": "まだ利用できません"
+ },
+ "outOfContextError": {
+ "truncateInput": "入力を切り詰める",
+ "title": "コンテキストエラー",
+ "description": "このチャットはAIのメモリ制限に近づいています。ホワイトボードがいっぱいになるようなものです。メモリウィンドウ(コンテキストサイズ)を拡張して記憶容量を増やすことができますが、コンピュータのメモリ使用量が増える可能性があります。また、入力を切り詰めることもできます。これは、新しいメッセージのためのスペースを確保するために、チャット履歴の一部を忘れることを意味します。",
+ "increaseContextSizeDescription": "コンテキストサイズを増やしますか?",
+ "increaseContextSize": "コンテキストサイズを増やす"
+ },
+ "toolApproval": {
+ "title": "ツール権限のリクエスト",
+ "description": "アシスタントは{{toolName}}を使用しようとしています",
+ "securityNotice": "信頼できるツールのみを許可してください。ツールはあなたのシステムやデータにアクセスする可能性があります。",
+ "deny": "拒否",
+ "allowOnce": "一度だけ許可",
+ "alwaysAllow": "常に許可"
+ },
+ "deleteModel": {
+ "title": "モデルを削除: {{modelId}}",
+ "description": "本当にこのモデルを削除しますか?この操作は元に戻せません。",
+ "success": "モデル {{modelId}} は完全に削除されました。",
+ "cancel": "キャンセル",
+ "delete": "削除"
+ },
+ "deleteProvider": {
+ "title": "プロバイダーを削除",
+ "description": "このプロバイダーとすべてのモデルを削除します。この操作は元に戻せません。",
+ "success": "プロバイダー {{provider}} は完全に削除されました。",
+ "confirmTitle": "プロバイダーを削除: {{provider}}",
+ "confirmDescription": "本当にこのプロバイダーを削除しますか?この操作は元に戻せません。",
+ "cancel": "キャンセル",
+ "delete": "削除"
+ },
+ "modelSettings": {
+ "title": "モデル設定 - {{modelId}}",
+ "description": "パフォーマンスと動作を最適化するためにモデル設定を構成します。"
+ },
+ "dialogs": {
+ "changeDataFolder": {
+ "title": "データフォルダの場所を変更",
+ "description": "本当にデータフォルダの場所を変更しますか?これにより、すべてのデータが新しい場所に移動し、アプリケーションが再起動します。",
+ "currentLocation": "現在の場所:",
+ "newLocation": "新しい場所:",
+ "cancel": "キャンセル",
+ "changeLocation": "場所を変更"
+ },
+ "deleteAllThreads": {
+ "title": "すべてのスレッドを削除",
+ "description": "すべてのスレッドが削除されます。この操作は元に戻せません。"
+ },
+ "deleteThread": {
+ "description": "本当にこのスレッドを削除しますか?この操作は元に戻せません。"
+ },
+ "editMessage": {
+ "title": "メッセージを編集"
+ },
+ "messageMetadata": {
+ "title": "メッセージメタデータ"
+ }
+ },
+ "projects": {
+ "title": "プロジェクト",
+ "addProject": "プロジェクトを追加",
+ "addToProject": "プロジェクトに追加",
+ "removeFromProject": "プロジェクトから削除",
+ "createNewProject": "新しいプロジェクトを作成",
+ "editProject": "プロジェクトを編集",
+ "deleteProject": "プロジェクトを削除",
+ "projectName": "プロジェクト名",
+ "enterProjectName": "プロジェクト名を入力...",
+ "noProjectsAvailable": "利用可能なプロジェクトはありません",
+ "noProjectsYet": "プロジェクトはまだありません",
+ "noProjectsYetDesc": "「プロジェクトを追加」ボタンをクリックして、新しいプロジェクトを開始してください。",
+ "projectNotFound": "プロジェクトが見つかりません",
+ "projectNotFoundDesc": "お探しのプロジェクトは存在しないか、削除されています。",
+ "deleteProjectDialog": {
+ "title": "プロジェクトを削除",
+ "description": "本当にこのプロジェクトを削除しますか?この操作は元に戻せません。",
+ "deleteButton": "削除",
+ "successWithName": "プロジェクト「{{projectName}}」を正常に削除しました",
+ "successWithoutName": "プロジェクトを正常に削除しました",
+ "error": "プロジェクトの削除に失敗しました。もう一度お試しください。",
+ "ariaLabel": "{{projectName}}を削除"
+ },
+ "addProjectDialog": {
+ "createTitle": "新しいプロジェクトを作成",
+ "editTitle": "プロジェクトを編集",
+ "nameLabel": "プロジェクト名",
+ "namePlaceholder": "プロジェクト名を入力...",
+ "createButton": "作成",
+ "updateButton": "更新",
+ "alreadyExists": "プロジェクト「{{projectName}}」はすでに存在します",
+ "createSuccess": "プロジェクト「{{projectName}}」を正常に作成しました",
+ "renameSuccess": "プロジェクト名を「{{oldName}}」から「{{newName}}」に正常に変更しました"
+ },
+ "noConversationsIn": "{{projectName}}には会話がありません",
+ "startNewConversation": "以下で{{projectName}}との新しい会話を開始します",
+ "conversationsIn": "{{projectName}}での会話",
+ "conversationsDescription": "会話をクリックしてチャットを続けるか、以下で新しい会話を開始してください。",
+ "thread": "スレッド",
+ "threads": "スレッド",
+ "updated": "更新日時:",
+ "collapseThreads": "スレッドを折りたたむ",
+ "expandThreads": "スレッドを展開する",
+ "update": "更新"
+ },
+ "toast": {
+ "allThreadsUnfavorited": {
+ "title": "すべてのスレッドのお気に入りを解除しました",
+ "description": "すべてのスレッドがお気に入りから削除されました。"
+ },
+ "deleteAllThreads": {
+ "title": "すべてのスレッドを削除",
+ "description": "すべてのスレッドが完全に削除されました。"
+ },
+ "renameThread": {
+ "title": "スレッド名を変更",
+ "description": "スレッドのタイトルが「{{title}}」に変更されました"
+ },
+ "deleteThread": {
+ "title": "スレッドを削除",
+ "description": "このスレッドは完全に削除されました。"
+ },
+ "editMessage": {
+ "title": "メッセージを編集",
+ "description": "メッセージは正常に編集されました。モデルの応答をお待ちください。"
+ },
+ "appUpdateDownloaded": {
+ "title": "アプリの更新をダウンロードしました",
+ "description": "アプリの更新は正常にダウンロードされました。"
+ },
+ "appUpdateDownloadFailed": {
+ "title": "アプリの更新のダウンロードに失敗しました",
+ "description": "アプリの更新のダウンロードに失敗しました。もう一度お試しください。"
+ },
+ "downloadComplete": {
+ "title": "ダウンロード完了",
+ "description": "{{item}}がダウンロードされました"
+ },
+ "downloadCancelled": {
+ "title": "ダウンロードがキャンセルされました",
+ "description": "ダウンロード処理はキャンセルされました"
+ },
+ "downloadFailed": {
+ "title": "ダウンロードに失敗しました",
+ "description": "{{item}}のダウンロードに失敗しました"
+ },
+ "modelValidationStarted": {
+ "title": "モデルを検証中",
+ "description": "ダウンロードしたモデル「{{modelId}}」を正常に完了しました。整合性を検証しています..."
+ },
+ "modelValidationFailed": {
+ "title": "モデルの検証に失敗しました",
+ "description": "ダウンロードしたモデル「{{modelId}}」は整合性検証に失敗し、削除されました。ファイルが破損または改ざんされている可能性があります。"
+ },
+ "downloadAndVerificationComplete": {
+ "title": "ダウンロード完了",
+ "description": "モデル「{{item}}」は正常にダウンロードおよび検証されました"
+ },
+ "projectCreated": {
+ "title": "プロジェクトが作成されました",
+ "description": "プロジェクト「{{projectName}}」は正常に作成されました"
+ },
+ "projectRenamed": {
+ "title": "プロジェクト名が変更されました",
+ "description": "プロジェクト名は「{{oldName}}」から「{{newName}}」に正常に変更されました"
+ },
+ "projectDeleted": {
+ "title": "プロジェクトが削除されました",
+ "description": "プロジェクト「{{projectName}}」は正常に削除されました"
+ },
+ "projectAlreadyExists": {
+ "title": "プロジェクトはすでに存在します",
+ "description": "プロジェクト「{{projectName}}」はすでに存在します"
+ },
+ "projectDeleteFailed": {
+ "title": "削除に失敗しました",
+ "description": "プロジェクトの削除に失敗しました。もう一度お試しください。"
+ },
+ "threadAssignedToProject": {
+ "title": "スレッドが割り当てられました",
+ "description": "スレッドは「{{projectName}}」に正常に割り当てられました"
+ },
+ "threadRemovedFromProject": {
+ "title": "スレッドが削除されました",
+ "description": "スレッドは「{{projectName}}」から正常に削除されました"
+ }
+ }
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/hub.json b/web-app/src/locales/ja/hub.json
new file mode 100644
index 000000000..f4ba5063b
--- /dev/null
+++ b/web-app/src/locales/ja/hub.json
@@ -0,0 +1,31 @@
+{
+ "sortNewest": "新着順",
+ "sortMostDownloaded": "ダウンロード数順",
+ "use": "使用",
+ "download": "ダウンロード",
+ "downloaded": "ダウンロード済み",
+ "loadingModels": "モデルを読み込み中...",
+ "noModels": "モデルが見つかりません",
+ "by": "作成者",
+ "downloads": "ダウンロード",
+ "variants": "バリアント",
+ "showVariants": "バリアントを表示",
+ "useModel": "このモデルを使用",
+ "downloadModel": "モデルをダウンロード",
+ "tools": "ツール",
+ "searchPlaceholder": "Hugging Faceでモデルを検索...",
+ "joyride": {
+ "recommendedModelTitle": "おすすめのモデル",
+ "recommendedModelContent": "さまざまなプロバイダーの強力なAIモデルを1か所で閲覧、ダウンロードできます。まずは、関数呼び出し、ツール統合、および研究機能に最適化されたモデルであるJan-Nanoから始めることをお勧めします。インタラクティブなAIエージェントの構築に最適です。",
+ "downloadInProgressTitle": "ダウンロード進行中",
+ "downloadInProgressContent": "モデルは現在ダウンロード中です。ここで進行状況を確認できます。完了すると、使用できるようになります。",
+ "downloadModelTitle": "モデルをダウンロード",
+ "downloadModelContent": "「ダウンロード」ボタンをクリックして、モデルのダウンロードを開始します。",
+ "back": "戻る",
+ "close": "閉じる",
+ "lastWithDownload": "ダウンロード",
+ "last": "完了",
+ "next": "次へ",
+ "skip": "スキップ"
+ }
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/logs.json b/web-app/src/locales/ja/logs.json
new file mode 100644
index 000000000..33aecdf9d
--- /dev/null
+++ b/web-app/src/locales/ja/logs.json
@@ -0,0 +1,3 @@
+{
+ "noLogs": "利用可能なログはありません"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/mcp-servers.json b/web-app/src/locales/ja/mcp-servers.json
new file mode 100644
index 000000000..71b9fd672
--- /dev/null
+++ b/web-app/src/locales/ja/mcp-servers.json
@@ -0,0 +1,47 @@
+{
+ "editServer": "MCPサーバーを編集",
+ "addServer": "MCPサーバーを追加",
+ "serverName": "サーバー名",
+ "enterServerName": "サーバー名を入力",
+ "command": "コマンド",
+ "enterCommand": "コマンドを入力 (uvx または npx)",
+ "arguments": "引数",
+ "argument": "引数 {{index}}",
+ "envVars": "環境変数",
+ "key": "キー",
+ "value": "値",
+ "save": "保存",
+ "status": "ステータス",
+ "connected": "接続済み",
+ "disconnected": "切断済み",
+ "deleteServer": {
+ "title": "MCPサーバーを削除",
+ "description": "本当にMCPサーバー {{serverName}} を削除しますか?この操作は元に戻せません。",
+ "delete": "削除",
+ "success": "MCPサーバー {{serverName}} を正常に削除しました"
+ },
+ "editJson": {
+ "title": "MCPサーバーのJSONを編集: {{serverName}}",
+ "titleAll": "すべてのMCPサーバーのJSONを編集",
+ "placeholder": "JSON構成を入力",
+ "errorParse": "初期データの解析に失敗しました",
+ "errorPaste": "貼り付けたコンテンツのJSON形式が無効です",
+ "errorFormat": "無効なJSON形式です",
+ "errorServerName": "サーバー名は必須であり、空にすることはできません",
+ "errorMissingServerNameKey": "JSONは {\"serverName\": {config}} のように構成する必要があります - サーバー名のキーがありません",
+ "errorInvalidType": "サーバー '{{serverName}}' のタイプ '{{type}}' が無効です。タイプは 'stdio'、'http'、または 'sse' である必要があります",
+ "save": "保存"
+ },
+ "checkParams": "チュートリアルに従ってパラメータを確認してください。",
+ "title": "MCPサーバー",
+ "experimental": "実験的",
+ "editAllJson": "すべてのサーバーのJSONを編集",
+ "findMore": "その他のMCPサーバーは以下で検索してください",
+ "allowPermissions": "すべてのMCPツール権限を許可",
+ "allowPermissionsDesc": "有効にすると、すべてのMCPツール呼び出しは許可ダイアログを表示せずに自動的に承認されます。この設定は、新しいチャットを含むすべての会話にグローバルに適用されます。",
+ "noServers": "MCPサーバーが見つかりません",
+ "args": "引数",
+ "env": "環境変数",
+ "serverStatusActive": "サーバー {{serverKey}} が正常にアクティブ化されました",
+ "serverStatusInactive": "サーバー {{serverKey}} が正常に非アクティブ化されました"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/model-errors.json b/web-app/src/locales/ja/model-errors.json
new file mode 100644
index 000000000..92035849e
--- /dev/null
+++ b/web-app/src/locales/ja/model-errors.json
@@ -0,0 +1,7 @@
+{
+ "title": "コンテキストエラー",
+ "description": "このチャットはAIのメモリ制限に近づいています。ホワイトボードがいっぱいになるようなものです。メモリウィンドウ(コンテキストサイズ)を拡張して記憶容量を増やすことができますが、コンピュータのメモリ使用量が増える可能性があります。また、入力を切り詰めることもできます。これは、新しいメッセージのためのスペースを確保するために、チャット履歴の一部を忘れることを意味します。",
+ "increaseContextSizeDescription": "コンテキストサイズを増やしますか?",
+ "truncateInput": "入力を切り詰める",
+ "increaseContextSize": "コンテキストサイズを増やす"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/provider.json b/web-app/src/locales/ja/provider.json
new file mode 100644
index 000000000..97d6f06df
--- /dev/null
+++ b/web-app/src/locales/ja/provider.json
@@ -0,0 +1,5 @@
+{
+ "addProvider": "プロバイダーを追加",
+ "addOpenAIProvider": "OpenAIプロバイダーを追加",
+ "enterNameForProvider": "プロバイダーの名前を入力してください"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/providers.json b/web-app/src/locales/ja/providers.json
new file mode 100644
index 000000000..59603a156
--- /dev/null
+++ b/web-app/src/locales/ja/providers.json
@@ -0,0 +1,74 @@
+{
+ "joyride": {
+ "chooseProviderTitle": "プロバイダーを選択",
+ "chooseProviderContent": "使用したいプロバイダーを選択し、そのAPIキーにアクセスできることを確認してください。",
+ "getApiKeyTitle": "APIキーを取得",
+ "getApiKeyContent": "プロバイダーのダッシュボードにログインして、APIキーを見つけるか生成してください。",
+ "insertApiKeyTitle": "APIキーを挿入",
+ "insertApiKeyContent": "ここにAPIキーを貼り付けて、プロバイダーに接続してアクティベートしてください。",
+ "back": "戻る",
+ "close": "閉じる",
+ "last": "完了",
+ "next": "次へ",
+ "skip": "スキップ"
+ },
+ "refreshModelsError": "モデルを取得するには、プロバイダーにベースURLとAPIキーが設定されている必要があります。",
+ "refreshModelsSuccess": "{{provider}}から{{count}}個の新しいモデルを追加しました。",
+ "noNewModels": "新しいモデルは見つかりませんでした。利用可能なすべてのモデルは既に追加されています。",
+ "refreshModelsFailed": "{{provider}}からのモデルの取得に失敗しました。APIキーとベースURLを確認してください。",
+ "models": "モデル",
+ "refreshing": "更新中...",
+ "refresh": "更新",
+ "import": "インポート",
+ "importModelSuccess": "モデル{{provider}}は正常にインポートされました。",
+ "importModelError": "モデルのインポートに失敗しました:",
+ "stop": "停止",
+ "start": "開始",
+ "noModelFound": "モデルが見つかりません",
+ "noModelFoundDesc": "利用可能なモデルはここにリストされます。まだモデルがない場合は、ハブにアクセスしてダウンロードしてください。",
+ "configuration": "設定",
+ "apiEndpoint": "APIエンドポイント",
+ "testConnection": "接続をテスト",
+ "addModel": {
+ "title": "新しいモデルを追加",
+ "description": "{{provider}}プロバイダーに新しいモデルを追加します。",
+ "modelId": "モデルID",
+ "enterModelId": "モデルIDを入力",
+ "exploreModels": "{{provider}}のモデルリストを見る",
+ "addModel": "モデルを追加",
+ "modelExists": "モデルは既に存在します",
+ "modelExistsDesc": "別のモデルIDを選択してください。"
+ },
+ "deleteModel": {
+ "title": "モデルを削除: {{modelId}}",
+ "description": "本当にこのモデルを削除しますか?この操作は元に戻せません。",
+ "success": "モデル {{modelId}} は完全に削除されました。",
+ "cancel": "キャンセル",
+ "delete": "削除"
+ },
+ "deleteProvider": {
+ "title": "プロバイダーを削除",
+ "description": "このプロバイダーとすべてのモデルを削除します。この操作は元に戻せません。",
+ "success": "プロバイダー {{provider}} は完全に削除されました。",
+ "confirmTitle": "プロバイダーを削除: {{provider}}",
+ "confirmDescription": "本当にこのプロバイダーを削除しますか?この操作は元に戻せません。",
+ "cancel": "キャンセル",
+ "delete": "削除"
+ },
+ "editModel": {
+ "title": "モデルを編集: {{modelId}}",
+ "description": "以下のオプションを切り替えて、モデルの機能を設定します。",
+ "capabilities": "機能",
+ "tools": "ツール",
+ "vision": "画像認識",
+ "embeddings": "埋め込み",
+ "notAvailable": "まだ利用できません",
+ "warning": {
+ "title": "注意して進めてください",
+ "description": "モデルの機能を変更すると、パフォーマンスや機能に影響を与える可能性があります。不正な設定は、予期しない動作やエラーを引き起こす可能性があります。"
+ }
+ },
+ "addProvider": "プロバイダーを追加",
+ "addOpenAIProvider": "OpenAIプロバイダーを追加",
+ "enterNameForProvider": "プロバイダーの名前を入力してください"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/settings.json b/web-app/src/locales/ja/settings.json
new file mode 100644
index 000000000..4e59037c1
--- /dev/null
+++ b/web-app/src/locales/ja/settings.json
@@ -0,0 +1,277 @@
+{
+ "autoDownload": "新しいアップデートを自動的にダウンロード",
+ "checkForUpdates": "アップデートを確認",
+ "checkForUpdatesDesc": "Janの新しいバージョンが利用可能かどうかを確認します。",
+ "checkingForUpdates": "アップデートを確認中...",
+ "noUpdateAvailable": "最新バージョンを実行しています",
+ "devVersion": "開発バージョンが検出されました",
+ "updateError": "アップデートの確認に失敗しました",
+ "checkForBackendUpdates": "Llamacppのアップデートを確認",
+ "checkForBackendUpdatesDesc": "Llamacppバックエンドの新しいバージョンが利用可能かどうかを確認します。",
+ "checkingForBackendUpdates": "Llamacppのアップデートを確認中...",
+ "noBackendUpdateAvailable": "最新のLlamacppバージョンを実行しています",
+ "backendUpdateError": "Llamacppのアップデートの確認に失敗しました",
+ "changeLocation": "場所を変更",
+ "copied": "コピーしました",
+ "copyPath": "パスをコピー",
+ "openLogs": "ログを開く",
+ "revealLogs": "ログを表示",
+ "showInFinder": "Finderで表示",
+ "showInFileExplorer": "ファイルエクスプローラーで表示",
+ "openContainingFolder": "含まれているフォルダーを開く",
+ "failedToRelocateDataFolder": "データフォルダの移動に失敗しました",
+ "failedToRelocateDataFolderDesc": "データフォルダの移動に失敗しました。もう一度お試しください。",
+ "factoryResetTitle": "工場出荷時の設定にリセット",
+ "factoryResetDesc": "これにより、すべてのアプリ設定がデフォルトにリセットされます。この操作は元に戻せません。アプリが破損している場合にのみ、この操作をお勧めします。",
+ "cancel": "キャンセル",
+ "reset": "リセット",
+ "resources": "リソース",
+ "documentation": "ドキュメント",
+ "documentationDesc": "Janの使用方法を学び、その機能を探ります。",
+ "viewDocs": "ドキュメントを見る",
+ "releaseNotes": "リリースノート",
+ "releaseNotesDesc": "Janの最新バージョンで何が新しいかをご覧ください。",
+ "viewReleases": "リリースを見る",
+ "community": "コミュニティ",
+ "github": "GitHub",
+ "githubDesc": "Janの開発に貢献します。",
+ "discord": "Discord",
+ "discordDesc": "サポートやディスカッションのために私たちのコミュニティに参加してください。",
+ "support": "サポート",
+ "reportAnIssue": "問題を報告",
+ "reportAnIssueDesc": "バグを見つけましたか?GitHubで問題を報告して、私たちを助けてください。",
+ "reportIssue": "問題を報告",
+ "credits": "クレジット",
+ "creditsDesc1": "👋 JanはMenlo Researchチームによって❤️を込めて作られています。",
+ "creditsDesc2": "オープンソースの依存関係、特にllama.cppとTauri、そして素晴らしいAIコミュニティに感謝します。",
+ "appVersion": "アプリのバージョン",
+ "dataFolder": {
+ "appData": "アプリデータ",
+ "appDataDesc": "メッセージやその他のユーザーデータのデフォルトの場所。",
+ "appLogs": "アプリログ",
+ "appLogsDesc": "アプリの詳細なログを表示します。"
+ },
+ "others": {
+ "spellCheck": "スペルチェック",
+ "spellCheckDesc": "スレッドのスペルチェックを有効にします。",
+ "resetFactory": "工場出荷時の設定にリセット",
+ "resetFactoryDesc": "アプリケーションを初期状態に戻し、すべてのモデルとチャット履歴を消去します。この操作は元に戻すことができず、アプリケーションが破損している場合にのみ推奨されます。"
+ },
+ "shortcuts": {
+ "application": "アプリケーション",
+ "newChat": "新しいチャット",
+ "newChatDesc": "新しいチャットを作成します。",
+ "toggleSidebar": "サイドバーの切り替え",
+ "toggleSidebarDesc": "サイドバーを表示または非表示にします。",
+ "zoomIn": "ズームイン",
+ "zoomInDesc": "ズームレベルを上げます。",
+ "zoomOut": "ズームアウト",
+ "zoomOutDesc": "ズームレベルを下げます。",
+ "chat": "チャット",
+ "sendMessage": "メッセージを送信",
+ "sendMessageDesc": "現在のメッセージを送信します。",
+ "enter": "Enter",
+ "newLine": "改行",
+ "newLineDesc": "新しい行を挿入します。",
+ "shiftEnter": "Shift + Enter",
+ "navigation": "ナビゲーション",
+ "goToSettings": "設定に移動",
+ "goToSettingsDesc": "設定を開きます。"
+ },
+ "appearance": {
+ "title": "外観",
+ "theme": "テーマ",
+ "themeDesc": "OSのテーマに合わせます。",
+ "fontSize": "フォントサイズ",
+ "fontSizeDesc": "アプリのフォントサイズを調整します。",
+ "windowBackground": "ウィンドウの背景",
+ "windowBackgroundDesc": "アプリウィンドウの背景色を設定します。",
+ "appMainView": "アプリのメインビュー",
+ "appMainViewDesc": "メインコンテンツエリアの背景色を設定します。",
+ "primary": "プライマリ",
+ "primaryDesc": "UIコンポーネントのプライマリカラーを設定します。",
+ "accent": "アクセント",
+ "accentDesc": "UIのハイライトのアクセントカラーを設定します。",
+ "destructive": "破壊的",
+ "destructiveDesc": "破壊的なアクションの色を設定します。",
+ "resetToDefault": "デフォルトにリセット",
+ "resetToDefaultDesc": "すべての外観設定をデフォルトにリセットします。",
+ "resetAppearanceSuccess": "外観が正常にリセットされました",
+ "resetAppearanceSuccessDesc": "すべての外観設定がデフォルトに復元されました。",
+ "chatWidth": "チャットの幅",
+ "chatWidthDesc": "チャットビューの幅をカスタマイズします。",
+ "tokenCounterCompact": "コンパクトなトークンカウンター",
+ "tokenCounterCompactDesc": "チャット入力内にトークンカウンターを表示します。無効にすると、トークンカウンターは入力の下に表示されます。",
+ "codeBlockTitle": "コードブロック",
+ "codeBlockDesc": "構文のハイライトスタイルを選択します。",
+ "showLineNumbers": "行番号を表示",
+ "showLineNumbersDesc": "コードブロックに行番号を表示します。",
+ "resetCodeBlockStyle": "コードブロックスタイルをリセット",
+ "resetCodeBlockStyleDesc": "コードブロックスタイルをデフォルトにリセットします。",
+ "resetCodeBlockSuccess": "コードブロックスタイルが正常にリセットされました",
+ "resetCodeBlockSuccessDesc": "コードブロックスタイルがデフォルトに復元されました。"
+ },
+ "hardware": {
+ "os": "オペレーティングシステム",
+ "name": "名前",
+ "version": "バージョン",
+ "cpu": "CPU",
+ "model": "モデル",
+ "architecture": "アーキテクチャ",
+ "cores": "コア",
+ "instructions": "命令",
+ "usage": "使用状況",
+ "memory": "メモリ",
+ "totalRam": "合計RAM",
+ "availableRam": "利用可能なRAM",
+ "vulkan": "Vulkan",
+ "enableVulkan": "Vulkanを有効にする",
+ "enableVulkanDesc": "GPUアクセラレーションにVulkan APIを使用します。互換性の問題が発生する可能性があるため、NVIDIA GPUがある場合はVulkanを有効にしないでください。",
+ "gpus": "GPU",
+ "noGpus": "GPUが検出されませんでした",
+ "vram": "VRAM",
+ "freeOf": " / 空き",
+ "driverVersion": "ドライバーのバージョン",
+ "computeCapability": "計算能力",
+ "systemMonitor": "システムモニター"
+ },
+ "httpsProxy": {
+ "proxy": "プロキシ",
+ "proxyUrl": "プロキシURL",
+ "proxyUrlDesc": "プロキシサーバーのURLとポート。",
+ "proxyUrlPlaceholder": "http://proxy.example.com:8080",
+ "authentication": "認証",
+ "authenticationDesc": "必要に応じて、プロキシサーバーの資格情報。",
+ "username": "ユーザー名",
+ "password": "パスワード",
+ "noProxy": "プロキシなし",
+ "noProxyDesc": "プロキシをバイパスするホストのカンマ区切りリスト。",
+ "noProxyPlaceholder": "localhost,127.0.0.1,.local",
+ "sslVerification": "SSL検証",
+ "ignoreSsl": "SSL証明書を無視",
+ "ignoreSslDesc": "自己署名または未検証の証明書を許可します。一部のプロキシで必要になる場合がありますが、セキュリティが低下します。プロキシを信頼する場合にのみ有効にしてください。",
+ "proxySsl": "プロキシSSL",
+ "proxySslDesc": "プロキシに接続するときにSSL証明書を検証します。",
+ "proxyHostSsl": "プロキシホストSSL",
+ "proxyHostSslDesc": "プロキシのホストのSSL証明書を検証します。",
+ "peerSsl": "ピアSSL",
+ "peerSslDesc": "ピア接続のSSL証明書を検証します。",
+ "hostSsl": "ホストSSL",
+ "hostSslDesc": "宛先ホストのSSL証明書を検証します。"
+ },
+ "localApiServer": {
+ "title": "ローカルAPIサーバー",
+ "description": "OpenAI互換サーバーをローカルで実行します。",
+ "startServer": "サーバーを開始",
+ "loadingModel": "モデルを読み込み中",
+ "startingServer": "サーバーを起動中",
+ "stopServer": "サーバーを停止",
+ "serverLogs": "サーバーログ",
+ "serverLogsDesc": "ローカルAPIサーバーの詳細なログを表示します。",
+ "openLogs": "ログを開く",
+ "startupConfiguration": "起動設定",
+ "runOnStartup": "起動時にデフォルトで有効にする",
+ "runOnStartupDesc": "アプリケーションの起動時にローカルAPIサーバーを自動的に開始します。",
+ "serverConfiguration": "サーバー設定",
+ "serverHost": "サーバーホスト",
+ "serverHostDesc": "サーバーのネットワークアドレス。",
+ "serverPort": "サーバーポート",
+ "serverPortDesc": "APIサーバーのポート番号。",
+ "apiPrefix": "APIプレフィックス",
+ "apiPrefixDesc": "APIエンドポイントのパスプレフィックス。",
+ "apiKey": "APIキー",
+ "apiKeyDesc": "APIキーでリクエストを認証します。",
+ "trustedHosts": "信頼できるホスト",
+ "trustedHostsDesc": "サーバーへのアクセスを許可されているホスト(カンマ区切り)。",
+ "advancedSettings": "詳細設定",
+ "cors": "クロスオリジンリソース共有(CORS)",
+ "corsDesc": "APIサーバーへのクロスオリジンリクエストを許可します。",
+ "verboseLogs": "詳細なサーバーログ",
+ "verboseLogsDesc": "デバッグ用に詳細なサーバーログを有効にします。",
+ "proxyTimeout": "リクエストタイムアウト",
+ "proxyTimeoutDesc": "ローカルモデルからの応答を待機する時間(秒)。"
+ },
+ "privacy": {
+ "analytics": "分析",
+ "helpUsImprove": "改善にご協力ください",
+ "helpUsImproveDesc": "Janの改善にご協力いただくため、機能の使用状況やユーザー数などの匿名データを共有していただけます。チャットや個人情報を収集することはありません。",
+ "privacyPolicy": "あなたは自分のデータを完全に管理できます。詳細はプライバシーポリシーをご覧ください。",
+ "analyticsDesc": "Janを改善するためには、どのように使用されているかを理解する必要がありますが、それはあなたの協力があってこそです。この設定はいつでも変更できます。",
+ "privacyPromises": "ここでの選択は、私たちの中心的なプライバシーの約束を変更するものではありません:",
+ "promise1": "あなたの会話はプライベートで、あなたのデバイス上に留まります",
+ "promise2": "私たちはあなたの個人情報やチャットの内容を収集しません",
+ "promise3": "すべてのデータ共有は匿名で集計されます",
+ "promise4": "機能を失うことなく、いつでもオプトアウトできます",
+ "promise5": "収集するものとその理由について透明性を保ちます"
+ },
+ "general": {
+ "showInFinder": "Finderで表示",
+ "showInFileExplorer": "ファイルエクスプローラーで表示",
+ "openContainingFolder": "含まれているフォルダーを開く",
+ "failedToRelocateDataFolder": "データフォルダの移動に失敗しました",
+ "couldNotRelocateToRoot": "データフォルダをルートディレクトリに移動できません。別の場所を選択してください。",
+ "couldNotResetRootDirectory": "データフォルダがルートディレクトリに設定されている場合、リセットできません。データフォルダを手動で削除してください。",
+ "failedToRelocateDataFolderDesc": "データフォルダの移動に失敗しました。もう一度お試しください。",
+ "devVersion": "開発バージョンが検出されました",
+ "noUpdateAvailable": "最新バージョンを実行しています",
+ "updateError": "アップデートの確認に失敗しました",
+ "appVersion": "アプリのバージョン",
+ "checkForUpdates": "アップデートを確認",
+ "checkForUpdatesDesc": "Janの新しいバージョンが利用可能かどうかを確認します。",
+ "checkingForUpdates": "アップデートを確認中...",
+ "copied": "コピーしました",
+ "copyPath": "パスをコピー",
+ "changeLocation": "場所を変更",
+ "openLogs": "ログを開く",
+ "revealLogs": "ログを表示",
+ "factoryResetTitle": "工場出荷時の設定にリセット",
+ "factoryResetDesc": "これにより、すべてのアプリ設定がデフォルトにリセットされます。この操作は元に戻せません。アプリが破損している場合にのみ、この操作をお勧めします。",
+ "cancel": "キャンセル",
+ "reset": "リセット",
+ "huggingfaceToken": "HuggingFaceトークン",
+ "huggingfaceTokenDesc": "モデルにアクセスするためのHuggingFace APIトークン。",
+ "resources": "リソース",
+ "documentation": "ドキュメント",
+ "documentationDesc": "Janの使用方法を学び、その機能を探ります。",
+ "viewDocs": "ドキュメントを見る",
+ "releaseNotes": "リリースノート",
+ "releaseNotesDesc": "Janの最新バージョンで何が新しいかをご覧ください。",
+ "viewReleases": "リリースを見る",
+ "community": "コミュニティ",
+ "github": "GitHub",
+ "githubDesc": "Janの開発に貢献します。",
+ "discord": "Discord",
+ "discordDesc": "サポートやディスカッションのために私たちのコミュニティに参加してください。",
+ "support": "サポート",
+ "reportAnIssue": "問題を報告",
+ "reportAnIssueDesc": "バグを見つけましたか?GitHubで問題を報告して、私たちを助けてください。",
+ "reportIssue": "問題を報告",
+ "credits": "クレジット",
+ "creditsDesc1": "👋 JanはMenlo Researchチームによって❤️を込めて作られています。",
+ "creditsDesc2": "オープンソースの依存関係、特にllama.cppとTauri、そして素晴らしいAIコミュニティに感謝します。"
+ },
+ "extensions": {
+ "title": "拡張機能"
+ },
+ "dialogs": {
+ "changeDataFolder": {
+ "title": "データフォルダの場所を変更",
+ "description": "本当にデータフォルダの場所を変更しますか?これにより、すべてのデータが新しい場所に移動し、アプリケーションが再起動します。",
+ "currentLocation": "現在の場所:",
+ "newLocation": "新しい場所:",
+ "cancel": "キャンセル",
+ "changeLocation": "場所を変更"
+ }
+ },
+ "backendUpdater": {
+ "newBackendVersion": "新しいLlamacppバージョン {{version}}",
+ "backendUpdateAvailable": "Llamacppのアップデートが利用可能です",
+ "remindMeLater": "後で通知",
+ "updating": "更新中...",
+ "updateNow": "今すぐ更新",
+ "updateSuccess": "Llamacppは正常に更新されました",
+ "updateError": "Llamacppの更新に失敗しました"
+ },
+ "backendInstallSuccess": "バックエンドは正常にインストールされました",
+ "backendInstallError": "バックエンドのインストールに失敗しました"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/setup.json b/web-app/src/locales/ja/setup.json
new file mode 100644
index 000000000..9a3d495a7
--- /dev/null
+++ b/web-app/src/locales/ja/setup.json
@@ -0,0 +1,6 @@
+{
+ "welcome": "Janへようこそ",
+ "description": "始めるには、ローカルAIモデルをダウンロードするか、APIキーを使用してクラウドモデルに接続する必要があります",
+ "localModel": "ローカルモデルをセットアップ",
+ "remoteProvider": "リモートプロバイダーをセットアップ"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/system-monitor.json b/web-app/src/locales/ja/system-monitor.json
new file mode 100644
index 000000000..a5ee94cc3
--- /dev/null
+++ b/web-app/src/locales/ja/system-monitor.json
@@ -0,0 +1,28 @@
+{
+ "title": "システムモニター",
+ "cpuUsage": "CPU使用率",
+ "model": "モデル",
+ "cores": "コア",
+ "architecture": "アーキテクチャ",
+ "currentUsage": "現在の使用率",
+ "memoryUsage": "メモリ使用率",
+ "totalRam": "合計RAM",
+ "availableRam": "利用可能なRAM",
+ "usedRam": "使用済みRAM",
+ "runningModels": "実行中のモデル",
+ "noRunningModels": "現在実行中のモデルはありません",
+ "provider": "プロバイダー",
+ "uptime": "稼働時間",
+ "actions": "アクション",
+ "stop": "停止",
+ "activeGpus": "アクティブなGPU",
+ "noGpus": "GPUが検出されませんでした",
+ "noActiveGpus": "アクティブなGPUはありません。すべてのGPUは現在無効になっています。",
+ "vramUsage": "VRAM使用率",
+ "driverVersion": "ドライバーバージョン:",
+ "computeCapability": "計算能力:",
+ "active": "アクティブ",
+ "performance": "パフォーマンス",
+ "resources": "リソース",
+ "refresh": "更新"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/tool-approval.json b/web-app/src/locales/ja/tool-approval.json
new file mode 100644
index 000000000..48cecf3fb
--- /dev/null
+++ b/web-app/src/locales/ja/tool-approval.json
@@ -0,0 +1,12 @@
+{
+ "title": "ツール呼び出しリクエスト",
+ "description": "アシスタントは次のツールを使用しようとしています: {{toolName}}",
+ "securityNotice": "セキュリティに関するお知らせ: 悪意のあるツールや会話の内容は、アシスタントを騙して有害なアクションを試みさせる可能性があります。承認する前に、各ツール呼び出しを注意深く確認してください。",
+ "deny": "拒否",
+ "allowOnce": "一度だけ許可",
+ "alwaysAllow": "スレッドで許可",
+ "permissions": "権限",
+ "approve": "承認",
+ "reject": "拒否",
+ "parameters": "ツールパラメータ"
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/tools.json b/web-app/src/locales/ja/tools.json
new file mode 100644
index 000000000..edc8df3f1
--- /dev/null
+++ b/web-app/src/locales/ja/tools.json
@@ -0,0 +1,12 @@
+{
+ "toolApproval": {
+ "title": "ツールの承認が必要です",
+ "description": "アシスタントは以下を使用しようとしています",
+ "securityNotice": "悪意のあるツールや会話の内容は、アシスタントを騙して有害なアクションを試みさせる可能性があります。承認する前に、各ツール呼び出しを注意深く確認してください。",
+ "deny": "拒否",
+ "allowOnce": "一度だけ許可",
+ "alwaysAllow": "スレッドで許可",
+ "parameters": "ツールパラメータ",
+ "permissionScope": "付与された権限は、この会話にのみ適用されます。"
+ }
+}
\ No newline at end of file
diff --git a/web-app/src/locales/ja/updater.json b/web-app/src/locales/ja/updater.json
new file mode 100644
index 000000000..ad4656f0e
--- /dev/null
+++ b/web-app/src/locales/ja/updater.json
@@ -0,0 +1,10 @@
+{
+ "newVersion": "新しいバージョン {{version}}",
+ "updateAvailable": "アップデートが利用可能です",
+ "nightlyBuild": "ナイトリービルド",
+ "showReleaseNotes": "リリースノートを表示",
+ "hideReleaseNotes": "リリースノートを非表示",
+ "remindMeLater": "後で通知",
+ "downloading": "ダウンロード中...",
+ "updateNow": "今すぐ更新"
+}
\ No newline at end of file