Browse Source

Feat/jpn support (#2651)

crazywoola 1 year ago
parent
commit
444aba55dd

+ 2 - 6
web/app/components/header/account-about/index.tsx

@@ -2,14 +2,11 @@
 import { useTranslation } from 'react-i18next'
 import classNames from 'classnames'
 import Link from 'next/link'
-import { useContext } from 'use-context-selector'
 import s from './index.module.css'
 import Modal from '@/app/components/base/modal'
 import { XClose } from '@/app/components/base/icons/src/vender/line/general'
 import type { LangGeniusVersionResponse } from '@/models/common'
 import { IS_CE_EDITION } from '@/config'
-import I18n from '@/context/i18n'
-import { LanguagesSupported } from '@/i18n/language'
 import LogoSite from '@/app/components/base/logo/logo-site'
 
 type IAccountSettingProps = {
@@ -25,7 +22,6 @@ export default function AccountAbout({
   onCancel,
 }: IAccountSettingProps) {
   const { t } = useTranslation()
-  const { locale } = useContext(I18n)
   const isLatest = langeniusVersionInfo.current_version === langeniusVersionInfo.latest_version
 
   return (
@@ -48,8 +44,8 @@ export default function AccountAbout({
                 IS_CE_EDITION
                   ? <Link href={'https://github.com/langgenius/dify/blob/main/LICENSE'} target='_blank' rel='noopener noreferrer'>Open Source License</Link>
                   : <>
-                    <Link href={locale !== LanguagesSupported[1] ? 'https://docs.dify.ai/user-agreement/privacy-policy' : 'https://docs.dify.ai/v/zh-hans/user-agreement/privacy-policy'} target='_blank' rel='noopener noreferrer'>Privacy Policy</Link>,
-                    <Link href={locale !== LanguagesSupported[1] ? 'https://docs.dify.ai/user-agreement/terms-of-service' : 'https://docs.dify.ai/v/zh-hans/user-agreement/terms-of-service'} target='_blank' rel='noopener noreferrer'>Terms of Service</Link>
+                    <Link href='https://dify.ai/privacy' target='_blank' rel='noopener noreferrer'>Privacy Policy</Link>,
+                    <Link href='https://dify.ai/terms' target='_blank' rel='noopener noreferrer'>Terms of Service</Link>
                   </>
               }
             </div>

+ 2 - 3
web/app/signin/normalForm.tsx

@@ -12,7 +12,6 @@ import { IS_CE_EDITION, apiPrefix } from '@/config'
 import Button from '@/app/components/base/button'
 import { login, oauth } from '@/service/common'
 import I18n from '@/context/i18n'
-import { LanguagesSupported } from '@/i18n/language'
 import { getPurifyHref } from '@/utils'
 const validEmailReg = /^[\w\.-]+@([\w-]+\.)+[\w-]{2,}$/
 
@@ -282,13 +281,13 @@ const NormalForm = () => {
             <Link
               className='text-primary-600'
               target='_blank' rel='noopener noreferrer'
-              href={locale !== LanguagesSupported[1] ? 'https://docs.dify.ai/user-agreement/terms-of-service' : 'https://docs.dify.ai/v/zh-hans/user-agreement/terms-of-service'}
+              href='https://dify.ai/terms'
             >{t('login.tos')}</Link>
             &nbsp;&&nbsp;
             <Link
               className='text-primary-600'
               target='_blank' rel='noopener noreferrer'
-              href={locale !== LanguagesSupported[1] ? 'https://docs.dify.ai/user-agreement/privacy-policy' : 'https://docs.dify.ai/v/zh-hans/user-agreement/privacy-policy'}
+              href='https://dify.ai/privacy'
             >{t('login.pp')}</Link>
           </div>
 

+ 87 - 0
web/i18n/ja-JP/app-annotation.ts

@@ -0,0 +1,87 @@
+const translation = {
+  title: '注釈',
+  name: '注釈の返信',
+  editBy: '{{author}} によって編集された回答',
+  noData: {
+    title: '注釈がありません',
+    description: 'ここではアプリのデバッグ中に注釈を編集したり、一括で注釈をインポートしたりして高品質の応答を行うことができます。',
+  },
+  table: {
+    header: {
+      question: '質問',
+      answer: '回答',
+      createdAt: '作成日時',
+      hits: 'ヒット数',
+      actions: 'アクション',
+      addAnnotation: '注釈を追加',
+      bulkImport: '一括インポート',
+      bulkExport: '一括エクスポート',
+      clearAll: 'すべての注釈をクリア',
+    },
+  },
+  editModal: {
+    title: '注釈の返信を編集',
+    queryName: 'ユーザーのクエリ',
+    answerName: 'ストーリーテラーボット',
+    yourAnswer: 'あなたの回答',
+    answerPlaceholder: 'ここに回答を入力してください',
+    yourQuery: 'あなたのクエリ',
+    queryPlaceholder: 'ここにクエリを入力してください',
+    removeThisCache: 'この注釈を削除',
+    createdAt: '作成日時',
+  },
+  addModal: {
+    title: '注釈の返信を追加',
+    queryName: '質問',
+    answerName: '回答',
+    answerPlaceholder: 'ここに回答を入力してください',
+    queryPlaceholder: 'ここに質問を入力してください',
+    createNext: '別の注釈付きの応答を追加',
+  },
+  batchModal: {
+    title: '一括インポート',
+    csvUploadTitle: 'CSVファイルをここにドラッグ&ドロップするか、',
+    browse: '参照',
+    tip: 'CSVファイルは以下の構造に準拠する必要があります:',
+    question: '質問',
+    answer: '回答',
+    contentTitle: 'チャンクの内容',
+    content: '内容',
+    template: 'テンプレートをここからダウンロード',
+    cancel: 'キャンセル',
+    run: '一括実行',
+    runError: '一括実行に失敗しました',
+    processing: '一括処理中',
+    completed: 'インポートが完了しました',
+    error: 'インポートエラー',
+    ok: 'OK',
+  },
+  errorMessage: {
+    answerRequired: '回答は必須です',
+    queryRequired: '質問は必須です',
+  },
+  viewModal: {
+    annotatedResponse: '注釈の返信',
+    hitHistory: 'ヒット履歴',
+    hit: 'ヒット',
+    hits: 'ヒット数',
+    noHitHistory: 'ヒット履歴はありません',
+  },
+  hitHistoryTable: {
+    query: 'クエリ',
+    match: '一致',
+    response: '応答',
+    source: 'ソース',
+    score: 'スコア',
+    time: '時間',
+  },
+  initSetup: {
+    title: '注釈の返信の初期設定',
+    configTitle: '注釈の返信の設定',
+    confirmBtn: '保存して有効にする',
+    configConfirmBtn: '保存',
+  },
+  embeddingModelSwitchTip: '注釈テキストのベクトル化モデルです。モデルを切り替えると再埋め込みが行われ、追加のコストが発生します。',
+}
+
+export default translation

+ 82 - 0
web/i18n/ja-JP/app-api.ts

@@ -0,0 +1,82 @@
+const translation = {
+  apiServer: 'APIサーバー',
+  apiKey: 'APIキー',
+  status: 'ステータス',
+  disabled: '無効',
+  ok: '稼働中',
+  copy: 'コピー',
+  copied: 'コピー済み',
+  play: '再生',
+  pause: '一時停止',
+  playing: '再生中',
+  merMaind: {
+    rerender: '再レンダリング',
+  },
+  never: 'なし',
+  apiKeyModal: {
+    apiSecretKey: 'APIシークレットキー',
+    apiSecretKeyTips: 'APIの悪用を防ぐために、APIキーを保護してください。フロントエンドのコードで平文として使用しないでください。:)',
+    createNewSecretKey: '新しいシークレットキーを作成',
+    secretKey: 'シークレットキー',
+    created: '作成日時',
+    lastUsed: '最終使用日時',
+    generateTips: 'このキーを安全でアクセス可能な場所に保管してください。',
+  },
+  actionMsg: {
+    deleteConfirmTitle: 'このシークレットキーを削除しますか?',
+    deleteConfirmTips: 'この操作は元に戻すことはできません。',
+    ok: 'OK',
+  },
+  completionMode: {
+    title: '補完アプリAPI',
+    info: '記事、要約、翻訳などの高品質なテキスト生成には、ユーザーの入力を使用した補完メッセージAPIを使用します。テキスト生成は、Dify Prompt Engineeringで設定されたモデルパラメータとプロンプトテンプレートに依存しています。',
+    createCompletionApi: '補完メッセージの作成',
+    createCompletionApiTip: '質疑応答モードをサポートするために、補完メッセージを作成します。',
+    inputsTips: '(オプション)Prompt Engの変数に対応するキーと値のペアとしてユーザー入力フィールドを提供します。キーは変数名で、値はパラメータの値です。フィールドのタイプがSelectの場合、送信される値は事前に設定された選択肢のいずれかである必要があります。',
+    queryTips: 'ユーザーの入力テキスト内容。',
+    blocking: 'ブロッキングタイプで、実行が完了して結果が返されるまで待機します。(処理が長い場合、リクエストは中断される場合があります)',
+    streaming: 'ストリーミングの返却。SSE(Server-Sent Events)に基づいたストリーミングの返却の実装。',
+    messageFeedbackApi: 'メッセージフィードバック(いいね)',
+    messageFeedbackApiTip: 'エンドユーザーの代わりに受信したメッセージを「いいね」または「いいね」で評価します。このデータはログ&注釈ページで表示され、将来のモデルの微調整に使用されます。',
+    messageIDTip: 'メッセージID',
+    ratingTip: 'いいねまたはいいね、nullは元に戻す',
+    parametersApi: 'アプリケーションパラメータ情報の取得',
+    parametersApiTip: '変数名、フィールド名、タイプ、デフォルト値を含む設定済みの入力パラメータを取得します。通常、これらのフィールドをフォームに表示したり、クライアントの読み込み後にデフォルト値を入力したりするために使用されます。',
+  },
+  chatMode: {
+    title: 'チャットアプリAPI',
+    info: '質疑応答形式を使用した多目的の対話型アプリケーションには、チャットメッセージAPIを呼び出して対話を開始します。返されたconversation_idを渡すことで、継続的な会話を維持します。応答パラメータとテンプレートは、Dify Prompt Engの設定に依存します。',
+    createChatApi: 'チャットメッセージの作成',
+    createChatApiTip: '新しい会話メッセージを作成するか、既存の対話を継続します。',
+    inputsTips: '(オプション)Prompt Engの変数に対応するキーと値のペアとしてユーザー入力フィールドを提供します。キーは変数名で、値はパラメータの値です。フィールドのタイプがSelectの場合、送信される値は事前に設定された選択肢のいずれかである必要があります。',
+    queryTips: 'ユーザーの入力/質問内容',
+    blocking: 'ブロッキングタイプで、実行が完了して結果が返されるまで待機します。(処理が長い場合、リクエストは中断される場合があります)',
+    streaming: 'ストリーミングの返却。SSE(Server-Sent Events)に基づいたストリーミングの返却の実装。',
+    conversationIdTip: '(オプション)会話ID:初回の会話の場合は空白のままにしておき、継続する場合はコンテキストからconversation_idを渡します。',
+    messageFeedbackApi: 'メッセージ端末ユーザーフィードバック、いいね',
+    messageFeedbackApiTip: 'エンドユーザーの代わりに受信したメッセージを「いいね」または「いいね」で評価します。このデータはログ&注釈ページで表示され、将来のモデルの微調整に使用されます。',
+    messageIDTip: 'メッセージID',
+    ratingTip: 'いいねまたはいいね、nullは元に戻す',
+    chatMsgHistoryApi: 'チャット履歴メッセージの取得',
+    chatMsgHistoryApiTip: '最初のページは最新の「limit」バーを返します。逆順です。',
+    chatMsgHistoryConversationIdTip: '会話ID',
+    chatMsgHistoryFirstId: '現在のページの最初のチャットレコードのID。デフォルトはなし。',
+    chatMsgHistoryLimit: '1回のリクエストで返されるチャットの数',
+    conversationsListApi: '会話リストの取得',
+    conversationsListApiTip: '現在のユーザーのセッションリストを取得します。デフォルトでは、最後の20のセッションが返されます。',
+    conversationsListFirstIdTip: '現在のページの最後のレコードのID、デフォルトはなし。',
+    conversationsListLimitTip: '1回のリクエストで返されるチャットの数',
+    conversationRenamingApi: '会話の名前変更',
+    conversationRenamingApiTip: '会話の名前を変更します。名前はマルチセッションクライアントインターフェースに表示されます。',
+    conversationRenamingNameTip: '新しい名前',
+    parametersApi: 'アプリケーションパラメータ情報の取得',
+    parametersApiTip: '変数名、フィールド名、タイプ、デフォルト値を含む設定済みの入力パラメータを取得します。通常、これらのフィールドをフォームに表示したり、クライアントの読み込み後にデフォルト値を入力したりするために使用されます。',
+  },
+  develop: {
+    requestBody: 'リクエストボディ',
+    pathParams: 'パスパラメータ',
+    query: 'クエリ',
+  },
+}
+
+export default translation

+ 408 - 0
web/i18n/ja-JP/app-debug.ts

@@ -0,0 +1,408 @@
+const translation = {
+  pageTitle: {
+    line1: 'プロンプト',
+    line2: 'エンジニアリング',
+  },
+  orchestrate: 'Orchestrate',
+  promptMode: {
+    simple: 'エキスパートモードに切り替えて、PROMPT全体を編集します',
+    advanced: 'エキスパートモード',
+    switchBack: '基本モードに戻る',
+    advancedWarning: {
+      title: 'エキスパートモードに切り替えました。PROMPTを変更すると、基本モードに戻ることはできません。',
+      description: 'エキスパートモードでは、PROMPT全体を編集できます。',
+      learnMore: '詳細を見る',
+      ok: 'OK',
+    },
+    operation: {
+      addMessage: 'メッセージを追加',
+    },
+    contextMissing: 'コンテキストコンポーネントが見つかりません。プロンプトの効果が十分でない場合があります。',
+  },
+  operation: {
+    applyConfig: '公開',
+    resetConfig: 'リセット',
+    debugConfig: 'デバッグ',
+    addFeature: '機能を追加',
+    automatic: '自動',
+    stopResponding: '応答を停止',
+    agree: 'いいね',
+    disagree: 'いいえ',
+    cancelAgree: 'いいねをキャンセル',
+    cancelDisagree: 'いいえをキャンセル',
+    userAction: 'ユーザー',
+  },
+  notSetAPIKey: {
+    title: 'LLMプロバイダーキーが設定されていません',
+    trailFinished: 'トライアル終了',
+    description: 'LLMプロバイダーキーが設定されていません。デバッグする前に設定する必要があります。',
+    settingBtn: '設定に移動',
+  },
+
+  trailUseGPT4Info: {
+    title: '現在、gpt-4はサポートされていません',
+    description: 'gpt-4を使用するには、APIキーを設定してください。',
+  },
+  feature: {
+    groupChat: {
+      title: 'チャットの強化',
+      description: 'アプリの事前会話設定を追加すると、ユーザーエクスペリエンスが向上します。',
+    },
+    groupExperience: {
+      title: 'エクスペリエンスの強化',
+    },
+    conversationOpener: {
+      title: '会話の開始',
+      description: 'チャットアプリでは、AIがユーザーに最初にアクティブに話しかける最初の文は、通常、歓迎メッセージとして使用されます。',
+    },
+    suggestedQuestionsAfterAnswer: {
+      title: 'フォローアップ',
+      description: '次の質問の提案を設定すると、ユーザーにより良いチャットが提供されます。',
+      resDes: 'ユーザーの次の質問に関する3つの提案。',
+      tryToAsk: '質問してみてください',
+    },
+    moreLikeThis: {
+      title: 'これに似たもの',
+      description: '一度に複数のテキストを生成し、編集して生成を続ける',
+      generateNumTip: '生成回数',
+      tip: 'この機能を使用すると、追加のトークンオーバーヘッドが発生します',
+    },
+    speechToText: {
+      title: '音声からテキストへ',
+      description: '有効にすると、音声入力を使用できます。',
+      resDes: '音声入力が有効になっています',
+    },
+    textToSpeech: {
+      title: 'テキストから音声へ',
+      description: '有効にすると、テキストを音声に変換できます。',
+      resDes: 'テキストからオーディオへの変換が有効になっています',
+    },
+    citation: {
+      title: '引用と帰属',
+      description: '有効にすると、生成されたコンテンツのソースドキュメントと帰属セクションが表示されます。',
+      resDes: '引用と帰属が有効になっています',
+    },
+    annotation: {
+      title: '注釈返信',
+      description: '類似のユーザー質問との優先一致のためにキャッシュに高品質の応答を手動で追加できます。',
+      resDes: '注釈応答が有効になっています',
+      scoreThreshold: {
+        title: 'スコア閾値',
+        description: '注釈返信の類似性閾値を設定するために使用されます。',
+        easyMatch: '簡単なマッチ',
+        accurateMatch: '正確なマッチ',
+      },
+      matchVariable: {
+        title: 'マッチ変数',
+        choosePlaceholder: 'マッチ変数を選択',
+      },
+      cacheManagement: '注釈',
+      cached: '注釈付き',
+      remove: '削除',
+      removeConfirm: 'この注釈を削除しますか?',
+      add: '注釈を追加',
+      edit: '注釈を編集',
+    },
+    dataSet: {
+      title: 'コンテキスト',
+      noData: 'コンテキストとして知識をインポートできます',
+      words: '単語',
+      textBlocks: 'テキストブロック',
+      selectTitle: '参照する知識を選択',
+      selected: '選択された知識',
+      noDataSet: '知識が見つかりません',
+      toCreate: '作成に進む',
+      notSupportSelectMulti: '現在、複数の知識の選択はサポートされていません',
+      queryVariable: {
+        title: 'クエリ変数',
+        tip: 'この変数はコンテキストの取得のためのクエリ入力として使用され、この変数の入力に関連するコンテキスト情報を取得します。',
+        choosePlaceholder: 'クエリ変数を選択',
+        noVar: '変数なし',
+        noVarTip: '変数セクションの下に変数を作成してください',
+        unableToQueryDataSet: '知識をクエリできません',
+        unableToQueryDataSetTip: '知識のクエリに失敗しました。正常にクエリできなかった場合は、コンテキストセクションでコンテキストクエリ変数を選択してください。',
+        ok: 'OK',
+        contextVarNotEmpty: 'コンテキストクエリ変数は空にできません',
+        deleteContextVarTitle: '変数 "{{varName}}" を削除しますか?',
+        deleteContextVarTip: 'この変数はコンテキストクエリ変数として設定されており、削除すると知識の正常な使用に影響します。削除する場合は、コンテキストセクションで再選択してください。',
+      },
+    },
+    tools: {
+      title: 'ツール',
+      tips: 'ツールは、ユーザー入力または変数をリクエストパラメーターとして使用して外部データをコンテキストとしてクエリするための標準的なAPI呼び出し方法を提供します。',
+      toolsInUse: '{{count}} 個のツールが使用中',
+      modal: {
+        title: 'ツール',
+        toolType: {
+          title: 'ツールタイプ',
+          placeholder: 'ツールタイプを選択してください',
+        },
+        name: {
+          title: '名前',
+          placeholder: '名前を入力してください',
+        },
+        variableName: {
+          title: '変数名',
+          placeholder: '変数名を入力してください',
+        },
+      },
+    },
+    conversationHistory: {
+      title: '会話履歴',
+      description: '会話の役割に接頭辞名を設定します',
+      tip: '会話履歴は有効になっていません。上記のプロンプトに <histories> を追加してください。',
+      learnMore: '詳細',
+      editModal: {
+        title: '会話役割名の編集',
+        userPrefix: 'ユーザー接頭辞',
+        assistantPrefix: 'アシスタント接頭辞',
+      },
+    },
+    toolbox: {
+      title: 'ツールボックス',
+    },
+
+    moderation: {
+      title: 'コンテンツのモデレーション',
+      description: 'モデレーションAPIを使用するか、機密語リストを維持することで、モデルの出力を安全にします。',
+      allEnabled: '入力/出力コンテンツが有効になっています',
+      inputEnabled: '入力コンテンツが有効になっています',
+      outputEnabled: '出力コンテンツが有効になっています',
+      modal: {
+        title: 'コンテンツのモデレーション設定',
+        provider: {
+          title: 'プロバイダ',
+          openai: 'OpenAIモデレーション',
+          openaiTip: {
+            prefix: 'OpenAIモデレーションには、',
+            suffix: 'にOpenAI APIキーが設定されている必要があります。',
+          },
+          keywords: 'キーワード',
+        },
+        keywords: {
+          tip: '1行ごとに1つ、行区切りで入力してください。1行あたり最大100文字。',
+          placeholder: '1行ごとに、行区切りで入力してください',
+          line: '行',
+        },
+        content: {
+          input: '入力コンテンツをモデレート',
+          output: '出力コンテンツをモデレート',
+          preset: 'プリセット返信',
+          placeholder: 'ここにプリセット返信の内容を入力',
+          condition: '少なくとも1つの入力および出力コンテンツをモデレートする',
+          fromApi: 'プリセット返信はAPIによって返されます',
+          errorMessage: 'プリセット返信は空にできません',
+          supportMarkdown: 'Markdownがサポートされています',
+        },
+        openaiNotConfig: {
+          before: 'OpenAIモデレーションには、',
+          after: 'にOpenAI APIキーが設定されている必要があります。',
+        },
+      },
+    },
+
+  },
+  automatic: {
+    title: '自動アプリケーションオーケストレーション',
+    description: 'シナリオを説明してください。Difyがアプリケーションをあなたのためにオーケストレートします。',
+    intendedAudience: '誰が想定されるターゲットですか?',
+    intendedAudiencePlaceHolder: '例:学生',
+    solveProblem: 'どのような問題をAIが解決できると期待していますか?',
+    solveProblemPlaceHolder: '例:学業成績の評価',
+    generate: '生成',
+    audiencesRequired: 'ターゲットが必要です',
+    problemRequired: '問題が必要です',
+    resTitle: '次のアプリケーションをあなたのためにオーケストレートしました。',
+    apply: 'このオーケストレーションを適用する',
+    noData: '左側にユースケースを記述し、オーケストレーションプレビューがここに表示されます。',
+    loading: 'アプリケーションのオーケストレーションを実行しています...',
+    overwriteTitle: '既存の構成を上書きしますか?',
+    overwriteMessage: 'このオーケストレーションを適用すると、既存の構成が上書きされます。',
+  },
+  resetConfig: {
+    title: 'リセットを確認しますか?',
+    message: '変更が破棄され、最後に公開された構成が復元されます。',
+  },
+  errorMessage: {
+    nameOfKeyRequired: 'キーの名前: {{key}} が必要です',
+    valueOfVarRequired: '{{key}} の値は空にできません',
+    queryRequired: 'リクエストテキストが必要です。',
+    waitForResponse: '前のメッセージへの応答が完了するまでお待ちください。',
+    waitForBatchResponse: 'バッチタスクへの応答が完了するまでお待ちください。',
+    notSelectModel: 'モデルを選択してください',
+    waitForImgUpload: '画像のアップロードが完了するまでお待ちください',
+  },
+  chatSubTitle: '手順',
+  completionSubTitle: '接頭辞プロンプト',
+  promptTip: 'プロンプトは、AIの応答を指示と制約で誘導します。 {{input}} のような変数を挿入します。このプロンプトはユーザーには表示されません。',
+  formattingChangedTitle: '書式が変更されました',
+  formattingChangedText: '書式を変更すると、デバッグ領域がリセットされます。よろしいですか?',
+  variableTitle: '変数',
+  variableTip: 'ユーザーはフォームに変数を入力し、プロンプト内の変数を自動的に置換します。',
+  notSetVar: '変数を使用すると、ユーザーはフォームに入力する際にプロンプトの単語や開始の言葉を導入できます。プロンプトの単語に "{{input}}" を入力してみてください。',
+  autoAddVar: 'プリプロンプトで参照されている未定義の変数があります。ユーザー入力フォームに追加しますか?',
+  variableTable: {
+    key: '変数キー',
+    name: 'ユーザー入力フィールド名',
+    optional: 'オプション',
+    type: '入力タイプ',
+    action: 'アクション',
+    typeString: '文字列',
+    typeSelect: '選択',
+  },
+  varKeyError: {
+    canNoBeEmpty: '変数キーを空にすることはできません',
+    tooLong: '変数キー: {{key}} が長すぎます。30文字を超えることはできません',
+    notValid: '変数キー: {{key}} が無効です。文字、数字、アンダースコアのみを含めることができます',
+    notStartWithNumber: '変数キー: {{key}} は数字で始めることはできません',
+    keyAlreadyExists: '変数キー: {{key}} はすでに存在します',
+  },
+  otherError: {
+    promptNoBeEmpty: 'プロンプトを空にすることはできません',
+    historyNoBeEmpty: 'プロンプトには会話履歴を設定する必要があります',
+    queryNoBeEmpty: 'プロンプトにクエリを設定する必要があります',
+  },
+  variableConig: {
+    modalTitle: 'フィールド設定',
+    description: '変数 {{varName}} の設定',
+    fieldType: 'フィールドタイプ',
+    string: '短いテキスト',
+    paragraph: '段落',
+    select: '選択',
+    notSet: '未設定、接頭辞プロンプトに {{input}} を入力してみてください',
+    stringTitle: 'フォームテキストボックスのオプション',
+    maxLength: '最大長',
+    options: 'オプション',
+    addOption: 'オプションを追加',
+    apiBasedVar: 'APIベースの変数',
+  },
+
+  vision: {
+    name: 'ビジョン',
+    description: 'ビジョンを有効にすると、モデルが画像を受け取り、それに関する質問に答えることができます。',
+    settings: '設定',
+    visionSettings: {
+      title: 'ビジョン設定',
+      resolution: '解像度',
+      resolutionTooltip: `低解像度では、モデルに低解像度の 512 x 512 バージョンの画像を受け取らせ、画像を 65 トークンの予算で表現します。これにより、API がより迅速な応答を返し、高い詳細が必要なユースケースでは入力トークンを消費します。
+      \n
+      高解像度では、まずモデルに低解像度の画像を見せ、その後、入力画像サイズに基づいて 512px の正方形の詳細なクロップを作成します。詳細なクロップごとに 129 トークンの予算を使用します。`,
+      high: '高',
+      low: '低',
+      uploadMethod: 'アップロード方法',
+      both: '両方',
+      localUpload: 'ローカルアップロード',
+      url: 'URL',
+      uploadLimit: 'アップロード制限',
+    },
+  },
+  voice: {
+    name: '音声',
+    defaultDisplay: 'デフォルトの音声',
+    description: 'テキスト読み上げの音声設定',
+    settings: '設定',
+    voiceSettings: {
+      title: '音声設定',
+      language: '言語',
+      resolutionTooltip: 'テキスト読み上げの音声言語をサポートします。',
+      voice: '音声',
+    },
+  },
+  openingStatement: {
+    title: '会話開始',
+    add: '追加',
+    writeOpner: 'オープナーを書く',
+    placeholder: 'ここにオープナーメッセージを書いてください。変数を使用できます。{{variable}} を入力してみてください。',
+    openingQuestion: '開始質問',
+    noDataPlaceHolder:
+      'ユーザーとの会話を開始すると、会話アプリケーションで彼らとのより密接な関係を築くのに役立ちます。',
+    varTip: '変数を使用できます。{{variable}} を入力してみてください',
+    tooShort: '会話の開始には少なくとも 20 単語の初期プロンプトが必要です。',
+    notIncludeKey: '初期プロンプトに変数 {{key}} が含まれていません。初期プロンプトに追加してください。',
+  },
+  modelConfig: {
+    model: 'モデル',
+    setTone: '応答のトーンを設定する',
+    title: 'モデルとパラメータ',
+    modeType: {
+      chat: 'チャット',
+      completion: '完成',
+    },
+  },
+  inputs: {
+    title: 'デバッグとプレビュー',
+    noPrompt: 'プレプロンプト入力にいくつかのプロンプトを記入してみてください',
+    userInputField: 'ユーザー入力フィールド',
+    noVar: '変数の値を入力してください。新しいセッションが開始されるたびにプロンプトの単語が自動的に置換されます。',
+    chatVarTip:
+      '変数の値を入力してください。新しいセッションが開始されるたびにプロンプトの単語が自動的に置換されます。',
+    completionVarTip:
+      '変数の値を入力してください。質問が送信されるたびにプロンプトの単語が自動的に置換されます。',
+    previewTitle: 'プロンプトのプレビュー',
+    queryTitle: 'クエリ内容',
+    queryPlaceholder: 'リクエストテキストを入力してください。',
+    run: '実行',
+  },
+  result: '出力テキスト',
+  datasetConfig: {
+    settingTitle: 'リトリーバル設定',
+    retrieveOneWay: {
+      title: 'N-to-1 リトリーバル',
+      description: 'ユーザーの意図とナレッジの説明に基づいて、エージェントが自律的に最適なナレッジを選択します。個々の、限られたナレッジを持つアプリケーションに最適です。',
+    },
+    retrieveMultiWay: {
+      title: 'マルチパスリトリーバル',
+      description: 'ユーザーの意図に基づいて、すべてのナレッジをクエリし、複数のソースから関連するテキストを取得し、再順位付け後、ユーザークエリに最適な結果を選択します。再順位付けモデル API の構成が必要です。',
+    },
+    rerankModelRequired: '再順位付けモデルが必要です',
+    params: 'パラメータ',
+    top_k: 'トップK',
+    top_kTip: 'ユーザーの質問に最も類似したチャンクをフィルタリングするために使用されます。システムは、選択したモデルの max_tokens に応じて、動的に Top K の値を調整します。',
+    score_threshold: 'スコア閾値',
+    score_thresholdTip: 'チャンクフィルタリングの類似性閾値を設定するために使用されます。',
+    retrieveChangeTip: 'インデックスモードとリトリーバルモードを変更すると、このナレッジに関連付けられたアプリケーションに影響を与える可能性があります。',
+  },
+
+  debugAsSingleModel: '単一モデルでデバッグ',
+  debugAsMultipleModel: '複数モデルでデバッグ',
+  duplicateModel: '複製',
+  publishAs: 'として公開',
+  assistantType: {
+    name: 'アシスタントタイプ',
+    chatAssistant: {
+      name: '基本アシスタント',
+      description: '大規模な言語モデルを使用してチャットベースのアシスタントを構築します',
+    },
+    agentAssistant: {
+      name: 'エージェントアシスタント',
+      description: 'タスクを自律的に完了するためのツールを選択できるインテリジェントエージェントを構築します',
+    },
+  },
+  agent: {
+    agentMode: 'エージェントモード',
+    agentModeDes: 'エージェントの推論モードの種類を設定します',
+    agentModeType: {
+      ReACT: 'ReAct',
+      functionCall: '関数呼び出し',
+    },
+    setting: {
+      name: 'エージェント設定',
+      description: 'エージェントアシスタント設定では、エージェントモードやビルトインプロンプトなどの高度な機能を設定できます。エージェントタイプのみ利用可能です。',
+      maximumIterations: {
+        name: '最大反復回数',
+        description: 'エージェントアシスタントが実行できる反復回数を制限します',
+      },
+    },
+    buildInPrompt: 'ビルトインプロンプト',
+    firstPrompt: '最初のプロンプト',
+    nextIteration: '次の反復',
+    promptPlaceholder: 'ここにプロンプトを入力してください',
+    tools: {
+      name: 'ツール',
+      description: 'ツールを使用すると、インターネットの検索や科学的計算など、LLMの機能を拡張できます',
+      enabled: '有効',
+    },
+  },
+}
+
+export default translation

+ 69 - 0
web/i18n/ja-JP/app-log.ts

@@ -0,0 +1,69 @@
+const translation = {
+  title: 'ログ',
+  description: 'ログは、アプリケーションの実行状態を記録します。ユーザーの入力やAIの応答などが含まれます。',
+  dateTimeFormat: 'MM/DD/YYYY hh:mm A',
+  table: {
+    header: {
+      time: '時間',
+      endUser: 'エンドユーザー',
+      input: '入力',
+      output: '出力',
+      summary: 'タイトル',
+      messageCount: 'メッセージ数',
+      userRate: 'ユーザー評価',
+      adminRate: 'オペレータ評価',
+    },
+    pagination: {
+      previous: '前へ',
+      next: '次へ',
+    },
+    empty: {
+      noChat: 'まだ会話がありません',
+      noOutput: '出力なし',
+      element: {
+        title: '誰かいますか?',
+        content: 'ここではエンドユーザーとAIアプリケーションの相互作用を観察し、注釈を付けることでAIの精度を継続的に向上させることができます。自分自身でWebアプリを<shareLink>共有</shareLink>したり<testLink>テスト</testLink>したりして、このページに戻ってください。',
+      },
+    },
+  },
+  detail: {
+    time: '時間',
+    conversationId: '会話ID',
+    promptTemplate: 'プロンプトテンプレート',
+    promptTemplateBeforeChat: 'チャット前のプロンプトテンプレート · システムメッセージとして',
+    annotationTip: '{{user}}による改善',
+    timeConsuming: '',
+    second: '秒',
+    tokenCost: 'トークン消費',
+    loading: '読み込み中',
+    operation: {
+      like: 'いいね',
+      dislike: 'いまいち',
+      addAnnotation: '改善を追加',
+      editAnnotation: '改善を編集',
+      annotationPlaceholder: 'AIが返答することを期待する回答を入力してください。これはモデルの微調整やテキスト生成品質の継続的な改善に使用されます。',
+    },
+    variables: '変数',
+    uploadImages: 'アップロードされた画像',
+  },
+  filter: {
+    period: {
+      today: '今日',
+      last7days: '過去7日間',
+      last4weeks: '過去4週間',
+      last3months: '過去3ヶ月',
+      last12months: '過去12ヶ月',
+      monthToDate: '今月まで',
+      quarterToDate: '四半期まで',
+      yearToDate: '今年まで',
+      allTime: 'すべての期間',
+    },
+    annotation: {
+      all: 'すべて',
+      annotated: '注釈付きの改善({{count}}件)',
+      not_annotated: '注釈なし',
+    },
+  },
+}
+
+export default translation

+ 139 - 0
web/i18n/ja-JP/app-overview.ts

@@ -0,0 +1,139 @@
+const translation = {
+  welcome: {
+    firstStepTip: '始めるには、',
+    enterKeyTip: '以下にOpenAI APIキーを入力してください',
+    getKeyTip: 'OpenAIダッシュボードからAPIキーを取得してください',
+    placeholder: 'OpenAI APIキー(例:sk-xxxx)',
+  },
+  apiKeyInfo: {
+    cloud: {
+      trial: {
+        title: '{{providerName}}のトライアルクオータを使用しています。',
+        description: 'トライアルクオータはテスト用に提供されています。トライアルクオータの使用回数が尽きる前に、独自のモデルプロバイダを設定するか、追加のクオータを購入してください。',
+      },
+      exhausted: {
+        title: 'トライアルクオータが使い果たされました。APIキーを設定してください。',
+        description: 'トライアルクオータが使い果たされました。独自のモデルプロバイダを設定するか、追加のクオータを購入してください。',
+      },
+    },
+    selfHost: {
+      title: {
+        row1: '始めるには、',
+        row2: 'まずモデルプロバイダを設定してください。',
+      },
+    },
+    callTimes: '呼び出し回数',
+    usedToken: '使用済みトークン',
+    setAPIBtn: 'モデルプロバイダの設定へ',
+    tryCloud: 'または無料クオートでDifyのクラウドバージョンを試してみてください',
+  },
+  overview: {
+    title: '概要',
+    appInfo: {
+      explanation: '使いやすいAI Webアプリ',
+      accessibleAddress: '公開URL',
+      preview: 'プレビュー',
+      regenerate: '再生成',
+      preUseReminder: '続行する前にWebアプリを有効にしてください。',
+      settings: {
+        entry: '設定',
+        title: 'Webアプリの設定',
+        webName: 'Webアプリ名',
+        webDesc: 'Webアプリの説明',
+        webDescTip: 'このテキストはクライアント側に表示され、アプリの使用方法に関する基本的なガイダンスを提供します。',
+        webDescPlaceholder: 'Webアプリの説明を入力してください',
+        language: '言語',
+        more: {
+          entry: '詳細設定を表示',
+          copyright: '著作権',
+          copyRightPlaceholder: '著作者または組織の名前を入力してください',
+          privacyPolicy: 'プライバシーポリシー',
+          privacyPolicyPlaceholder: 'プライバシーポリシーリンクを入力してください',
+          privacyPolicyTip: '訪問者がアプリが収集するデータを理解するのに役立ちます。Difyの<privacyPolicyLink>プライバシーポリシー</privacyPolicyLink>を参照してください。',
+        },
+      },
+      embedded: {
+        entry: '埋め込み',
+        title: 'ウェブサイトに埋め込む',
+        explanation: 'チャットアプリをウェブサイトに埋め込む方法を選択してください。',
+        iframe: 'ウェブサイトの任意の場所にチャットアプリを追加するには、このiframeをHTMLコードに追加してください。',
+        scripts: 'ウェブサイトの右下にチャットアプリを追加するには、このコードをHTMLに追加してください。',
+        chromePlugin: 'Dify Chatbot Chrome拡張機能をインストール',
+        copied: 'コピー済み',
+        copy: 'コピー',
+      },
+      qrcode: {
+        title: '共有用QRコード',
+        scan: 'アプリを共有するためにスキャン',
+        download: 'QRコードをダウンロード',
+      },
+      customize: {
+        way: '方法',
+        entry: 'カスタマイズ',
+        title: 'AI Webアプリのカスタマイズ',
+        explanation: 'シナリオとスタイルのニーズに合わせてWebアプリのフロントエンドをカスタマイズできます。',
+        way1: {
+          name: 'クライアントコードをフォークして変更し、Vercelにデプロイする(推奨)',
+          step1: 'クライアントコードをフォークして変更する',
+          step1Tip: 'ここをクリックしてソースコードをGitHubアカウントにフォークし、コードを変更してください',
+          step1Operation: 'Dify-WebClient',
+          step2: 'Vercelにデプロイする',
+          step2Tip: 'ここをクリックしてリポジトリをVercelにインポートし、デプロイしてください',
+          step2Operation: 'リポジトリのインポート',
+          step3: '環境変数を設定する',
+          step3Tip: 'Vercelに以下の環境変数を追加してください',
+        },
+        way2: {
+          name: 'APIを呼び出すためのクライアントサイドコードを記述し、サーバーにデプロイする',
+          operation: 'ドキュメント',
+        },
+      },
+    },
+    apiInfo: {
+      title: 'バックエンドサービスAPI',
+      explanation: 'アプリケーションに簡単に統合できます',
+      accessibleAddress: 'サービスAPIエンドポイント',
+      doc: 'APIリファレンス',
+    },
+    status: {
+      running: 'サービス中',
+      disable: '無効化',
+    },
+  },
+  analysis: {
+    title: '分析',
+    ms: 'ミリ秒',
+    tokenPS: 'トークン/秒',
+    totalMessages: {
+      title: '総メッセージ数',
+      explanation: 'AIとのやり取りのうち、プロンプトのエンジニアリングやデバッグを除いた日次の相互作用数です。',
+    },
+    activeUsers: {
+      title: 'アクティブユーザー',
+      explanation: 'AIとのQ&Aに参加しているユニークなユーザー数です。プロンプトのエンジニアリングやデバッグを除きます。',
+    },
+    tokenUsage: {
+      title: 'トークン使用量',
+      explanation: 'アプリケーションの言語モデルの日次トークン使用量を反映し、コスト管理の目的に役立ちます。',
+      consumed: '使用済み',
+    },
+    avgSessionInteractions: {
+      title: '平均セッション相互作用数',
+      explanation: '会話ベースのアプリケーションの連続したユーザーとAIのコミュニケーション数です。',
+    },
+    userSatisfactionRate: {
+      title: 'ユーザー満足率',
+      explanation: '1,000メッセージあたりの「いいね」の数です。これは、ユーザーが非常に満足している回答の割合を示します。',
+    },
+    avgResponseTime: {
+      title: '平均応答時間',
+      explanation: 'AIの処理/応答にかかる時間(ミリ秒)です。テキストベースのアプリケーションに適しています。',
+    },
+    tps: {
+      title: 'トークン出力速度',
+      explanation: 'LLMのパフォーマンスを測定します。リクエストの開始から出力の完了までのLLMのトークン出力速度をカウントします。',
+    },
+  },
+}
+
+export default translation

+ 54 - 0
web/i18n/ja-JP/app.ts

@@ -0,0 +1,54 @@
+const translation = {
+  createApp: '新しいアプリを作成する',
+  types: {
+    all: 'すべて',
+    assistant: 'アシスタント',
+    completion: '補完',
+  },
+  modes: {
+    completion: 'テキスト生成',
+    chat: '基本アシスタント',
+  },
+  createFromConfigFile: '設定ファイルからアプリを作成する',
+  deleteAppConfirmTitle: 'このアプリを削除しますか?',
+  deleteAppConfirmContent:
+    'アプリの削除は元に戻せません。ユーザーはアプリにアクセスできなくなり、プロンプトの設定とログは永久に削除されます。',
+  appDeleted: 'アプリが削除されました',
+  appDeleteFailed: 'アプリの削除に失敗しました',
+  join: 'コミュニティに参加する',
+  communityIntro:
+    'チームメンバーや貢献者、開発者とさまざまなチャンネルでディスカッションを行います。',
+  roadmap: 'ロードマップを見る',
+  appNamePlaceholder: 'アプリの名前を入力してください',
+  newApp: {
+    startToCreate: '新しいアプリを作成しましょう',
+    captionName: 'アプリアイコンと名前',
+    captionAppType: 'どのタイプのアプリを作成しますか?',
+    previewDemo: 'デモをプレビューする',
+    chatApp: 'アシスタント',
+    chatAppIntro:
+      'チャットベースのアプリケーションを構築したいです。このアプリは質問と回答の形式を使用し、複数のラウンドの連続した会話が可能です。',
+    agentAssistant: '新しいエージェントアシスタント',
+    completeApp: 'テキスト生成',
+    completeAppIntro:
+      'プロンプトに基づいて高品質のテキストを生成するアプリケーションを作成したいです。記事、要約、翻訳などの生成が可能です。',
+    showTemplates: 'テンプレートから選択したいです',
+    hideTemplates: 'モード選択に戻る',
+    Create: '作成',
+    Cancel: 'キャンセル',
+    nameNotEmpty: '名前は空にできません',
+    appTemplateNotSelected: 'テンプレートを選択してください',
+    appTypeRequired: 'アプリのタイプを選択してください',
+    appCreated: 'アプリが作成されました',
+    appCreateFailed: 'アプリの作成に失敗しました',
+  },
+  editApp: {
+    startToEdit: 'アプリを編集する',
+  },
+  emoji: {
+    ok: 'OK',
+    cancel: 'キャンセル',
+  },
+}
+
+export default translation

+ 113 - 0
web/i18n/ja-JP/billing.ts

@@ -0,0 +1,113 @@
+const translation = {
+  currentPlan: '現在のプラン',
+  upgradeBtn: {
+    plain: 'プランをアップグレード',
+    encourage: '今すぐアップグレード',
+    encourageShort: 'アップグレード',
+  },
+  viewBilling: '請求とサブスクリプションの管理',
+  buyPermissionDeniedTip: 'サブスクリプションするには、エンタープライズ管理者に連絡してください',
+  plansCommon: {
+    title: 'あなたに合ったプランを選択してください',
+    yearlyTip: '年間購読で2か月無料!',
+    mostPopular: '最も人気のある',
+    planRange: {
+      monthly: '月額',
+      yearly: '年額',
+    },
+    month: '月',
+    year: '年',
+    save: '節約 ',
+    free: '無料',
+    currentPlan: '現在のプラン',
+    contractSales: '営業に連絡する',
+    contractOwner: 'チームマネージャーに連絡する',
+    startForFree: '無料で始める',
+    getStartedWith: '始める ',
+    contactSales: '営業に連絡する',
+    talkToSales: '営業と話す',
+    modelProviders: 'モデルプロバイダー',
+    teamMembers: 'チームメンバー',
+    buildApps: 'アプリを作成する',
+    vectorSpace: 'ベクトルスペース',
+    vectorSpaceBillingTooltip: '1MBあたり約120万文字のベクトル化データを保存できます(OpenAI Embeddingsを使用して推定され、モデルによって異なります)。',
+    vectorSpaceTooltip: 'ベクトルスペースは、LLMがデータを理解するために必要な長期記憶システムです。',
+    documentProcessingPriority: 'ドキュメント処理の優先度',
+    documentProcessingPriorityTip: 'より高いドキュメント処理の優先度をご希望の場合は、プランをアップグレードしてください。',
+    documentProcessingPriorityUpgrade: 'より高い精度と高速な速度でデータを処理します。',
+    priority: {
+      'standard': '標準',
+      'priority': '優先',
+      'top-priority': '最優先',
+    },
+    logsHistory: 'ログ履歴',
+    customTools: 'カスタムツール',
+    unavailable: '利用不可',
+    days: '日',
+    unlimited: '無制限',
+    support: 'サポート',
+    supportItems: {
+      communityForums: 'コミュニティフォーラム',
+      emailSupport: 'メールサポート',
+      priorityEmail: '優先メール&チャットサポート',
+      logoChange: 'ロゴ変更',
+      SSOAuthentication: 'SSO認証',
+      personalizedSupport: '個別サポート',
+      dedicatedAPISupport: '専用APIサポート',
+      customIntegration: 'カスタム統合とサポート',
+      ragAPIRequest: 'RAG APIリクエスト',
+      agentMode: 'エージェントモード',
+      workflow: 'ワークフロー',
+    },
+    comingSoon: '近日公開',
+    member: 'メンバー',
+    memberAfter: 'メンバー',
+    messageRequest: {
+      title: 'メッセージクレジット',
+      tooltip: 'OpenAIモデルを使用したさまざまなプランのメッセージ呼び出しクォータ(gpt4を除く)。制限を超えるメッセージはOpenAI APIキーを使用します。',
+    },
+    annotatedResponse: {
+      title: '注釈クォータ制限',
+      tooltip: '手動での編集と応答の注釈付けにより、アプリのカスタマイズ可能な高品質な質問応答機能が提供されます(チャットアプリのみ適用)。',
+    },
+    ragAPIRequestTooltip: 'Difyのナレッジベース処理機能のみを呼び出すAPI呼び出しの数を指します。',
+    receiptInfo: 'チームオーナーとチーム管理者のみが購読および請求情報を表示できます',
+  },
+  plans: {
+    sandbox: {
+      name: 'サンドボックス',
+      description: 'GPTの無料トライアル200回',
+      includesTitle: '含まれるもの:',
+    },
+    professional: {
+      name: 'プロフェッショナル',
+      description: '個人や小規模チーム向けにより多くのパワーを手頃な価格で提供します。',
+      includesTitle: '無料プランに加えて、次も含まれます:',
+    },
+    team: {
+      name: 'チーム',
+      description: '制限なく協力し、最高のパフォーマンスを楽しむ。',
+      includesTitle: 'プロフェッショナルプランに加えて、次も含まれます:',
+    },
+    enterprise: {
+      name: 'エンタープライズ',
+      description: '大規模なミッションクリティカルシステムのためのフル機能とサポートを提供します。',
+      includesTitle: 'チームプランに加えて、次も含まれます:',
+    },
+  },
+  vectorSpace: {
+    fullTip: 'ベクトルスペースがいっぱいです。',
+    fullSolution: 'より多くのスペースを得るためにプランをアップグレードしてください。',
+  },
+  apps: {
+    fullTipLine1: 'より多くのアプリを作成するには、',
+    fullTipLine2: 'プランをアップグレードしてください。',
+  },
+  annotatedResponse: {
+    fullTipLine1: 'より多くの会話を注釈するには、',
+    fullTipLine2: 'プランをアップグレードしてください。',
+    quotaTitle: '注釈返信クォータ',
+  },
+}
+
+export default translation

+ 456 - 0
web/i18n/ja-JP/common.ts

@@ -0,0 +1,456 @@
+const translation = {
+  api: {
+    success: '成功',
+    actionSuccess: 'アクションが成功しました',
+    saved: '保存済み',
+    create: '作成済み',
+    remove: '削除済み',
+  },
+  operation: {
+    create: '作成',
+    confirm: '確認',
+    cancel: 'キャンセル',
+    clear: 'クリア',
+    save: '保存',
+    edit: '編集',
+    add: '追加',
+    added: '追加済み',
+    refresh: 'リフレッシュ',
+    reset: 'リセット',
+    search: '検索',
+    change: '変更',
+    remove: '削除',
+    send: '送信',
+    copy: 'コピー',
+    lineBreak: '改行',
+    sure: '確認済み',
+    download: 'ダウンロード',
+    delete: '削除',
+    settings: '設定',
+    setup: 'セットアップ',
+    getForFree: '無料で入手',
+    reload: '再読み込み',
+    ok: 'OK',
+    log: 'ログ',
+    learnMore: '詳細を見る',
+    params: 'パラメータ',
+  },
+  placeholder: {
+    input: '入力してください',
+    select: '選択してください',
+  },
+  voice: {
+    language: {
+      zhHans: '中国語',
+      enUS: '英語',
+      deDE: 'ドイツ語',
+      frFR: 'フランス語',
+      esES: 'スペイン語',
+      itIT: 'イタリア語',
+      thTH: 'タイ語',
+      idID: 'インドネシア語',
+      jaJP: '日本語',
+      koKR: '韓国語',
+      ptBR: 'ポルトガル語',
+      ruRU: 'ロシア語',
+      ukUA: 'ウクライナ語',
+    },
+  },
+  unit: {
+    char: '文字',
+  },
+  actionMsg: {
+    noModification: '現在は変更されていません。',
+    modifiedSuccessfully: '変更が正常に行われました',
+    modifiedUnsuccessfully: '変更が失敗しました',
+    copySuccessfully: 'コピーが正常に行われました',
+    paySucceeded: '支払いが成功しました',
+    payCancelled: '支払いがキャンセルされました',
+    generatedSuccessfully: '生成が成功しました',
+    generatedUnsuccessfully: '生成が失敗しました',
+  },
+  model: {
+    params: {
+      temperature: '温度',
+      temperatureTip:
+        'ランダム性を制御します:温度を下げると、よりランダムな完成品が得られます。温度がゼロに近づくにつれて、モデルは決定的で反復的になります。',
+      top_p: '上位P',
+      top_pTip:
+        'ニュークリアスサンプリングによる多様性の制御:0.5は、すべての尤度加重オプションの半分が考慮されることを意味します。',
+      presence_penalty: '存在ペナルティ',
+      presence_penaltyTip:
+        'これまでのテキストにトークンが表示されるかどうかに基づいて、新しいトークンにいくらペナルティを科すかを制御します。\nモデルが新しいトピックについて話す可能性が高まります。',
+      frequency_penalty: '頻度ペナルティ',
+      frequency_penaltyTip:
+        'これまでのテキスト内のトークンの既存の頻度に基づいて、新しいトークンにどれだけペナルティを科すかを制御します。\nモデルが同じ行を文字通りに繰り返す可能性が低くなります。',
+      max_tokens: '最大トークン',
+      max_tokensTip:
+        '返信の最大長をトークン単位で制限するために使用されます。\n大きな値はプロンプトの単語、チャットログ、およびナレッジのために残されたスペースを制限する可能性があります。\nそれを2/3以下に設定することをお勧めします。\ngpt-4-1106-preview、gpt-4-vision-previewの最大トークン(入力128k出力4k)以下に設定することをお勧めします。',
+      maxTokenSettingTip: '最大トークン設定が高いため、プロンプト、クエリ、およびデータのスペースが制限される可能性があります。現在のモデルの最大トークンの80%以下に設定してください。',
+      setToCurrentModelMaxTokenTip: '最大トークンが現在のモデルの最大トークンの80%に更新されました {{maxToken}}.',
+      stop_sequences: '停止シーケンス',
+      stop_sequencesTip: 'APIが進行中のトークンの生成を停止する最大4つのシーケンス。返されたテキストには停止シーケンスは含まれません。',
+      stop_sequencesPlaceholder: 'シーケンスを入力してタブキーを押してください',
+    },
+    tone: {
+      Creative: 'クリエイティブ',
+      Balanced: 'バランス',
+      Precise: '正確',
+      Custom: 'カスタム',
+    },
+    addMoreModel: '設定画面から他のモデルを追加してください',
+  },
+  menus: {
+    status: 'ベータ版',
+    explore: '探索',
+    apps: 'スタジオ',
+    plugins: 'プラグイン',
+    pluginsTips: 'サードパーティのプラグインを統合するか、ChatGPT互換のAIプラグインを作成します。',
+    datasets: 'ナレッジ',
+    datasetsTips: '近日公開:独自のテキストデータをインポートするか、Webhookを介してリアルタイムにデータを記述してLLMコンテキストを強化します。',
+    newApp: '新しいアプリ',
+    newDataset: 'ナレッジの作成',
+    tools: 'ツール',
+  },
+  userProfile: {
+    settings: '設定',
+    workspace: 'ワークスペース',
+    createWorkspace: 'ワークスペースを作成',
+    helpCenter: 'ヘルプ',
+    roadmapAndFeedback: 'ロードマップとフィードバック',
+    community: 'コミュニティ',
+    about: 'Difyについて',
+    logout: 'ログアウト',
+  },
+  settings: {
+    accountGroup: 'アカウント',
+    workplaceGroup: 'ワークスペース',
+    account: 'マイアカウント',
+    members: 'メンバー',
+    billing: '請求',
+    integrations: '統合',
+    language: '言語',
+    provider: 'モデルプロバイダー',
+    dataSource: 'データソース',
+    plugin: 'プラグイン',
+    apiBasedExtension: 'API拡張',
+  },
+  account: {
+    avatar: 'アバター',
+    name: '名前',
+    email: 'メール',
+    password: 'パスワード',
+    passwordTip: '一時的なログインコードを使用したくない場合は、永続的なパスワードを設定できます。',
+    setPassword: 'パスワードを設定',
+    resetPassword: 'パスワードをリセット',
+    currentPassword: '現在のパスワード',
+    newPassword: '新しいパスワード',
+    confirmPassword: 'パスワードを確認',
+    notEqual: '2つのパスワードが異なります。',
+    langGeniusAccount: 'Difyアカウント',
+    langGeniusAccountTip: 'Difyアカウントと関連するユーザーデータ。',
+    editName: '名前を編集',
+    showAppLength: '{{length}}アプリを表示',
+  },
+  members: {
+    team: 'チーム',
+    invite: '招待',
+    name: '名前',
+    lastActive: '最終アクティブ',
+    role: 'ロール',
+    pending: '保留中...',
+    owner: 'オーナー',
+    admin: '管理者',
+    adminTip: 'アプリの構築およびチーム設定の管理ができます',
+    normal: '通常',
+    normalTip: 'アプリの使用のみが可能で、アプリの構築はできません',
+    inviteTeamMember: 'チームメンバーを招待する',
+    inviteTeamMemberTip: '彼らはサインイン後、直接あなたのチームデータにアクセスできます。',
+    email: 'メール',
+    emailInvalid: '無効なメール形式',
+    emailPlaceholder: 'メールを入力してください',
+    sendInvite: '招待を送る',
+    invitedAsRole: '{{role}}ユーザーとして招待されました',
+    invitationSent: '招待が送信されました',
+    invitationSentTip: '招待が送信され、彼らはDifyにサインインしてあなたのチームデータにアクセスできます。',
+    invitationLink: '招待リンク',
+    failedinvitationEmails: '以下のユーザーは正常に招待されませんでした',
+    ok: 'OK',
+    removeFromTeam: 'チームから削除',
+    removeFromTeamTip: 'チームへのアクセスが削除されます',
+    setAdmin: '管理者に設定',
+    setMember: '通常のメンバーに設定',
+    disinvite: '招待をキャンセル',
+    deleteMember: 'メンバーを削除',
+    you: '(あなた)',
+  },
+  integrations: {
+    connected: '接続済み',
+    google: 'Google',
+    googleAccount: 'Googleアカウントでログイン',
+    github: 'GitHub',
+    githubAccount: 'GitHubアカウントでログイン',
+    connect: '接続',
+  },
+  language: {
+    displayLanguage: '表示言語',
+    timezone: 'タイムゾーン',
+  },
+  provider: {
+    apiKey: 'APIキー',
+    enterYourKey: 'ここにAPIキーを入力してください',
+    invalidKey: '無効なOpenAI APIキー',
+    validatedError: '検証に失敗しました:',
+    validating: 'キーの検証中...',
+    saveFailed: 'APIキーの保存に失敗しました',
+    apiKeyExceedBill: 'このAPI KEYには使用可能なクォータがありません。詳細は',
+    addKey: 'キーを追加',
+    comingSoon: '近日公開',
+    editKey: '編集',
+    invalidApiKey: '無効なAPIキー',
+    azure: {
+      apiBase: 'APIベース',
+      apiBasePlaceholder: 'Azure OpenAIエンドポイントのAPIベースURL。',
+      apiKey: 'APIキー',
+      apiKeyPlaceholder: 'ここにAPIキーを入力してください',
+      helpTip: 'Azure OpenAIサービスを学ぶ',
+    },
+    openaiHosted: {
+      openaiHosted: 'ホステッドOpenAI',
+      onTrial: 'トライアル中',
+      exhausted: 'クォータが使い果たされました',
+      desc: 'Difyが提供するOpenAIホスティングサービスを使用すると、GPT-3.5などのモデルを使用できます。トライアルクォータが使い果たされる前に、他のモデルプロバイダを設定する必要があります。',
+      callTimes: '通話回数',
+      usedUp: 'トライアルクォータが使い果たされました。独自のモデルプロバイダを追加してください。',
+      useYourModel: '現在、独自のモデルプロバイダを使用しています。',
+      close: '閉じる',
+    },
+    anthropicHosted: {
+      anthropicHosted: 'アンソピッククロード',
+      onTrial: 'トライアル中',
+      exhausted: 'クォータが使い果たされました',
+      desc: '高度なダイアログやクリエイティブなコンテンツ生成から詳細な指示まで、幅広いタスクに優れたパワフルなモデルです。',
+      callTimes: '通話回数',
+      usedUp: 'トライアルクォータが使い果たされました。独自のモデルプロバイダを追加してください。',
+      useYourModel: '現在、独自のモデルプロバイダを使用しています。',
+      close: '閉じる',
+    },
+    anthropic: {
+      using: '埋め込み機能は使用中です',
+      enableTip: 'Anthropicモデルを有効にするには、まずOpenAIまたはAzure OpenAIサービスにバインドする必要があります。',
+      notEnabled: '有効にされていません',
+      keyFrom: 'AnthropicからAPIキーを取得してください',
+    },
+    encrypted: {
+      front: 'API KEYは',
+      back: '技術を使用して暗号化および保存されます。',
+    },
+  },
+  modelProvider: {
+    notConfigured: 'システムモデルがまだ完全に設定されておらず、一部の機能が利用できない場合があります。',
+    systemModelSettings: 'システムモデル設定',
+    systemModelSettingsLink: 'システムモデルの設定が必要な理由は何ですか?',
+    selectModel: 'モデルを選択',
+    setupModelFirst: 'まずモデルをセットアップしてください',
+    systemReasoningModel: {
+      key: 'システム推論モデル',
+      tip: 'アプリの作成に使用されるデフォルトの推論モデルを設定します。また、対話名の生成や次の質問の提案などの機能もデフォルトの推論モデルを使用します。',
+    },
+    embeddingModel: {
+      key: '埋め込みモデル',
+      tip: 'ナレッジのドキュメント埋め込み処理のデフォルトモデルを設定します。ナレッジの取得とインポートの両方に、この埋め込みモデルをベクトル化処理に使用します。切り替えると、インポートされたナレッジと質問の間のベクトル次元が一致せず、取得に失敗します。取得の失敗を避けるためには、このモデルを任意に切り替えないでください。',
+      required: '埋め込みモデルが必要です',
+    },
+    speechToTextModel: {
+      key: '音声-to-テキストモデル',
+      tip: '会話での音声-to-テキスト入力に使用するデフォルトモデルを設定します。',
+    },
+    ttsModel: {
+      key: 'テキスト-to-音声モデル',
+      tip: '会話でのテキスト-to-音声入力に使用するデフォルトモデルを設定します。',
+    },
+    rerankModel: {
+      key: '再ランクモデル',
+      tip: '再ランクモデルは、ユーザークエリとの意味的一致に基づいて候補文書リストを再配置し、意味的ランキングの結果を向上させます。',
+    },
+    quota: 'クォータ',
+    searchModel: '検索モデル',
+    noModelFound: '{{model}}に対するモデルが見つかりません',
+    models: 'モデル',
+    showMoreModelProvider: 'より多くのモデルプロバイダを表示',
+    selector: {
+      tip: 'このモデルは削除されました。別のモデルを追加するか、別のモデルを選択してください。',
+      emptyTip: '利用可能なモデルはありません',
+      emptySetting: '設定に移動して構成してください',
+      rerankTip: '再ランクモデルを設定してください',
+    },
+    card: {
+      quota: 'クォータ',
+      onTrial: 'トライアル中',
+      paid: '有料',
+      quotaExhausted: 'クォータが使い果たされました',
+      callTimes: '通話回数',
+      tokens: 'トークン',
+      fee: '費用',
+      feeToken: 'トークン毎の費用',
+      basicSettings: '基本設定',
+      advancedSettings: '高度な設定',
+      comingSoon: '近日公開',
+      installPlugin: 'プラグインをインストール',
+    },
+  },
+  dataSource: {
+    externalAPI: '外部API',
+    webhooks: 'Webhook',
+    custom: 'カスタム',
+  },
+  plugin: {
+    serpapi: {
+      apiKey: 'APIキー',
+      apiKeyPlaceholder: 'APIキーを入力してください',
+      keyFrom: 'SerpAPIアカウントページからSerpAPIキーを取得してください',
+    },
+  },
+  apiBasedExtension: {
+    title: 'API拡張機能は、Difyのアプリケーション全体での簡単な使用のための設定を簡素化し、集中的なAPI管理を提供します。',
+    link: '独自のAPI拡張機能を開発する方法について学ぶ。',
+    linkUrl: 'https://docs.dify.ai/features/extension/api_based_extension',
+    add: 'API拡張機能を追加',
+    selector: {
+      title: 'API拡張機能',
+      placeholder: 'API拡張機能を選択してください',
+      manage: 'API拡張機能を管理',
+    },
+    modal: {
+      title: 'API拡張機能を追加',
+      editTitle: 'API拡張機能を編集',
+      name: {
+        title: '名前',
+        placeholder: '名前を入力してください',
+      },
+      apiEndpoint: {
+        title: 'APIエンドポイント',
+        placeholder: 'APIエンドポイントを入力してください',
+      },
+      apiKey: {
+        title: 'APIキー',
+        placeholder: 'APIキーを入力してください',
+        lengthError: 'APIキーの長さは5文字未満にできません',
+      },
+    },
+    type: 'タイプ',
+  },
+  about: {
+    changeLog: '変更ログ',
+    updateNow: '今すぐ更新',
+    nowAvailable: 'Dify {{version}} が利用可能です。',
+    latestAvailable: 'Dify {{version}} が最新バージョンです。',
+  },
+  appMenus: {
+    overview: '概要',
+    promptEng: 'Orchestrate',
+    apiAccess: 'APIアクセス',
+    logAndAnn: 'ログ&アナウンス',
+  },
+  environment: {
+    testing: 'テスト',
+    development: '開発',
+  },
+  appModes: {
+    completionApp: 'テキスト生成',
+    chatApp: 'チャットアプリ',
+  },
+  datasetMenus: {
+    documents: 'ドキュメント',
+    hitTesting: '検索テスト',
+    settings: '設定',
+    emptyTip: '関連付けられた知識がありません。アプリケーションやプラグインに移動して関連付けを完了してください。',
+    viewDoc: 'ドキュメントを表示',
+    relatedApp: '関連アプリ',
+  },
+  voiceInput: {
+    speaking: '今話しています...',
+    converting: 'テキストに変換中...',
+    notAllow: 'マイクが許可されていません',
+  },
+  modelName: {
+    'gpt-3.5-turbo': 'GPT-3.5-Turbo',
+    'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
+    'gpt-4': 'GPT-4',
+    'gpt-4-32k': 'GPT-4-32K',
+    'text-davinci-003': 'Text-Davinci-003',
+    'text-embedding-ada-002': 'Text-Embedding-Ada-002',
+    'whisper-1': 'Whisper-1',
+    'claude-instant-1': 'Claude-Instant',
+    'claude-2': 'Claude-2',
+  },
+  chat: {
+    renameConversation: '会話名を変更',
+    conversationName: '会話名',
+    conversationNamePlaceholder: '会話名を入力してください',
+    conversationNameCanNotEmpty: '会話名は必須です',
+    citation: {
+      title: '引用',
+      linkToDataset: '知識へのリンク',
+      characters: '文字数:',
+      hitCount: '検索回数:',
+      vectorHash: 'ベクトルハッシュ:',
+      hitScore: '検索スコア:',
+    },
+  },
+  promptEditor: {
+    placeholder: 'ここにプロンプトワードを入力してください。変数を挿入するには「{」を、プロンプトコンテンツブロックを挿入するには「/」を入力します。',
+    context: {
+      item: {
+        title: 'コンテキスト',
+        desc: 'コンテキストテンプレートを挿入',
+      },
+      modal: {
+        title: '{{num}} 番目のコンテキスト',
+        add: 'コンテキストを追加',
+        footer: '以下のコンテキストセクションでコンテキストを管理できます。',
+      },
+    },
+    history: {
+      item: {
+        title: '会話履歴',
+        desc: '過去のメッセージテンプレートを挿入',
+      },
+      modal: {
+        title: '例',
+        user: 'こんにちは',
+        assistant: 'こんにちは! 今日はどのようにお手伝いできますか?',
+        edit: '会話の役割名を編集',
+      },
+    },
+    variable: {
+      item: {
+        title: '変数&外部ツール',
+        desc: '変数&外部ツールを挿入',
+      },
+      modal: {
+        add: '新しい変数',
+        addTool: '新しいツール',
+      },
+    },
+    query: {
+      item: {
+        title: 'クエリ',
+        desc: 'ユーザークエリテンプレートを挿入',
+      },
+    },
+    existed: 'プロンプトにすでに存在します',
+  },
+  imageUploader: {
+    uploadFromComputer: 'コンピューターからアップロード',
+    uploadFromComputerReadError: '画像の読み込みに失敗しました。もう一度お試しください。',
+    uploadFromComputerUploadError: '画像のアップロードに失敗しました。もう一度アップロードしてください。',
+    uploadFromComputerLimit: 'アップロード画像のサイズは {{size}} MB を超えることはできません',
+    pasteImageLink: '画像リンクを貼り付ける',
+    pasteImageLinkInputPlaceholder: 'ここに画像リンクを貼り付けてください',
+    pasteImageLinkInvalid: '無効な画像リンク',
+    imageUpload: '画像アップロード',
+  },
+}
+
+export default translation

+ 30 - 0
web/i18n/ja-JP/custom.ts

@@ -0,0 +1,30 @@
+const translation = {
+  custom: 'カスタマイズ',
+  upgradeTip: {
+    prefix: 'プランをアップグレードして',
+    suffix: 'ブランドをカスタマイズしましょう。',
+  },
+  webapp: {
+    title: 'WebAppブランドのカスタマイズ',
+    removeBrand: 'Powered by Difyを削除',
+    changeLogo: 'Powered byブランド画像を変更',
+    changeLogoTip: '最小サイズ40x40pxのSVGまたはPNG形式',
+  },
+  app: {
+    title: 'アプリヘッダーブランドのカスタマイズ',
+    changeLogoTip: '最小サイズ80x80pxのSVGまたはPNG形式',
+  },
+  upload: 'アップロード',
+  uploading: 'アップロード中',
+  uploadedFail: '画像のアップロードに失敗しました。再度アップロードしてください。',
+  change: '変更',
+  apply: '適用',
+  restore: 'デフォルトに戻す',
+  customize: {
+    contactUs: 'お問い合わせ',
+    prefix: 'アプリ内のブランドロゴをカスタマイズするには、',
+    suffix: 'エンタープライズ版にアップグレードしてください。',
+  },
+}
+
+export default translation

+ 130 - 0
web/i18n/ja-JP/dataset-creation.ts

@@ -0,0 +1,130 @@
+const translation = {
+  steps: {
+    header: {
+      creation: 'ナレッジの作成',
+      update: 'データの追加',
+    },
+    one: 'データソースの選択',
+    two: 'テキストの前処理とクリーニング',
+    three: '実行して完了',
+  },
+  error: {
+    unavailable: 'このナレッジは利用できません',
+  },
+  stepOne: {
+    filePreview: 'ファイルプレビュー',
+    pagePreview: 'ページプレビュー',
+    dataSourceType: {
+      file: 'テキストファイルからインポート',
+      notion: 'Notionから同期',
+      web: 'ウェブサイトから同期',
+    },
+    uploader: {
+      title: 'テキストファイルをアップロード',
+      button: 'ファイルをドラッグ&ドロップするか',
+      browse: '参照',
+      tip: '{{supportTypes}}をサポートしています。1つあたりの最大サイズは{{size}}MBです。',
+      validation: {
+        typeError: 'サポートされていないファイルタイプです',
+        size: 'ファイルサイズが大きすぎます。最大サイズは{{size}}MBです',
+        count: '複数のファイルはサポートされていません',
+        filesNumber: 'バッチアップロードの制限({{filesNumber}}個)に達しました。',
+      },
+      cancel: 'キャンセル',
+      change: '変更',
+      failed: 'アップロードに失敗しました',
+    },
+    notionSyncTitle: 'Notionが接続されていません',
+    notionSyncTip: 'Notionと同期するには、まずNotionへの接続が必要です。',
+    connect: '接続する',
+    button: '次へ',
+    emptyDatasetCreation: '空のナレッジを作成します',
+    modal: {
+      title: '空のナレッジを作成',
+      tip: '空のナレッジにはドキュメントが含まれず、いつでもドキュメントをアップロードできます。',
+      input: 'ナレッジ名',
+      placeholder: '入力してください',
+      nameNotEmpty: '名前は空にできません',
+      nameLengthInvaild: '名前は1〜40文字である必要があります',
+      cancelButton: 'キャンセル',
+      confirmButton: '作成',
+      failed: '作成に失敗しました',
+    },
+  },
+  stepTwo: {
+    segmentation: 'チャンク設定',
+    auto: '自動',
+    autoDescription: 'チャンクと前処理ルールを自動的に設定します。初めてのユーザーはこれを選択することをおすすめします。',
+    custom: 'カスタム',
+    customDescription: 'チャンクのルール、チャンクの長さ、前処理ルールなどをカスタマイズします。',
+    separator: 'セグメント識別子',
+    separatorPlaceholder: '例えば改行(\\\\n)や特殊なセパレータ(例:「***」)',
+    maxLength: '最大チャンク長',
+    overlap: 'チャンクのオーバーラップ',
+    overlapTip: 'チャンクのオーバーラップを設定することで、それらの間の意味的な関連性を維持し、検索効果を向上させることができます。最大チャンクサイズの10%〜25%を設定することをおすすめします。',
+    overlapCheck: 'チャンクのオーバーラップは最大チャンク長を超えてはいけません',
+    rules: 'テキストの前処理ルール',
+    removeExtraSpaces: '連続するスペース、改行、タブを置換する',
+    removeUrlEmails: 'すべてのURLとメールアドレスを削除する',
+    removeStopwords: '「a」「an」「the」などのストップワードを削除する',
+    preview: '確認&プレビュー',
+    reset: 'リセット',
+    indexMode: 'インデックスモード',
+    qualified: '高品質',
+    recommend: 'おすすめ',
+    qualifiedTip: 'ユーザーのクエリに対してより高い精度を提供するために、デフォルトのシステム埋め込みインターフェースを呼び出して処理します。',
+    warning: 'モデルプロバイダのAPIキーを設定してください。',
+    click: '設定に移動',
+    economical: '経済的',
+    economicalTip: 'オフラインのベクトルエンジン、キーワードインデックスなどを使用して、トークンを消費せずに精度を低下させます。',
+    QATitle: '質問と回答形式でセグメント化',
+    QATip: 'このオプションを有効にすると、追加のトークンが消費されます',
+    QALanguage: '使用言語',
+    emstimateCost: '見積もり',
+    emstimateSegment: '推定チャンク数',
+    segmentCount: 'チャンク',
+    calculating: '計算中...',
+    fileSource: 'ドキュメントの前処理',
+    notionSource: 'ページの前処理',
+    other: 'その他',
+    fileUnit: 'ファイル',
+    notionUnit: 'ページ',
+    lastStep: '最後のステップ',
+    nextStep: '保存して処理',
+    save: '保存して処理',
+    cancel: 'キャンセル',
+    sideTipTitle: 'なぜチャンクと前処理が必要なのか',
+    sideTipP1: 'テキストデータを処理する際、チャンクとクリーニングは2つの重要な前処理ステップです。',
+    sideTipP2: 'セグメンテーションは長いテキストを段落に分割し、モデルがより理解しやすくします。これにより、モデルの結果の品質と関連性が向上します。',
+    sideTipP3: 'クリーニングは不要な文字や書式を削除し、ナレッジをよりクリーンで解析しやすいものにします。',
+    sideTipP4: '適切なチャンクとクリーニングはモデルのパフォーマンスを向上させ、より正確で価値のある結果を提供します。',
+    previewTitle: 'プレビュー',
+    previewTitleButton: 'プレビュー',
+    previewButton: 'Q&A形式に切り替える',
+    previewSwitchTipStart: '現在のチャンクプレビューはテキスト形式です。質問と回答形式のプレビューに切り替えると、',
+    previewSwitchTipEnd: ' 追加のトークンが消費されます',
+    characters: '文字',
+    indexSettedTip: 'インデックス方法を変更するには、',
+    retrivalSettedTip: 'インデックス方法を変更するには、',
+    datasetSettingLink: 'ナレッジ設定',
+  },
+  stepThree: {
+    creationTitle: '🎉 ナレッジが作成されました',
+    creationContent: 'ナレッジの名前は自動的に設定されましたが、いつでも変更できます',
+    label: 'ナレッジ名',
+    additionTitle: '🎉 ドキュメントがアップロードされました',
+    additionP1: 'ドキュメントはナレッジにアップロードされました',
+    additionP2: '、ナレッジのドキュメントリストで見つけることができます。',
+    stop: '処理を停止',
+    resume: '処理を再開',
+    navTo: 'ドキュメントに移動',
+    sideTipTitle: '次は何ですか',
+    sideTipContent: 'ドキュメントのインデックスが完了したら、ナレッジをアプリケーションのコンテキストとして統合することができます。プロンプトオーケストレーションページでコンテキスト設定を見つけることができます。また、独立したChatGPTインデックスプラグインとしてリリースすることもできます。',
+    modelTitle: '埋め込みを停止してもよろしいですか?',
+    modelContent: '後で処理を再開する必要がある場合は、中断した場所から続行します。',
+    modelButtonConfirm: '確認',
+    modelButtonCancel: 'キャンセル',
+  },
+}
+
+export default translation

+ 349 - 0
web/i18n/ja-JP/dataset-documents.ts

@@ -0,0 +1,349 @@
+const translation = {
+  list: {
+    title: 'ドキュメント',
+    desc: 'ナレッジのすべてのファイルがここに表示され、ナレッジ全体がDifyの引用やチャットプラグインを介してリンクされるか、インデックス化されることができます。',
+    addFile: 'ファイルを追加',
+    addPages: 'ページを追加',
+    table: {
+      header: {
+        fileName: 'ファイル名',
+        words: '単語数',
+        hitCount: '検索回数',
+        uploadTime: 'アップロード時間',
+        status: 'ステータス',
+        action: 'アクション',
+      },
+    },
+    action: {
+      uploadFile: '新しいファイルをアップロード',
+      settings: 'セグメント設定',
+      addButton: 'チャンクを追加',
+      add: 'チャンクを追加',
+      batchAdd: '一括追加',
+      archive: 'アーカイブ',
+      unarchive: 'アーカイブ解除',
+      delete: '削除',
+      enableWarning: 'アーカイブされたファイルは有効にできません',
+      sync: '同期',
+    },
+    index: {
+      enable: '有効にする',
+      disable: '無効にする',
+      all: 'すべて',
+      enableTip: 'ファイルをインデックス化できます',
+      disableTip: 'ファイルをインデックス化できません',
+    },
+    status: {
+      queuing: 'キューイング中',
+      indexing: 'インデックス化中',
+      paused: '一時停止中',
+      error: 'エラー',
+      available: '利用可能',
+      enabled: '有効',
+      disabled: '無効',
+      archived: 'アーカイブ済み',
+    },
+    empty: {
+      title: 'まだドキュメントがありません',
+      upload: {
+        tip: 'ファイルをアップロードしたり、ウェブサイトから同期したり、NotionやGitHubなどのウェブアプリから同期することができます。',
+      },
+      sync: {
+        tip: 'Difyは定期的にNotionからファイルをダウンロードし、処理を完了します。',
+      },
+    },
+    delete: {
+      title: '本当に削除しますか?',
+      content: '後で処理を再開する必要がある場合は、中断した場所から続行します。',
+    },
+    batchModal: {
+      title: '一括追加',
+      csvUploadTitle: 'CSVファイルをここにドラッグアンドドロップするか、',
+      browse: '参照',
+      tip: 'CSVファイルは次の構造に準拠する必要があります:',
+      question: '質問',
+      answer: '回答',
+      contentTitle: 'チャンクの内容',
+      content: '内容',
+      template: 'テンプレートをここからダウンロード',
+      cancel: 'キャンセル',
+      run: '一括実行',
+      runError: '一括実行に失敗しました',
+      processing: '一括処理中',
+      completed: 'インポート完了',
+      error: 'インポートエラー',
+      ok: 'OK',
+    },
+  },
+  metadata: {
+    title: 'メタデータ',
+    desc: 'ドキュメントのメタデータにラベルを付けることで、AIがタイムリーにアクセスできるようになり、ユーザーに参照元が公開されます。',
+    dateTimeFormat: 'YYYY年M月D日 hh:mm A',
+    docTypeSelectTitle: 'ドキュメントタイプを選択してください',
+    docTypeChangeTitle: 'ドキュメントタイプを変更',
+    docTypeSelectWarning:
+      'ドキュメントタイプを変更すると、現在入力されているメタデータは保持されなくなります',
+    firstMetaAction: '始めましょう',
+    placeholder: {
+      add: '追加',
+      select: '選択',
+    },
+    source: {
+      upload_file: 'ファイルをアップロード',
+      notion: 'Notionから同期',
+      github: 'GitHubから同期',
+    },
+    type: {
+      book: '書籍',
+      webPage: 'ウェブページ',
+      paper: '論文',
+      socialMediaPost: 'ソーシャルメディアの投稿',
+      personalDocument: '個人のドキュメント',
+      businessDocument: 'ビジネスドキュメント',
+      IMChat: 'IMチャット',
+      wikipediaEntry: 'Wikipediaのエントリー',
+      notion: 'Notionから同期',
+      github: 'GitHubから同期',
+      technicalParameters: '技術的なパラメータ',
+    },
+    field: {
+      processRule: {
+        processDoc: 'ドキュメントの処理',
+        segmentRule: 'チャンクのルール',
+        segmentLength: 'チャンクの長さ',
+        processClean: 'テキストの前処理',
+      },
+      book: {
+        title: 'タイトル',
+        language: '言語',
+        author: '著者',
+        publisher: '出版社',
+        publicationDate: '出版日',
+        ISBN: 'ISBN',
+        category: 'カテゴリ',
+      },
+      webPage: {
+        title: 'タイトル',
+        url: 'URL',
+        language: '言語',
+        authorPublisher: '著者/出版社',
+        publishDate: '公開日',
+        topicsKeywords: 'トピック/キーワード',
+        description: '説明',
+      },
+      paper: {
+        title: 'タイトル',
+        language: '言語',
+        author: '著者',
+        publishDate: '公開日',
+        journalConferenceName: 'ジャーナル/会議名',
+        volumeIssuePage: '巻号ページ',
+        DOI: 'DOI',
+        topicsKeywords: 'トピック/キーワード',
+        abstract: '要約',
+      },
+      socialMediaPost: {
+        platform: 'プラットフォーム',
+        authorUsername: '著者/ユーザー名',
+        publishDate: '公開日',
+        postURL: '投稿URL',
+        topicsTags: 'トピック/タグ',
+      },
+      personalDocument: {
+        title: 'タイトル',
+        author: '著者',
+        creationDate: '作成日',
+        lastModifiedDate: '最終更新日',
+        documentType: 'ドキュメントタイプ',
+        tagsCategory: 'タグ/カテゴリ',
+      },
+      businessDocument: {
+        title: 'タイトル',
+        author: '著者',
+        creationDate: '作成日',
+        lastModifiedDate: '最終更新日',
+        documentType: 'ドキュメントタイプ',
+        departmentTeam: '部署/チーム',
+      },
+      IMChat: {
+        chatPlatform: 'チャットプラットフォーム',
+        chatPartiesGroupName: 'チャット参加者/グループ名',
+        participants: '参加者',
+        startDate: '開始日',
+        endDate: '終了日',
+        topicsKeywords: 'トピック/キーワード',
+        fileType: 'ファイルタイプ',
+      },
+      wikipediaEntry: {
+        title: 'タイトル',
+        language: '言語',
+        webpageURL: 'ウェブページURL',
+        editorContributor: '編集者/寄稿者',
+        lastEditDate: '最終編集日',
+        summaryIntroduction: '概要/紹介',
+      },
+      notion: {
+        title: 'タイトル',
+        language: '言語',
+        author: '著者',
+        createdTime: '作成日時',
+        lastModifiedTime: '最終更新日時',
+        url: 'URL',
+        tag: 'タグ',
+        description: '説明',
+      },
+      github: {
+        repoName: 'リポジトリ名',
+        repoDesc: 'リポジトリの説明',
+        repoOwner: 'リポジトリの所有者',
+        fileName: 'ファイル名',
+        filePath: 'ファイルパス',
+        programmingLang: 'プログラミング言語',
+        url: 'URL',
+        license: 'ライセンス',
+        lastCommitTime: '最終コミット時刻',
+        lastCommitAuthor: '最終コミットの著者',
+      },
+      originInfo: {
+        originalFilename: '元のファイル名',
+        originalFileSize: '元のファイルサイズ',
+        uploadDate: 'アップロード日',
+        lastUpdateDate: '最終更新日',
+        source: 'ソース',
+      },
+      technicalParameters: {
+        segmentSpecification: 'チャンクの仕様',
+        segmentLength: 'チャンクの長さ',
+        avgParagraphLength: '平均段落長',
+        paragraphs: '段落',
+        hitCount: '検索回数',
+        embeddingTime: '埋め込み時間',
+        embeddedSpend: '埋め込み時間',
+      },
+    },
+    languageMap: {
+      zh: '中国語',
+      en: '英語',
+      es: 'スペイン語',
+      fr: 'フランス語',
+      de: 'ドイツ語',
+      ja: '日本語',
+      ko: '韓国語',
+      ru: 'ロシア語',
+      ar: 'アラビア語',
+      pt: 'ポルトガル語',
+      it: 'イタリア語',
+      nl: 'オランダ語',
+      pl: 'ポーランド語',
+      sv: 'スウェーデン語',
+      tr: 'トルコ語',
+      he: 'ヘブライ語',
+      hi: 'ヒンディー語',
+      da: 'デンマーク語',
+      fi: 'フィンランド語',
+      no: 'ノルウェー語',
+      hu: 'ハンガリー語',
+      el: 'ギリシャ語',
+      cs: 'チェコ語',
+      th: 'タイ語',
+      id: 'インドネシア語',
+    },
+    categoryMap: {
+      book: {
+        fiction: 'フィクション',
+        biography: '伝記',
+        history: '歴史',
+        science: '科学',
+        technology: 'テクノロジー',
+        education: '教育',
+        philosophy: '哲学',
+        religion: '宗教',
+        socialSciences: '社会科学',
+        art: 'アート',
+        travel: '旅行',
+        health: '健康',
+        selfHelp: '自己啓発',
+        businessEconomics: 'ビジネス・経済',
+        cooking: '料理',
+        childrenYoungAdults: '子供・若者向け',
+        comicsGraphicNovels: 'コミック・グラフィックノベル',
+        poetry: '詩',
+        drama: 'ドラマ',
+        other: 'その他',
+      },
+      personalDoc: {
+        notes: 'メモ',
+        blogDraft: 'ブログの下書き',
+        diary: '日記',
+        researchReport: '研究レポート',
+        bookExcerpt: '書籍の抜粋',
+        schedule: 'スケジュール',
+        list: 'リスト',
+        projectOverview: 'プロジェクトの概要',
+        photoCollection: '写真コレクション',
+        creativeWriting: '創作',
+        codeSnippet: 'コードスニペット',
+        designDraft: 'デザインの下書き',
+        personalResume: '履歴書',
+        other: 'その他',
+      },
+      businessDoc: {
+        meetingMinutes: '会議議事録',
+        researchReport: '研究レポート',
+        proposal: '提案',
+        employeeHandbook: '従業員ハンドブック',
+        trainingMaterials: '研修資料',
+        requirementsDocument: '要件定義書',
+        designDocument: '設計書',
+        productSpecification: '製品仕様書',
+        financialReport: '財務報告書',
+        marketAnalysis: '市場分析',
+        projectPlan: 'プロジェクト計画',
+        teamStructure: 'チーム構成',
+        policiesProcedures: 'ポリシーと手順',
+        contractsAgreements: '契約と合意',
+        emailCorrespondence: 'メールのやり取り',
+        other: 'その他',
+      },
+    },
+  },
+  embedding: {
+    processing: '埋め込み処理中...',
+    paused: '埋め込みが一時停止中',
+    completed: '埋め込みが完了しました',
+    error: '埋め込みエラー',
+    docName: 'ドキュメントの前処理',
+    mode: 'セグメンテーションルール',
+    segmentLength: 'チャンクの長さ',
+    textCleaning: 'テキストの前処理',
+    segments: '段落',
+    highQuality: '高品質モード',
+    economy: '経済モード',
+    estimate: '推定消費量',
+    stop: '処理を停止',
+    resume: '処理を再開',
+    automatic: '自動',
+    custom: 'カスタム',
+    previewTip: '埋め込みが完了した後、段落のプレビューが利用可能になります',
+  },
+  segment: {
+    paragraphs: '段落',
+    keywords: 'キーワード',
+    addKeyWord: 'キーワードを追加',
+    keywordError: 'キーワードの最大長は20です',
+    characters: '文字',
+    hitCount: '検索回数',
+    vectorHash: 'ベクトルハッシュ: ',
+    questionPlaceholder: 'ここに質問を追加',
+    questionEmpty: '質問は空にできません',
+    answerPlaceholder: 'ここに回答を追加',
+    answerEmpty: '回答は空にできません',
+    contentPlaceholder: 'ここに内容を追加',
+    contentEmpty: '内容は空にできません',
+    newTextSegment: '新しいテキストセグメント',
+    newQaSegment: '新しいQ&Aセグメント',
+    delete: 'このチャンクを削除しますか?',
+  },
+}
+
+export default translation

+ 28 - 0
web/i18n/ja-JP/dataset-hit-testing.ts

@@ -0,0 +1,28 @@
+const translation = {
+  title: '検索テスト',
+  desc: '与えられたクエリテキストに基づいたナレッジのヒット効果をテストします。',
+  dateTimeFormat: 'MM/DD/YYYY hh:mm A',
+  recents: '最近の結果',
+  table: {
+    header: {
+      source: 'ソース',
+      text: 'テキスト',
+      time: '時間',
+    },
+  },
+  input: {
+    title: 'ソーステキスト',
+    placeholder: 'テキストを入力してください。短い記述文がおすすめです。',
+    countWarning: '最大200文字まで入力できます。',
+    indexWarning: '高品質のナレッジのみ。',
+    testing: 'テスト中',
+  },
+  hit: {
+    title: '検索結果パラグラフ',
+    emptyTip: '検索テストの結果がここに表示されます。',
+  },
+  noRecentTip: '最近のクエリ結果はありません。',
+  viewChart: 'ベクトルチャートを表示',
+}
+
+export default translation

+ 33 - 0
web/i18n/ja-JP/dataset-settings.ts

@@ -0,0 +1,33 @@
+const translation = {
+  title: 'ナレッジの設定',
+  desc: 'ここではナレッジのプロパティと動作方法を変更できます。',
+  form: {
+    name: 'ナレッジ名',
+    namePlaceholder: 'ナレッジ名を入力してください',
+    nameError: '名前は空にできません',
+    desc: 'ナレッジの説明',
+    descInfo: 'ナレッジの内容を概説するための明確なテキストの説明を書いてください。この説明は、複数のナレッジから推論を選択する際の基準として使用されます。',
+    descPlaceholder: 'このナレッジに含まれる内容を説明してください。詳細な説明は、AIがナレッジの内容にタイムリーにアクセスできるようにします。空の場合、Difyはデフォルトのヒット戦略を使用します。',
+    descWrite: '良いナレッジの説明の書き方を学ぶ。',
+    permissions: '権限',
+    permissionsOnlyMe: '自分のみ',
+    permissionsAllMember: 'すべてのチームメンバー',
+    indexMethod: 'インデックス方法',
+    indexMethodHighQuality: '高品質',
+    indexMethodHighQualityTip: 'ユーザーのクエリ時により高い精度を提供するために、OpenAIの埋め込みインターフェースを呼び出して処理します。',
+    indexMethodEconomy: '経済的',
+    indexMethodEconomyTip: 'オフラインのベクトルエンジン、キーワードインデックスなどを使用して精度を低下させることなく、トークンを消費せずに処理します。',
+    embeddingModel: '埋め込みモデル',
+    embeddingModelTip: '埋め込みモデルを変更するには、',
+    embeddingModelTipLink: '設定',
+    retrievalSetting: {
+      title: '検索設定',
+      learnMore: '詳細を学ぶ',
+      description: ' 検索方法についての詳細',
+      longDescription: ' 検索方法についての詳細については、いつでもナレッジの設定で変更できます。',
+    },
+    save: '保存',
+  },
+}
+
+export default translation

+ 47 - 0
web/i18n/ja-JP/dataset.ts

@@ -0,0 +1,47 @@
+const translation = {
+  knowledge: '知識',
+  documentCount: ' ドキュメント',
+  wordCount: 'k 単語',
+  appCount: ' リンクされたアプリ',
+  createDataset: '知識を作成',
+  createDatasetIntro: '独自のテキストデータをインポートするか、LLMコンテキストの強化のためにWebhookを介してリアルタイムでデータを書き込むことができます。',
+  deleteDatasetConfirmTitle: 'この知識を削除しますか?',
+  deleteDatasetConfirmContent:
+    '知識を削除すると元に戻すことはできません。ユーザーはもはやあなたの知識にアクセスできず、すべてのプロンプトの設定とログが永久に削除されます。',
+  datasetDeleted: '知識が削除されました',
+  datasetDeleteFailed: '知識の削除に失敗しました',
+  didYouKnow: 'ご存知ですか?',
+  intro1: '知識はDifyアプリケーションに統合することができます',
+  intro2: 'コンテキストとして',
+  intro3: '、',
+  intro4: 'または',
+  intro5: '作成することができます',
+  intro6: '単体のChatGPTインデックスプラグインとして公開するために',
+  unavailable: '利用不可',
+  unavailableTip: '埋め込みモデルが利用できません。デフォルトの埋め込みモデルを設定する必要があります',
+  datasets: '知識',
+  datasetsApi: 'API',
+  retrieval: {
+    semantic_search: {
+      title: 'ベクトル検索',
+      description: 'クエリの埋め込みを生成し、そのベクトル表現に最も類似したテキストチャンクを検索します。',
+    },
+    full_text_search: {
+      title: '全文検索',
+      description: 'ドキュメント内のすべての用語をインデックス化し、ユーザーが任意の用語を検索してそれに関連するテキストチャンクを取得できるようにします。',
+    },
+    hybrid_search: {
+      title: 'ハイブリッド検索',
+      description: '全文検索とベクトル検索を同時に実行し、ユーザーのクエリに最適なマッチを選択するために再ランク付けを行います。再ランクモデルAPIの設定が必要です。',
+      recommend: 'おすすめ',
+    },
+    invertedIndex: {
+      title: '逆インデックス',
+      description: '効率的な検索に使用される構造です。各用語が含まれるドキュメントまたはWebページを指すように、用語ごとに整理されています。',
+    },
+    change: '変更',
+    changeRetrievalMethod: '検索方法の変更',
+  },
+}
+
+export default translation

+ 41 - 0
web/i18n/ja-JP/explore.ts

@@ -0,0 +1,41 @@
+const translation = {
+  title: '探索する',
+  sidebar: {
+    discovery: '探索',
+    chat: 'チャット',
+    workspace: 'ワークスペース',
+    action: {
+      pin: 'ピン留め',
+      unpin: 'ピン留め解除',
+      rename: '名前変更',
+      delete: '削除',
+    },
+    delete: {
+      title: 'アプリを削除',
+      content: 'このアプリを削除してもよろしいですか?',
+    },
+  },
+  apps: {
+    title: 'Difyによるアプリの探索',
+    description: 'これらのテンプレートアプリを即座に使用するか、テンプレートに基づいて独自のアプリをカスタマイズしてください。',
+    allCategories: 'すべてのカテゴリ',
+  },
+  appCard: {
+    addToWorkspace: 'ワークスペースに追加',
+    customize: 'カスタマイズ',
+  },
+  appCustomize: {
+    title: '{{name}}からアプリを作成',
+    subTitle: 'アプリアイコンと名前',
+    nameRequired: 'アプリ名は必須です',
+  },
+  category: {
+    Assistant: 'アシスタント',
+    Writing: '執筆',
+    Translate: '翻訳',
+    Programming: 'プログラミング',
+    HR: '人事',
+  },
+}
+
+export default translation

+ 4 - 0
web/i18n/ja-JP/layout.ts

@@ -0,0 +1,4 @@
+const translation = {
+}
+
+export default translation

+ 59 - 0
web/i18n/ja-JP/login.ts

@@ -0,0 +1,59 @@
+const translation = {
+  pageTitle: 'はじめましょう!👋',
+  welcome: 'Difyへようこそ。続行するにはログインしてください。',
+  email: 'メールアドレス',
+  emailPlaceholder: 'メールアドレスを入力してください',
+  password: 'パスワード',
+  passwordPlaceholder: 'パスワードを入力してください',
+  name: 'ユーザー名',
+  namePlaceholder: 'ユーザー名を入力してください',
+  forget: 'パスワードをお忘れですか?',
+  signBtn: 'サインイン',
+  installBtn: 'セットアップ',
+  setAdminAccount: '管理者アカウントの設定',
+  setAdminAccountDesc: 'アプリケーションの作成やLLMプロバイダの管理など、管理者アカウントの最大権限を設定します。',
+  createAndSignIn: '作成してサインイン',
+  oneMoreStep: 'あと一歩',
+  createSample: 'この情報を基に、サンプルアプリケーションを作成します',
+  invitationCode: '招待コード',
+  invitationCodePlaceholder: '招待コードを入力してください',
+  interfaceLanguage: 'インターフェース言語',
+  timezone: 'タイムゾーン',
+  go: 'Difyへ移動',
+  sendUsMail: '自己紹介をメールで送信し、招待リクエストを処理します。',
+  acceptPP: 'プライバシーポリシーを読み、同意します',
+  reset: 'パスワードをリセットするには、次のコマンドを実行してください',
+  withGitHub: 'GitHubで続行',
+  withGoogle: 'Googleで続行',
+  rightTitle: 'LLMのフルポテンシャルを解き放つ',
+  rightDesc: '魅力的で操作可能で改善可能なAIアプリケーションを簡単に構築します。',
+  tos: '利用規約',
+  pp: 'プライバシーポリシー',
+  tosDesc: 'サインアップすることで、以下に同意するものとします',
+  donthave: 'お持ちでない場合',
+  invalidInvitationCode: '無効な招待コード',
+  accountAlreadyInited: 'アカウントは既に初期化されています',
+  error: {
+    emailEmpty: 'メールアドレスは必須です',
+    emailInValid: '有効なメールアドレスを入力してください',
+    nameEmpty: '名前は必須です',
+    passwordEmpty: 'パスワードは必須です',
+    passwordInvalid: 'パスワードは文字と数字を含み、長さは8以上である必要があります',
+  },
+  license: {
+    tip: 'Dify Community Editionを開始する前に、GitHubの',
+    link: 'オープンソースライセンス',
+  },
+  join: '参加する',
+  joinTipStart: 'あなたを招待します',
+  joinTipEnd: 'チームに参加する',
+  invalid: 'リンクの有効期限が切れています',
+  explore: 'Difyを探索する',
+  activatedTipStart: 'あなたは',
+  activatedTipEnd: 'チームに参加しました',
+  activated: '今すぐサインイン',
+  adminInitPassword: '管理者初期化パスワード',
+  validate: '検証',
+}
+
+export default translation

+ 4 - 0
web/i18n/ja-JP/register.ts

@@ -0,0 +1,4 @@
+const translation = {
+}
+
+export default translation

+ 74 - 0
web/i18n/ja-JP/share-app.ts

@@ -0,0 +1,74 @@
+const translation = {
+  common: {
+    welcome: '利用していただきありがとうございます',
+    appUnavailable: 'アプリが利用できません',
+    appUnkonwError: 'アプリが利用できません',
+  },
+  chat: {
+    newChat: '新しいチャット',
+    pinnedTitle: 'ピン留めされた',
+    unpinnedTitle: 'チャット',
+    newChatDefaultName: '新しい会話',
+    resetChat: '会話をリセット',
+    powerBy: 'Powered by',
+    prompt: 'プロンプト',
+    privatePromptConfigTitle: '会話の設定',
+    publicPromptConfigTitle: '初期プロンプト',
+    configStatusDes: '開始前に、会話の設定を変更できます',
+    configDisabled:
+      '前回のセッションの設定がこのセッションで使用されました。',
+    startChat: 'チャットを開始',
+    privacyPolicyLeft:
+      'アプリ開発者が提供する',
+    privacyPolicyMiddle:
+      'プライバシーポリシー',
+    privacyPolicyRight:
+      'をお読みください。',
+    deleteConversation: {
+      title: '会話を削除する',
+      content: 'この会話を削除してもよろしいですか?',
+    },
+    tryToSolve: '解決しようとしています',
+    temporarySystemIssue: '申し訳ありません、一時的なシステムの問題が発生しました。',
+  },
+  generation: {
+    tabs: {
+      create: '一度だけ実行',
+      batch: '一括実行',
+      saved: '保存済み',
+    },
+    savedNoData: {
+      title: 'まだ結果が保存されていません!',
+      description: 'コンテンツの生成を開始し、保存された結果をこちらで見つけてください。',
+      startCreateContent: 'コンテンツの作成を開始',
+    },
+    title: 'AI Completion',
+    queryTitle: 'コンテンツのクエリ',
+    completionResult: 'Completion 結果',
+    queryPlaceholder: 'クエリコンテンツを書いてください...',
+    run: '実行',
+    copy: 'コピー',
+    resultTitle: 'AI Completion',
+    noData: 'AIはここで必要なものを提供します。',
+    csvUploadTitle: 'CSVファイルをここにドラッグアンドドロップするか、',
+    browse: '参照',
+    csvStructureTitle: 'CSVファイルは以下の構造に準拠する必要があります:',
+    downloadTemplate: 'こちらからテンプレートをダウンロード',
+    field: 'フィールド',
+    batchFailed: {
+      info: '{{num}} 回の実行が失敗しました',
+      retry: '再試行',
+      outputPlaceholder: '出力コンテンツなし',
+    },
+    errorMsg: {
+      empty: 'アップロードされたファイルにコンテンツを入力してください。',
+      fileStructNotMatch: 'アップロードされたCSVファイルが構造と一致しません。',
+      emptyLine: '行 {{rowIndex}} が空です',
+      invalidLine: '行 {{rowIndex}}: {{varName}} の値は空にできません',
+      moreThanMaxLengthLine: '行 {{rowIndex}}: {{varName}} の値は {{maxLength}} 文字を超えることはできません',
+      atLeastOne: 'アップロードされたファイルには少なくとも1行の入力が必要です。',
+    },
+  },
+}
+
+export default translation

+ 115 - 0
web/i18n/ja-JP/tools.ts

@@ -0,0 +1,115 @@
+const translation = {
+  title: 'ツール',
+  createCustomTool: 'カスタムツールを作成する',
+  type: {
+    all: 'すべて',
+    builtIn: '組み込み',
+    custom: 'カスタム',
+  },
+  contribute: {
+    line1: '私は',
+    line2: 'Difyへのツールの貢献に興味があります。',
+    viewGuide: 'ガイドを見る',
+  },
+  author: '著者',
+  auth: {
+    unauthorized: '認証する',
+    authorized: '認証済み',
+    setup: '使用するための認証を設定する',
+    setupModalTitle: '認証の設定',
+    setupModalTitleDescription: '資格情報を構成した後、ワークスペース内のすべてのメンバーがアプリケーションのオーケストレーション時にこのツールを使用できます。',
+  },
+  includeToolNum: '{{num}}個のツールが含まれています',
+  addTool: 'ツールを追加する',
+  createTool: {
+    title: 'カスタムツールを作成する',
+    editAction: '設定',
+    editTitle: 'カスタムツールを編集する',
+    name: '名前',
+    toolNamePlaceHolder: 'ツール名を入力してください',
+    schema: 'スキーマ',
+    schemaPlaceHolder: 'ここにOpenAPIスキーマを入力してください',
+    viewSchemaSpec: 'OpenAPI-Swagger仕様を表示する',
+    importFromUrl: 'URLからインポートする',
+    importFromUrlPlaceHolder: 'https://...',
+    urlError: '有効なURLを入力してください',
+    examples: '例',
+    exampleOptions: {
+      json: '天気(JSON)',
+      yaml: 'ペットストア(YAML)',
+      blankTemplate: '空白テンプレート',
+    },
+    availableTools: {
+      title: '利用可能なツール',
+      name: '名前',
+      description: '説明',
+      method: 'メソッド',
+      path: 'パス',
+      action: 'アクション',
+      test: 'テスト',
+    },
+    authMethod: {
+      title: '認証方法',
+      type: '認証タイプ',
+      keyTooltip: 'HTTPヘッダーキー。アイデアがない場合は "Authorization" として残しておいてもかまいません。またはカスタム値に設定できます。',
+      types: {
+        none: 'なし',
+        api_key: 'APIキー',
+        apiKeyPlaceholder: 'APIキーのHTTPヘッダー名',
+        apiValuePlaceholder: 'APIキーを入力してください',
+      },
+      key: 'キー',
+      value: '値',
+    },
+    authHeaderPrefix: {
+      title: '認証タイプ',
+      types: {
+        basic: 'ベーシック',
+        bearer: 'ベアラー',
+        custom: 'カスタム',
+      },
+    },
+    privacyPolicy: 'プライバシーポリシー',
+    privacyPolicyPlaceholder: 'プライバシーポリシーを入力してください',
+  },
+  test: {
+    title: 'テスト',
+    parametersValue: 'パラメーター&値',
+    parameters: 'パラメーター',
+    value: '値',
+    testResult: 'テスト結果',
+    testResultPlaceholder: 'ここにテスト結果が表示されます',
+  },
+  thought: {
+    using: '使用中',
+    used: '使用済み',
+    requestTitle: 'リクエスト先',
+    responseTitle: 'レスポンス先',
+  },
+  setBuiltInTools: {
+    info: '情報',
+    setting: '設定',
+    toolDescription: 'ツールの説明',
+    parameters: 'パラメーター',
+    string: '文字列',
+    number: '数',
+    required: '必須',
+    infoAndSetting: '情報と設定',
+  },
+  noCustomTool: {
+    title: 'カスタムツールがありません!',
+    content: 'AIアプリを構築するためのカスタムツールをここで追加および管理します。',
+    createTool: 'ツールを作成する',
+  },
+  noSearchRes: {
+    title: '申し訳ありません、結果がありません!',
+    content: '検索に一致するツールが見つかりませんでした。',
+    reset: '検索をリセット',
+  },
+  builtInPromptTitle: 'プロンプト',
+  toolRemoved: 'ツールが削除されました',
+  notAuthorized: 'ツールが認可されていません',
+  howToGet: '取得方法',
+}
+
+export default translation

+ 1 - 1
web/i18n/language.ts

@@ -59,7 +59,7 @@ export const languages = [
     value: 'ja-JP',
     name: '日本語(日本)',
     example: 'こんにちは、Dify!',
-    supported: false,
+    supported: true,
   },
   {
     value: 'ko-KR',