Explorar o código

Add and modify jp translation (#16807)

Co-authored-by: crazywoola <427733928@qq.com>
Hanqing Zhao hai 2 meses
pai
achega
2da780e4dc

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

@@ -70,6 +70,7 @@ const translation = {
     noHitHistory: 'ヒット履歴はありません',
   },
   hitHistoryTable: {
+    question: '質問',
     query: 'クエリ',
     match: '一致',
     response: '応答',

+ 1 - 2
web/i18n/ja-JP/app.ts

@@ -26,10 +26,9 @@ const translation = {
   appDeleteFailed: 'アプリの削除に失敗しました',
   join: 'コミュニティに参加する',
   communityIntro:
-    'さまざまなチャンネルでチームメンバーや貢献者、開発者と議論します。',
+  'さまざまなチャンネルでチームメンバーや貢献者、開発者と議論します。',
   roadmap: 'ロードマップを見る',
   newApp: {
-    // this comment is to recreate PR
     startFromBlank: '最初から作成',
     startFromTemplate: 'テンプレートから作成',
     captionAppType: 'どのタイプのアプリを作成しますか?',

+ 44 - 38
web/i18n/ja-JP/billing.ts

@@ -100,61 +100,67 @@ const translation = {
   },
   plans: {
     sandbox: {
-      name: 'Sandbox',
-      description: 'コア機能を無料で試す',
+      name: 'Sandbox(サンドボックス)',
+      for: '主要機能の無料体験',
+      description: '主要機能を無料で体験',
     },
     professional: {
-      name: 'Professional',
-      description: '独立した開発者/小規模チーム向け',
+      name: 'Professional(プロフェッショナル)',
+      for: '個人開発者/小規模チーム向け',
+      description: '個人開発者・小規模チームに最適',
     },
     team: {
-      name: 'Team',
-      description: '中規模チーム向け',
+      name: 'Team(チーム)',
+      for: '中規模チーム向け',
+      description: '成長期のチームに必要な機能を備えたプラン',
     },
     community: {
-      name: 'Community',
-      description: '個人ユーザー、小規模チーム、または非営利プロジェクト向け',
+      name: 'コミュニティ',
+      for: '個人/小規模チーム・非営利プロジェクト向け',
+      description: 'オープンソース版の無料プラン',
       price: '無料',
-      btnText: 'コミュニティを始めましょう',
-      includesTitle: '無料機能:',
+      btnText: 'コミュニティを始めましょう',
+      includesTitle: '無料機能:',
       features: [
-        'すべてのコア機能がパブリック リポジトリでリリースされる',
-        '単一のワークスペース',
-        'Difyオープンソースライセンス準拠しています',
+        'パブリックリポジトリの全コア機能',
+        'シングルワークスペース',
+        'Difyオープンソースライセンス準拠',
       ],
     },
     premium: {
-      name: 'Premium',
-      description: '中規模の組織やチーム向け',
-      price: 'スケーラブル',
-      priceTip: 'クラウドマーケットプレイスに基づく',
-      btnText: 'プレミアムを獲得する',
-      includesTitle: 'コミュニティからのすべてに加えて:',
-      comingSoon: 'Microsoft AzureとGoogle Cloudのアポートは近日公開',
+      name: 'プレミアム',
+      for: '中規模組織・チーム向け',
+      description: 'クラウド対応の拡張版プラン',
+      price: '従量制',
+      priceTip: 'クラウドマーケットプレイス基準',
+      btnText: 'プレミアム版を取得',
+      includesTitle: 'コミュニティ版機能に加えて:',
+      comingSoon: 'Microsoft Azure & Google Cloud 近日対応',
       features: [
-        'さまざまなクラウドプロバイダーによる自己管理の信頼性',
-        '単一のワークスペース',
-        'カスタマイズ Webアプリのロゴやブランド',
-        '優先メールとチャットのサポート',
+        'クラウドプロバイダーによる自己管理',
+        'シングルワークスペース',
+        'Webアプリのロゴ&ブランドカスタマイズ',
+        '優先メール/チャットサポート',
       ],
     },
     enterprise: {
-      name: 'Enterprise',
-      description: 'エンタープライズグレードのセキュリティ、コンプライアンス、拡張性、制御、およびより高度な機能を必要とする企業向け',
+      name: 'エンタープライズ',
+      for: '大規模チーム・企業向け',
+      description: '企業レベルのセキュリティとカスタマイズを実現',
       price: 'カスタム',
-      priceTip: '年間契約のみ',
-      btnText: '営業担当者へのお問い合わせ',
-      includesTitle: 'プレミアムのすべてに加えて:',
+      priceTip: '年間契約専用',
+      btnText: '営業に相談',
+      includesTitle: 'プレミアム版機能に加えて:',
       features: [
-        'エンタープライズグレードのスケーラブルな導入ソリューション',
-        '商用ライセンス認可',
-        'エンタープライズ限定の機能',
-        '複数のワークスペースと企業の管理',
-        'SSO',
-        'Dify Partnersによる交渉済みのSLA',
-        '高度なセキュリティ',
-        'Dify公式によるアップデートとメンテナンス',
-        '専門的な技術サポート',
+        'エンタープライズ向け拡張ソリューション',
+        '商用ライセンス認可',
+        '企業専用機能',
+        'マルチワークスペース管理',
+        'シングルサインオン(SSO',
+        'DifyパートナーによるSLA保証',
+        '高度なセキュリティ管理',
+        '公式メンテナンス&アップデート',
+        'プロフェッショナル技術支援',
       ],
     },
   },

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

@@ -26,6 +26,8 @@ const translation = {
     lineBreak: '改行',
     sure: '確認済み',
     download: 'ダウンロード',
+    downloadSuccess: 'ダウンロード完了',
+    downloadFailed: 'ダウンロードに失敗しました、後で再試行してください。',
     delete: '削除',
     settings: '設定',
     setup: 'セットアップ',
@@ -152,12 +154,22 @@ const translation = {
     workspace: 'ワークスペース',
     createWorkspace: 'ワークスペースを作成',
     helpCenter: 'ヘルプ',
+    support: 'サポート',
+    compliance: 'コンプライアンス',
     communityFeedback: 'フィードバック',
     roadmap: 'ロードマップ',
     community: 'コミュニティ',
     about: 'Difyについて',
     logout: 'ログアウト',
   },
+  compliance: {
+    soc2Type1: 'SOC 2 Type I 報告書',
+    soc2Type2: 'SOC 2 Type II 報告書',
+    iso27001: 'ISO 27001:2022 認証',
+    gdpr: 'GDPR データ処理契約(DPA)',
+    sandboxUpgradeTooltip: 'プロフェッショナルプランまたはチームプランでのみ利用可能',
+    professionalUpgradeTooltip: 'チームプラン以上の契約が必要です',
+  },
   settings: {
     accountGroup: 'アカウント',
     workplaceGroup: 'ワークスペース',

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

@@ -1,6 +1,8 @@
 const translation = {
   custom: 'カスタマイズ',
   upgradeTip: {
+    title: 'プランをアップグレード',
+    des: 'ブランドをカスタマイズするためにはプランをアップグレードしてください。',
     prefix: 'プランをアップグレードして',
     suffix: 'ブランドをカスタマイズしましょう。',
   },

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 24 - 24
web/i18n/ja-JP/dataset-creation.ts


+ 1 - 1
web/i18n/ja-JP/dataset-documents.ts

@@ -1,7 +1,7 @@
 const translation = {
   list: {
     title: 'ドキュメント',
-    desc: 'ナレッジのすべてのファイルがここに表示され、ナレッジ全体がDifyの引用やチャットプラグインを介してリンクされるか、インデックス化されることができます。',
+    desc: 'すべてのファイルがここに表示され、ナレッジベース全体がDifyの引用やチャットプラグインを介してリンクされるか、インデックス化されることができます。',
     learnMore: '詳細はこちら',
     addFile: 'ファイルを追加',
     addPages: 'ページを追加',

+ 11 - 10
web/i18n/ja-JP/dataset-settings.ts

@@ -1,15 +1,15 @@
 const translation = {
-  title: 'ナレッジの設定',
-  desc: 'ここではナレッジのプロパティと動作方法を変更できます。',
+  title: 'ナレッジベースの設定',
+  desc: 'ここではナレッジベースのプロパティと動作方法を変更できます。',
   form: {
-    name: 'ナレッジ名',
-    namePlaceholder: 'ナレッジ名を入力してください',
+    name: 'ナレッジベース名',
+    namePlaceholder: 'ナレッジベース名を入力してください',
     nameError: '名前は空にできません',
-    desc: 'ナレッジの説明',
-    descInfo: 'ナレッジの内容を概説するための明確なテキストの説明を書いてください。この説明は、複数のナレッジから推論を選択する際の基準として使用されます。',
+    desc: 'ナレッジベースの説明',
+    descInfo: 'ナレッジベースの内容を概説するための明確なテキストの説明を書いてください。この説明は、複数のナレッジから推論を選択する際の基準として使用されます。',
     descPlaceholder: 'このデータセットの内容を記述してください。詳細に記述することで、AIがデータセットの内容に迅速にアクセスできるようになります。空欄の場合、LangGeniusはデフォルトの検索方法を使用します。',
     helpText: '適切なデータセットの説明を作成する方法を学びましょう。',
-    descWrite: '良いナレッジの説明の書き方を学ぶ。',
+    descWrite: '良いナレッジベースの説明の書き方を学ぶ。',
     permissions: '権限',
     permissionsOnlyMe: '自分のみ',
     permissionsAllMember: 'すべてのチームメンバー',
@@ -26,14 +26,15 @@ const translation = {
     embeddingModelTipLink: '設定',
     retrievalSetting: {
       title: '検索設定',
+      method: '検索方法',
       learnMore: '詳細はこちら',
       description: ' 検索方法についての詳細',
-      longDescription: ' 検索方法についての詳細については、いつでもナレッジの設定で変更できます。',
+      longDescription: ' 検索方法についての詳細については、いつでもナレッジベースの設定で変更できます。',
     },
     save: '保存',
-    externalKnowledgeID: '外部ナレッジID',
+    externalKnowledgeID: '外部ナレッジベースID',
     retrievalSettings: '取得設定',
-    externalKnowledgeAPI: '外部ナレッジAPI',
+    externalKnowledgeAPI: '外部ナレッジベースAPI',
     indexMethodChangeToEconomyDisabledTip: 'HQからECOへのダウングレードはできません。',
   },
 }

+ 82 - 34
web/i18n/ja-JP/dataset.ts

@@ -1,7 +1,7 @@
 const translation = {
-  knowledge: 'ナレッジ',
+  knowledge: 'ナレッジベース',
   chunkingMode: {
-    general: '一般',
+    general: '汎用',
     parentChild: '親子',
   },
   parentMode: {
@@ -10,33 +10,33 @@ const translation = {
   },
   externalTag: '外部',
   externalAPI: '外部API',
-  externalAPIPanelTitle: '外部ナレッジ連携API',
-  externalKnowledgeId: '外部ナレッジID',
-  externalKnowledgeName: '外部ナレッジ名',
-  externalKnowledgeDescription: 'ナレッジの説明',
-  externalKnowledgeIdPlaceholder: 'ナレッジIDを入力',
+  externalAPIPanelTitle: '外部ナレッジベース連携API',
+  externalKnowledgeId: '外部ナレッジベースID',
+  externalKnowledgeName: '外部ナレッジベース名',
+  externalKnowledgeDescription: 'ナレッジベースの説明',
+  externalKnowledgeIdPlaceholder: 'ナレッジベースIDを入力',
   externalKnowledgeNamePlaceholder: 'ナレッジベース名を入力',
   externalKnowledgeDescriptionPlaceholder: 'このナレッジベースの説明(任意)',
-  learnHowToWriteGoodKnowledgeDescription: '効果的なナレッジの説明の書き方',
-  externalAPIPanelDescription: '外部ナレッジ連携APIは、Dify外のナレッジベースと連携し、そこからナレッジを取得するために使用します。',
-  externalAPIPanelDocumentation: '外部ナレッジ連携APIの作成方法',
+  learnHowToWriteGoodKnowledgeDescription: '効果的なナレッジベースの説明の書き方',
+  externalAPIPanelDescription: '外部ナレッジベース連携APIは、Dify外のナレッジベースと連携し、そこからナレッジベースを取得するために使用します。',
+  externalAPIPanelDocumentation: '外部ナレッジベース連携APIの作成方法',
   localDocs: 'ローカルドキュメント',
   documentCount: ' ドキュメント',
   wordCount: ' k 単語',
   appCount: ' リンクされたアプリ',
-  createDataset: 'ナレッジを作成',
-  createNewExternalAPI: '新しい外部ナレッジ連携APIを作成',
-  noExternalKnowledge: '外部ナレッジ連携APIがありません。ここをクリックして作成してください',
-  createExternalAPI: '外部ナレッジ連携APIを追加',
-  editExternalAPIFormTitle: '外部ナレッジ連携APIを編集',
-  editExternalAPITooltipTitle: '連携中のナレッジ',
+  createDataset: 'ナレッジベースを作成',
+  createNewExternalAPI: '新しい外部ナレッジベース連携APIを作成',
+  noExternalKnowledge: '外部ナレッジベース連携APIがありません。ここをクリックして作成してください',
+  createExternalAPI: '外部ナレッジベース連携APIを追加',
+  editExternalAPIFormTitle: '外部ナレッジベース連携APIを編集',
+  editExternalAPITooltipTitle: '連携中のナレッジベース',
   editExternalAPIConfirmWarningContent: {
-    front: 'この外部ナレッジ連携APIは',
-    end: '件の外部ナレッジと連携しており、この変更はすべてに適用されます。変更を保存しますか?',
+    front: 'この外部ナレッジベース連携APIは',
+    end: '件の外部ナレッジベースと連携しており、この変更はすべてに適用されます。変更を保存しますか?',
   },
   editExternalAPIFormWarning: {
     front: 'この外部APIは',
-    end: '件の外部ナレッジと連携しています',
+    end: '件の外部ナレッジベースと連携しています',
   },
   deleteExternalAPIConfirmWarningContent: {
     title: {
@@ -44,13 +44,13 @@ const translation = {
       end: 'しますか?',
     },
     content: {
-      front: 'この外部ナレッジ連携APIは',
-      end: '件の外部ナレッジと連携しています。このAPIを削除すると、すべて無効になります。このAPIを削除しますか?',
+      front: 'この外部ナレッジベース連携APIは',
+      end: '件の外部ナレッジベースと連携しています。このAPIを削除すると、すべて無効になります。このAPIを削除しますか?',
     },
     noConnectionContent: 'このAPIを削除しますか?',
   },
   selectExternalKnowledgeAPI: {
-    placeholder: '外部ナレッジ連携APIを選択',
+    placeholder: '外部ナレッジベース連携APIを選択',
   },
   connectDataset: '外部ナレッジベースと連携',
   connectDatasetIntro: {
@@ -58,7 +58,7 @@ const translation = {
     content: {
       front: '外部ナレッジベースと連携するには、まず外部APIを作成する必要があります。以下の手順を参照し、',
       link: '外部APIの作成方法',
-      end: 'をご確認ください。次に、対応するナレッジIDを左側のフォームに入力してください。すべての情報が正しければ、連携ボタンをクリックすると、自動的にナレッジベースの検索テストに移動します。',
+      end: 'をご確認ください。次に、対応するナレッジベースIDを左側のフォームに入力してください。すべての情報が正しければ、連携ボタンをクリックすると、自動的にナレッジベースの検索テストに移動します。',
     },
     learnMore: '詳細はこちら',
   },
@@ -70,14 +70,14 @@ const translation = {
     helper5: 'をよくお読みください。',
   },
   createDatasetIntro: '独自のテキストデータをインポートするか、LLMコンテキストの強化のためにWebhookを介してリアルタイムでデータを書き込むことができます。',
-  deleteDatasetConfirmTitle: 'このナレッジを削除しますか?',
+  deleteDatasetConfirmTitle: 'このナレッジベースを削除しますか?',
   deleteDatasetConfirmContent:
-    'ナレッジを削除すると元に戻すことはできません。ユーザーはもはやあなた様のナレッジにアクセスできず、すべてのプロンプトの設定とログが永久に削除されます。',
-  datasetUsedByApp: 'このナレッジは一部のアプリによって使用されています。アプリはこのナレッジを使用できなくなり、すべてのプロンプト設定とログは永久に削除されます。',
-  datasetDeleted: 'ナレッジが削除されました',
-  datasetDeleteFailed: 'ナレッジの削除に失敗しました',
+    'ナレッジベースを削除すると元に戻すことはできません。ユーザーはもはやあなた様のナレッジベースにアクセスできず、すべてのプロンプトの設定とログが永久に削除されます。',
+  datasetUsedByApp: 'このナレッジベースは一部のアプリによって使用されています。アプリはこのナレッジベースを使用できなくなり、すべてのプロンプト設定とログは永久に削除されます。',
+  datasetDeleted: 'ナレッジベースが削除されました',
+  datasetDeleteFailed: 'ナレッジベースの削除に失敗しました',
   didYouKnow: 'ご存知ですか?',
-  intro1: 'ナレッジはDifyアプリケーションに統合することができます',
+  intro1: 'ナレッジベースはDifyアプリケーションに統合することができます',
   intro2: 'コンテキストとして',
   intro3: '、',
   intro4: 'または',
@@ -85,7 +85,7 @@ const translation = {
   intro6: '単体のChatGPTインデックスプラグインとして公開するために',
   unavailable: '利用不可',
   unavailableTip: '埋め込みモデルが利用できません。デフォルトの埋め込みモデルを設定する必要があります',
-  datasets: 'ナレッジ',
+  datasets: 'ナレッジベース',
   datasetsApi: 'API ACCESS',
   externalKnowledgeForm: {
     connect: '連携',
@@ -141,8 +141,8 @@ const translation = {
   defaultRetrievalTip: 'デフォルトでは、マルチパス検索が使用されます。複数のナレッジベースから情報を取得した後、再ランキングを行います。',
   mixtureHighQualityAndEconomicTip: '高品質なナレッジベースとコスト重視のナレッジベースを混在させるには、Rerankモデルが必要です。',
   inconsistentEmbeddingModelTip: '選択されたナレッジベースの埋め込みモデルに一貫性がない場合、Rerankモデルが必要です。',
-  mixtureInternalAndExternalTip: '内部ナレッジと外部ナレッジを混在させるには、Rerankモデルが必要です。',
-  allExternalTip: '外部ナレッジのみを使用する場合、Rerankモデルを有効にするかを選択できます。有効にしない場合、検索結果はスコアに基づいてソートされます。異なるナレッジベースで検索戦略が一貫していないと、結果が不正確になる可能性があります。',
+  mixtureInternalAndExternalTip: '内部と外部のナレッジベースを混在させる場合、Rerankモデルが必要です。',
+  allExternalTip: '外部ナレッジベースのみを使用する場合、Rerankモデルを有効にするかを選択できます。有効にしない場合、検索結果はスコアに基づいてソートされます。異なるナレッジベースで検索戦略が一貫していないと、結果が不正確になる可能性があります。',
   retrievalSettings: '検索設定',
   rerankSettings: 'Rerank設定',
   weightedScore: {
@@ -166,8 +166,56 @@ const translation = {
     cancel: 'キャンセル',
   },
   preprocessDocument: '{{num}}件のドキュメントを前処理',
-  allKnowledge: 'すべての知識',
-  allKnowledgeDescription: 'このワークスペースにすべてのナレッジを表示する場合に選択します。ワークスペースのオーナーのみがすべてのナレッジを管理できます。',
+  allKnowledge: 'ナレッジベース全体',
+  allKnowledgeDescription: 'このワークスペースにナレッジベース全体を表示する場合に選択します。ワークスペースのオーナーのみがすべてのナレッジベースを管理できます。',
+  embeddingModelNotAvailable: 'Embeddingモデル不可用。',
+  metadata: {
+    metadata: 'メタデータ',
+    addMetadata: 'メタデータを追加',
+    chooseTime: '時間を選択',
+    createMetadata: {
+      title: '新規メタデータ',
+      back: '戻る',
+      type: 'タイプ',
+      name: '名称',
+      namePlaceholder: 'メタデータ名を入力',
+    },
+    checkName: {
+      empty: 'メタデータ名を入力してください',
+      invalid: 'メタデータ名は小文字、数字、アンダースコアのみを使用し、小文字で始める必要があります',
+    },
+    batchEditMetadata: {
+      editMetadata: 'メタデータを編集',
+      editDocumentsNum: '{{num}}件のドキュメントを編集',
+      applyToAllSelectDocument: '選択したすべてのドキュメントに適用',
+      applyToAllSelectDocumentTip: '上記の編集と新しいメタデータを選択したすべてのドキュメントに自動的に適用します。チェックしない場合、既にメタデータを持つドキュメントにのみ編集が適用されます。',
+      multipleValue: '複数の値',
+    },
+    selectMetadata: {
+      search: 'メタデータを検索',
+      newAction: '新規メタデータ',
+      manageAction: '管理',
+    },
+    datasetMetadata: {
+      description: 'メタデータはドキュメントに関する情報で、ドキュメントの属性を説明するために使用されます。メタデータを活用することで、ドキュメントをより効率的に整理・管理できます。',
+      addMetaData: 'メタデータを追加',
+      values: '{{num}}個の値',
+      disabled: '無効',
+      rename: '名前変更',
+      name: '名称',
+      namePlaceholder: 'メタデータ名',
+      builtIn: '組み込み',
+      builtInDescription: '組み込みメタデータはシステムによって事前定義されたメタデータです。ここで組み込みメタデータの表示と管理ができます。',
+      deleteTitle: '削除の確認',
+      deleteContent: 'メタデータ「{{name}}」を削除してもよろしいですか?',
+    },
+    documentMetadata: {
+      metadataToolTip: 'メタデータはドキュメントに関する情報で、ドキュメントの属性を説明するために使用されます。メタデータを活用することで、ドキュメントをより効率的に整理・管理できます。',
+      startLabeling: 'ラベリングを開始',
+      documentInformation: 'ドキュメント情報',
+      technicalParameters: '技術パラメータ',
+    },
+  },
 }
 
 export default translation

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

@@ -37,6 +37,7 @@ const translation = {
     HR: '人事',
     Workflow: 'ワークフロー',
     Agent: 'エージェント',
+    Entertainment: 'エンターテイメント',
   },
 }
 

+ 17 - 15
web/i18n/ja-JP/plugin.ts

@@ -21,7 +21,7 @@ const translation = {
       marketplace: 'マーケットプレイスからインストール',
     },
     noInstalled: 'プラグインはインストールされていません',
-    notFound: 'プラグインが見つかりませんでした',
+    notFound: 'プラグインが見つかりません',
   },
   source: {
     github: 'GitHub',
@@ -160,26 +160,28 @@ const translation = {
     upgrade: 'インストール',
   },
   error: {
-    fetchReleasesError: 'リリースを取得できませんでした。後でもう一度お試しください。',
+    fetchReleasesError: 'リリースを取得できません。後でもう一度お試しください。',
     inValidGitHubUrl: '無効なGitHub URLです。有効なURLを次の形式で入力してください: https://github.com/owner/repo',
-    noReleasesFound: 'リリースは見つかりませんでした。GitHubリポジトリまたは入力URLを確認してください。',
+    noReleasesFound: 'リリースは見つかりません。GitHubリポジトリまたは入力URLを確認してください。',
   },
   marketplace: {
-    sortOption: {
-      mostPopular: '最も人気のある',
-      recentlyUpdated: '最近更新されました',
-      newlyReleased: '新発売',
-      firstReleased: '最初にリリースされた',
-    },
-    sortBy: '黒い街',
+    empower: 'AI開発をサポートする',
+    discover: '探索',
     and: 'と',
-    pluginsResult: '{{num}} 件の結果',
-    noPluginFound: 'プラグインが見つかりませんでした',
-    moreFrom: 'マーケットプレイスからのさらなる情報',
     difyMarketplace: 'Difyマーケットプレイス',
+    moreFrom: 'マーケットプレイスからのさらなる情報',
+    noPluginFound: 'プラグインが見つかりません',
+    pluginsResult: '{{num}} 件の結果',
+    sortBy: '並べ替え',
+    sortOption: {
+      mostPopular: '人気順',
+      recentlyUpdated: '最近更新順',
+      newlyReleased: '新着順',
+      firstReleased: 'リリース順',
+    },
     viewMore: 'もっと見る',
-    discover: '発見する',
-    empower: 'AI開発を強化する',
+    verifiedTip: 'このプラグインはDifyによって認証されています',
+    partnerTip: 'このプラグインはDifyのパートナーによって認証されています',
   },
   task: {
     installError: '{{errorLength}} プラグインのインストールに失敗しました。表示するにはクリックしてください。',

+ 15 - 15
web/i18n/ja-JP/run-log.ts

@@ -1,31 +1,31 @@
 const translation = {
   input: '入力',
   result: '結果',
-  detail: '詳細',
-  tracing: 'トレース',
+  detail: '詳細情報',
+  tracing: '実行追跡',
   resultPanel: {
     status: 'ステータス',
-    time: '経過時間',
-    tokens: 'トークンの合計',
+    time: '処理時間',
+    tokens: 'トークン総数',
   },
   meta: {
     title: 'メタデータ',
-    status: 'ステータス',
+    status: '状態',
     version: 'バージョン',
     executor: '実行者',
-    startTime: '開始時',
-    time: '経過時間',
-    tokens: 'トークンの合計',
-    steps: '実行ステップ',
+    startTime: '開始時',
+    time: '総処理時間',
+    tokens: 'トークン総数',
+    steps: '処理ステップ数',
   },
   resultEmpty: {
-    title: 'この実行では JSON 形式のみが出力されます',
-    tipLeft: 'にアクセスしてください',
-    link: '詳細パネル',
-    tipRight: '表示します。',
+    title: '今回の実行ではJSON形式のみが出力されました',
+    tipLeft: '詳細を確認するには',
+    link: '詳細情報パネル',
+    tipRight: 'へ移動してください',
   },
-  circularInvocationTip: '現在のワークフローには、ツール/ノードの循環的な呼び出しがあります。',
-  actionLogs: 'アクションログ',
+  actionLogs: '操作ログ',
+  circularInvocationTip: '現在のワークフローにツール/ノードの循環呼び出しが検出されました',
 }
 
 export default translation

+ 48 - 46
web/i18n/ja-JP/share-app.ts

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

+ 2 - 2
web/i18n/ja-JP/tools.ts

@@ -4,7 +4,7 @@ const translation = {
   customToolTip: 'Difyカスタムツールの詳細',
   type: {
     all: 'すべて',
-    builtIn: '組み込み',
+    builtIn: 'ツール',
     custom: 'カスタム',
     workflow: 'ワークフロー',
   },
@@ -13,7 +13,7 @@ const translation = {
     line2: 'Difyへのツールの貢献に興味があります。',
     viewGuide: 'ガイドを見る',
   },
-  author: '著者',
+  author: '著者',
   auth: {
     unauthorized: '認証する',
     authorized: '認証済み',

+ 271 - 185
web/i18n/ja-JP/workflow.ts

@@ -8,6 +8,7 @@ const translation = {
     published: '公開済み',
     publish: '公開する',
     update: '更新',
+    publishUpdate: '更新を公開',
     run: '実行',
     running: '実行中',
     inRunMode: '実行モード中',
@@ -19,48 +20,50 @@ const translation = {
     goBackToEdit: '編集に戻る',
     conversationLog: '会話ログ',
     features: '機能',
-    featuresDescription: 'Webアプリのユーザーエクスペリエンスを強化する',
-    ImageUploadLegacyTip: '開始フォームでファイルタイプ変数を作成できるようになりました。まもなく、画像アップロード機能のサポートは終了いたします。',
-    fileUploadTip: '画像アップロード機能がファイルのアップロード機能にアップグレードされました。',
-    featuresDocLink: '詳細はこちら',
+    featuresDescription: 'Webアプリの操作性を向上させる機能',
+    ImageUploadLegacyTip: '開始フォームでファイル型変数が作成可能になりました。画像アップロード機能は今後サポート終了となります。',
+    fileUploadTip: '画像アップロード機能がファイルアップロードに拡張されました',
+    featuresDocLink: '詳細を見る',
     debugAndPreview: 'プレビュー',
     restart: '再起動',
     currentDraft: '現在の下書き',
     currentDraftUnpublished: '現在の下書き(未公開)',
-    latestPublished: '最新の公開済み',
+    latestPublished: '最新公開版',
     publishedAt: '公開日時',
     restore: '復元',
+    versionHistory: 'バージョン履歴',
+    exitVersions: 'バージョン履歴を閉じる',
     runApp: 'アプリを実行',
-    batchRunApp: 'バッチでアプリを実行',
-    openInExplore: '"探索" で開く',
-    accessAPIReference: 'APIリファレンスにアクセス',
+    batchRunApp: 'アプリを一括実行',
+    openInExplore: '探索ページで開く',
+    accessAPIReference: 'APIリファレンス',
     embedIntoSite: 'サイトに埋め込む',
     addTitle: 'タイトルを追加...',
     addDescription: '説明を追加...',
-    noVar: '変数なし',
+    noVar: '変数がありません',
     searchVar: '変数を検索',
-    variableNamePlaceholder: '変数名',
-    setVarValuePlaceholder: '変数を設定',
-    needConnectTip: 'このステップは何にも接続されていません',
-    maxTreeDepth: 'ブランチごとの最大制限は{{depth}}ノードです',
+    variableNamePlaceholder: '変数名を入力',
+    setVarValuePlaceholder: '変数を設定',
+    needConnectTip: '接続されていないステップがあります',
+    maxTreeDepth: '1ブランチあたりの最大ノード数:{{depth}}',
     needEndNode: '終了ブロックを追加する必要があります',
     needAnswerNode: '回答ブロックを追加する必要があります',
     workflowProcess: 'ワークフロー処理',
     notRunning: 'まだ実行されていません',
-    previewPlaceholder: 'チャットボットのデバッグを開始するには、以下のボックスにコンテンツを入力してください',
+    previewPlaceholder: '入力欄にテキストを入力してチャットボットのデバッグを開始',
     effectVarConfirm: {
-      title: '変数削除',
+      title: '変数削除',
       content: '他のノードで変数が使用されています。それでも削除しますか?',
     },
-    insertVarTip: 'クイック挿入のために\'/\'キーを押します',
+    insertVarTip: '"/"キーで変数を挿入',
     processData: 'データ処理',
     input: '入力',
     output: '出力',
-    jinjaEditorPlaceholder: '変数を挿入するには「/」または「{」を入力してください',
-    viewOnly: '表示のみ',
+    jinjaEditorPlaceholder: '「/」または 「{」で変数挿入',
+    viewOnly: '閲覧のみ',
     showRunHistory: '実行履歴を表示',
-    enableJinja: 'Jinjaテンプレートのサポートを有効にする',
-    learnMore: '詳細はこちら',
+    enableJinja: 'Jinjaテンプレートを有効化',
+    learnMore: '詳細を見る',
     copy: 'コピー',
     duplicate: '複製',
     addBlock: 'ブロックを追加',
@@ -68,44 +71,44 @@ const translation = {
     pointerMode: 'ポインターモード',
     handMode: 'ハンドモード',
     model: 'モデル',
-    workflowAsTool: 'ツールとしてのワークフロー',
+    workflowAsTool: 'ワークフローをツールどして公開する',
     configureRequired: '設定が必要',
     configure: '設定',
-    manageInTools: 'ツールで管理',
-    workflowAsToolTip: 'ワークフローの更新後、ツールの再設定が必要です。',
+    manageInTools: 'ツールページで管理',
+    workflowAsToolTip: 'ワークフロー更新後はツールの再設定が必要です',
     viewDetailInTracingPanel: '詳細を表示',
-    syncingData: 'データを同期中,数秒程度で終わります。',
+    syncingData: 'データ同期中。。。',
     importDSL: 'DSLをインポート',
-    importDSLTip: '現在のドラフトは上書きされますので、インポートする際は、事前にワークフローをバックアップとしてエクスポートいただきますよう、お願い申し上げます。',
-    backupCurrentDraft: '現在のドラフトをバックアップ',
+    importDSLTip: '現在の下書きは上書きされます。インポート前にワークフローをエクスポートしてバックアップしてください',
+    backupCurrentDraft: '現在の下書きをバックアップ',
     chooseDSL: 'DSL(yml)ファイルを選択',
-    overwriteAndImport: 'オーバライトとインポート',
+    overwriteAndImport: '上書きしてインポート',
     importFailure: 'インポート失敗',
+    importWarning: '注意事項',
+    importWarningDetails: 'DSLバージョンの違いにより機能に影響が出る可能性があります',
     importSuccess: 'インポート成功',
+    parallelRun: '並列実行',
     parallelTip: {
       click: {
         title: 'クリック',
-        desc: '追加する',
+        desc: '追加',
       },
       drag: {
         title: 'ドラッグ',
-        desc: '接続するには',
+        desc: '接続',
       },
-      limit: '並列処理は {{num}} ブランチに制限されています。',
-      depthLimit: '{{num}}レイヤーの平行ネストレイヤーの制限',
+      limit: '並列処理可能ブランチ数:{{num}}',
+      depthLimit: '並列ネスト最大階層数:{{num}}',
     },
-    parallelRun: 'パラレルラン',
-    disconnect: '切る',
-    jumpToNode: 'このノードにジャンプします',
+    disconnect: '接続解除',
+    jumpToNode: 'このノードに移動',
     addParallelNode: '並列ノードを追加',
     parallel: '並列',
     branch: 'ブランチ',
-    importWarning: '注意',
-    importWarningDetails: 'DSL のバージョンの違いが特定の機能に影響を与える場合があります',
     onFailure: '失敗時',
     addFailureBranch: '失敗ブランチを追加',
-    noHistory: '履歴なし',
-    loadMore: 'より多くのワークフローをロードする',
+    loadMore: 'さらに読み込む',
+    noHistory: '履歴がありません',
   },
   env: {
     envPanelTitle: '環境変数',
@@ -115,36 +118,36 @@ const translation = {
       title: '環境変数を追加',
       editTitle: '環境変数を編集',
       type: 'タイプ',
-      name: '名',
-      namePlaceholder: '変数名',
+      name: '変数名',
+      namePlaceholder: '変数名を入力',
       value: '値',
-      valuePlaceholder: '変数値',
-      secretTip: 'このような機密情報やデータは、定義に使用され、DSLの設定は情報漏洩を防ぐために特別に構成されています。',
+      valuePlaceholder: '変数値を入力',
+      secretTip: 'この変数は機密情報やデータを定義するために使用されます。DSL をエクスポートするときに漏洩防止メカニズムを設定されます。',
     },
     export: {
       title: 'シークレット環境変数をエクスポートしますか?',
-      checkbox: 'シークレット値をエクスポート',
+      checkbox: 'シークレット値を含む',
       ignore: 'DSLをエクスポート',
-      export: 'シークレット値を含むDSLをエクスポート',
+      export: 'シークレット値付きでエクスポート',
     },
   },
   chatVariable: {
     panelTitle: '会話変数',
-    panelDescription: '会話変数は、LLMが記憶すべき対話情報を保存するために使用されます。この情報には、対話の履歴、アップロードされたファイル、ユーザーの好みなどが含まれます。読み書きが可能です。',
-    docLink: '詳しくはドキュメントをご覧ください。',
+    panelDescription: '対話情報を保存・管理(会話履歴/ファイル/ユーザー設定など)。書き換えができます。',
+    docLink: '詳細ドキュメント',
     button: '変数を追加',
     modal: {
       title: '会話変数を追加',
       editTitle: '会話変数を編集',
-      name: '名',
-      namePlaceholder: '変数名',
+      name: '変数名',
+      namePlaceholder: '変数名を入力',
       type: 'タイプ',
       value: 'デフォルト値',
       valuePlaceholder: 'デフォルト値、設定しない場合は空白にしでください',
       description: '説明',
-      descriptionPlaceholder: '変数の説明',
-      editInJSON: 'JSONで編集する',
-      oneByOne: '次々に追加する',
+      descriptionPlaceholder: '変数の説明を入力',
+      editInJSON: 'JSONで編集',
+      oneByOne: '個別追加',
       editInForm: 'フォームで編集',
       arrayValue: '値',
       addArrayValue: '値を追加',
@@ -152,19 +155,19 @@ const translation = {
       objectType: 'タイプ',
       objectValue: 'デフォルト値',
     },
-    storedContent: '保存されたコンテンツ',
-    updatedAt: '更新日は',
+    storedContent: '保存内容',
+    updatedAt: '最終更新:',
   },
   changeHistory: {
     title: '変更履歴',
-    placeholder: 'まだ何も変更ていません',
+    placeholder: 'まだ何も変更されていません',
     clearHistory: '履歴をクリア',
     hint: 'ヒント',
-    hintText: '編集アクションは変更履歴に記録され、このセッションの間にデバイスに保存されます。エディターを終了すると、この履歴は消去されます。',
-    stepBackward_one: '{{count}} ステップ後退',
-    stepBackward_other: '{{count}} ステップ後退',
-    stepForward_one: '{{count}} ステップ進',
-    stepForward_other: '{{count}} ステップ進',
+    hintText: 'エディターでの編集操作は、エディターを離れるまで、お使いのデバイスに記録されます。この履歴は、エディターを離れると消去されます。',
+    stepBackward_one: '{{count}} ステップ戻る',
+    stepBackward_other: '{{count}} ステップ戻る',
+    stepForward_one: '{{count}} ステップ進',
+    stepForward_other: '{{count}} ステップ進',
     sessionStart: 'セッション開始',
     currentState: '現在の状態',
     nodeTitleChange: 'ブロックのタイトルが変更されました',
@@ -175,16 +178,17 @@ const translation = {
     nodePaste: 'ブロックが貼り付けられました',
     nodeDelete: 'ブロックが削除されました',
     nodeAdd: 'ブロックが追加されました',
-    nodeResize: 'ブロックがリサイズされました',
-    noteAdd: 'ノートが追加されました',
-    noteChange: 'ノートが変更されました',
-    noteDelete: 'ノートが削除されました',
-    edgeDelete: 'ブロックが切断されました',
+    nodeResize: 'ブロックのサイズが変更されました',
+    noteAdd: '注釈が追加されました',
+    noteChange: '注釈が変更されました',
+    noteDelete: '注釈が削除されました',
+    edgeDelete: 'ブロックの接続が解除されました',
   },
   errorMsg: {
-    fieldRequired: '{{field}}は必須です',
+    fieldRequired: '{{field}} は必須です',
+    rerankModelRequired: 'Rerank モデルが設定されていません',
     authRequired: '認証が必要です',
-    invalidJson: '{{field}}は無効です',
+    invalidJson: '{{field}} は無効な JSON です',
     fields: {
       variable: '変数名',
       variableValue: '変数値',
@@ -193,33 +197,33 @@ const translation = {
       rerankModel: 'Rerankモデル',
       visionVariable: 'ビジョン変数',
     },
-    invalidVariable: '無効な変数',
-    rerankModelRequired: 'モデルの再ランク付けをオンにする前に、モデルが設定で正常に構成されていることを確認してください。',
+    invalidVariable: '無効な変数です',
+    noValidTool: '{{field}} に利用可能なツールがありません',
     toolParameterRequired: '{{field}}: パラメータ [{{param}}] は必須です',
-    noValidTool: '{{field}} 有効なツールが選択されていません',
   },
   singleRun: {
     testRun: 'テスト実行',
-    startRun: '実行開始',
+    startRun: '実行開始',
     running: '実行中',
-    testRunIteration: 'テスト実行イテレーション',
+    testRunIteration: 'テスト実行(イテレーション)',
+    testRunLoop: 'テスト実行(ループ)',
     back: '戻る',
     iteration: 'イテレーション',
+    loop: 'ループ',
   },
   tabs: {
-    'searchBlock': 'ブロック検索',
+    'searchBlock': 'ブロック検索',
     'blocks': 'ブロック',
-    'searchTool': '検索ツール',
+    'searchTool': 'ツール検索',
     'tools': 'ツール',
     'allTool': 'すべて',
-    'workflowTool': 'ワークフロー',
-    'builtInTool': '組み込み',
     'customTool': 'カスタム',
-    'question-understand': '質問の理解',
+    'workflowTool': 'ワークフロー',
+    'question-understand': '問題理解',
     'logic': 'ロジック',
     'transform': '変換',
-    'utilities': 'ユーティリティ',
-    'noResult': '一致するものが見つかりませんでした',
+    'utilities': 'ツール',
+    'noResult': '該当なし',
     'plugin': 'プラグイン',
     'agent': 'エージェント戦略',
   },
@@ -228,10 +232,10 @@ const translation = {
     'end': '終了',
     'answer': '回答',
     'llm': 'LLM',
-    'knowledge-retrieval': '知識取得',
+    'knowledge-retrieval': '知識検索',
     'question-classifier': '質問分類器',
     'if-else': 'IF/ELSE',
-    'code': 'コード',
+    'code': 'コード実行',
     'template-transform': 'テンプレート',
     'http-request': 'HTTPリクエスト',
     'variable-assigner': '変数代入器',
@@ -239,54 +243,64 @@ const translation = {
     'assigner': '変数代入',
     'iteration-start': 'イテレーション開始',
     'iteration': 'イテレーション',
-    'parameter-extractor': 'パラメータ抽出',
-    'document-extractor': 'テキスト抽出ツール',
+    'parameter-extractor': 'パラメータ抽出',
+    'document-extractor': 'テキスト抽出',
     'list-operator': 'リスト処理',
     'agent': 'エージェント',
+    'loop-start': 'ループ開始',
+    'loop': 'ループ',
   },
   blocksAbout: {
-    'start': 'ワークフローの開始に必要なパラメータを定義します',
-    'end': 'ワークフローの終了と結果のタイプを定義します',
-    'answer': 'チャット会話の応答内容を定義します',
-    'llm': '大規模言語モデルを呼び出して質問に回答したり、自然言語を処理したりします',
-    'knowledge-retrieval': 'ユーザーの質問に関連するテキストコンテンツを知識からクエリできるようにします',
-    'question-classifier': 'ユーザーの質問の分類条件を定義し、LLMは分類記述に基づいて会話がどのように進行するかを定義できます',
-    'if-else': 'IF/ELSE条件に基づいてワークフローを2つのブランチに分割できます',
-    'code': 'カスタムロジックを実装するためにPythonまたはNodeJSコードを実行します',
-    'template-transform': 'Jinjaテンプレート構文を使用してデータを文字列に変換します',
-    'http-request': 'HTTPプロトコル経由でサーバーリクエストを送信できます',
-    'variable-assigner': '複数のブランチの変数を1つの変数に集約し、下流のノードに対して統一された設定を行います。',
-    'assigner': '変数代入ノードは、書き込み可能な変数(例えば、会話変数)に値を割り当てるために使用されます。',
-    'variable-aggregator': '複数のブランチの変数を1つの変数に集約し、下流のノードに対して統一された設定を行います。',
-    'iteration': 'リストオブジェクトに対して複数のステップを実行し、すべての結果が出力されるまで繰り返します。',
-    'parameter-extractor': '自然言語からツールの呼び出しやHTTPリクエストのための構造化されたパラメーターを抽出するためにLLMを使用します。',
-    'document-extractor': 'アップロードされたドキュメントを LLM で簡単に理解できるテキストのコンテンツに解析するために使用されます。',
-    'list-operator': '配列のコンテンツをフィルタリングまたはソートするために使用されます。',
-    'agent': '大規模言語モデルを呼び出して質問に答えたり自然言語を処理したりする',
+    'start': 'ワークフロー開始時の初期パラメータを定義します。',
+    'end': 'ワークフローの終了条件と結果のタイプを定義します。',
+    'answer': 'チャットダイアログの返答内容を定義します。',
+    'llm': '大規模言語モデルを呼び出して質問回答や自然言語処理を実行します。',
+    'knowledge-retrieval': 'ナレッジベースからユーザー質問に関連するテキストを検索します。',
+    'question-classifier': '質問の分類条件を定義し、LLMが分類に基づいて対話フローを制御します。',
+    'if-else': 'if/else条件でワークフローを2つの分岐に分割します。',
+    'code': 'Python/NodeJSコードを実行してカスタムロジックを実装します。',
+    'template-transform': 'Jinjaテンプレート構文でデータを文字列に変換します。',
+    'http-request': 'HTTPリクエストを送信できます。',
+    'variable-assigner': '複数分岐の変数を集約し、下流ノードの設定を統一します。',
+    'assigner': '書き込み可能な変数(例:会話変数)への値の割り当てを行います。',
+    'variable-aggregator': '複数分岐の変数を集約し、下流ノードの設定を統一します。',
+    'iteration': 'リスト要素に対して反復処理を実行し全結果を出力します。',
+    'loop': '終了条件達成まで、または最大反復回数までロジックを繰り返します。',
+    'parameter-extractor': '自然言語から構造化パラメータを抽出し、後続処理で利用します。',
+    'document-extractor': 'アップロード文書をLLM処理用に最適化されたテキストに変換します。',
+    'list-operator': '配列のフィルタリングやソート処理を行います。',
+    'agent': '大規模言語モデルを活用した質問応答や自然言語処理を実行します。',
   },
   operator: {
     zoomIn: '拡大',
     zoomOut: '縮小',
-    zoomTo50: '50%にズーム',
-    zoomTo100: '100%にズーム',
-    zoomToFit: 'フィットにズーム',
+    zoomTo50: '50%サイズ',
+    zoomTo100: '等倍表示',
+    zoomToFit: '画面に合わせる',
+  },
+  variableReference: {
+    noAvailableVars: '利用可能な変数がありません',
+    noVarsForOperation: 'この操作に割り当て可能な変数が存在しません。',
+    noAssignedVars: '割り当て可能な変数がありません',
+    assignedVarsDescription: '書き込み可能な変数(例:',
+    conversationVars: '会話変数',
   },
   panel: {
-    userInputField: 'ユーザー入力フィールド',
-    changeBlock: 'ブロックを変更',
+    userInputField: 'ユーザー入力',
+    changeBlock: 'ノード変更',
     helpLink: 'ヘルプリンク',
-    about: '情報',
-    createdBy: '作成者 ',
+    about: '詳細',
+    createdBy: '作成者',
     nextStep: '次のステップ',
-    addNextStep: 'このワークフローで次のブロックを追加',
-    selectNextStep: '次のブロックを選択',
-    runThisStep: 'このステップ実行',
+    addNextStep: 'このワークフローで次ノードを追加',
+    selectNextStep: '次ノード選択',
+    runThisStep: 'このステップ実行',
     checklist: 'チェックリスト',
-    checklistTip: '公開する前にすべての問題が解決されていることを確認してください',
-    checklistResolved: 'すべての問題が解決されました',
-    organizeBlocks: 'ブロックを整理',
+    checklistTip: '公開前に全ての項目を確認してください',
+    checklistResolved: '全てのチェックが完了しました',
+    organizeBlocks: 'ノード整理',
     change: '変更',
-    optional: '(オプション)',
+    optional: '(任意)',
   },
   nodes: {
     common: {
@@ -295,54 +309,54 @@ const translation = {
       memory: {
         memory: 'メモリ',
         memoryTip: 'チャットメモリ設定',
-        windowSize: 'ウィンドウサイズ',
+        windowSize: 'メモリウィンドウサイズ',
         conversationRoleName: '会話ロール名',
         user: 'ユーザー接頭辞',
         assistant: 'アシスタント接頭辞',
       },
       memories: {
         title: 'メモリ',
-        tip: 'チャットメモリ',
+        tip: 'チャットの記憶管理',
         builtIn: '組み込み',
       },
       errorHandle: {
+        title: '例外処理',
+        tip: 'ノード例外発生時の処理ポリシーを設定',
         none: {
           title: '処理なし',
-          desc: '例外が発生して処理されない場合、ノードは実行を停止します',
+          desc: '例外発生時に処理を停止',
         },
         defaultValue: {
           title: 'デフォルト値',
-          desc: '例外が発生した場合は、デフォルトの出力コンテンツを指定します。',
-          tip: '例外が発生した場合は、以下の値を返します。',
-          inLog: 'ノード例外、デフォルト値に従って出力します。',
-          output: '出力デフォルト値',
+          desc: '例外発生時のデフォルト出力',
+          tip: '例外発生時に返される値:',
+          inLog: 'ノード例外 - デフォルト値を出力',
+          output: 'デフォルト値出力',
         },
         failBranch: {
-          title: 'エラーブランチ',
-          customize: 'キャンバスに移動して、エラーブランチのロジックをカスタマイズします。',
-          inLog: '例外が発生した場合は、エラーしたブランチを自動的に実行します。ノード出力は、エラータイプとエラーメッセージを返し、それらをダウンストリームに渡します。',
-          desc: '例外が発生した場合は、エラーブランチを実行します',
-          customizeTip: 'エラーブランチがアクティブになっても、ノードによってスローされた例外はプロセスを終了させません。代わりに、事前定義された エラーブランチが自動的に実行されるため、エラーメッセージ、レポート、修正アクション、またはスキップアクションを柔軟に提供できます。',
+          title: '例外分岐',
+          desc: '例外発生時に分岐を実行',
+          customize: '失敗分岐ロジックをカスタマイズ',
+          customizeTip: '例外発生時、失敗分岐でエラー処理を柔軟に設定可能(エラーログ表示/修復処理/操作スキップ等)',
+          inLog: 'ノード例外 - 失敗分岐を実行。エラー情報を下流に伝播',
         },
         partialSucceeded: {
-          tip: 'プロセスに{{num}}ノードが異常に動作していますので、トレースに移動してログを確認してください。',
+          tip: '{{num}}個のノードで異常発生。ログはトレース画面で確認可能',
         },
-        title: 'エラー処理',
-        tip: 'ノードが例外を検出したときにトリガーされる例外処理戦略。',
       },
       retry: {
         retry: '再試行',
-        retryOnFailure: '失敗時再試行',
-        maxRetries: '最大試行回数',
+        retryOnFailure: '失敗時再試行',
+        maxRetries: '最大試行回数',
         retryInterval: '再試行間隔',
-        retrying: '再試行。。。',
-        retryFailed: '再試行に失敗しました',
+        retryTimes: '失敗時 {{times}}回再試行',
+        retrying: '再試行中...',
+        retrySuccessful: '再試行成功',
+        retryFailed: '再試行失敗',
+        retryFailedTimes: '{{times}}回再試行失敗',
         times: '回',
-        ms: 'ms',
-        retryTimes: '失敗時に{{times}}回再試行',
-        retrySuccessful: '再試行に成功しました',
-        retries: '{{num}} 回の再試行',
-        retryFailedTimes: '{{times}}回の再試行が失敗しました',
+        ms: 'ミリ秒',
+        retries: '再試行回数: {{num}}',
       },
     },
     start: {
@@ -353,17 +367,17 @@ const translation = {
         query: 'ユーザー入力',
         memories: {
           des: '会話履歴',
-          type: 'メッセージタイプ',
+          type: 'メッセージ種別',
           content: 'メッセージ内容',
         },
-        files: 'ファイルリスト',
+        files: 'ファイル一覧',
       },
-      noVarTip: 'ワークフローで使用できる入力を設定します',
+      noVarTip: '入力設定はワークフロー内で利用可能',
     },
     end: {
-      outputs: '出力',
+      outputs: '出力設定',
       output: {
-        type: '出力タイプ',
+        type: '出力形式',
         variable: '出力変数',
       },
       type: {
@@ -373,75 +387,106 @@ const translation = {
       },
     },
     answer: {
-      answer: '答',
+      answer: '答',
       outputVars: '出力変数',
     },
     llm: {
-      model: 'モデル',
+      model: 'AIモデル',
       variables: '変数',
       context: 'コンテキスト',
-      contextTooltip: 'コンテキストとして知識をインポートできます',
-      notSetContextInPromptTip: 'コンテキスト機能を有効にするには、PROMPTにコンテキスト変数を記入してください。',
+      contextTooltip: 'ナレッジベースをコンテキストとして利用',
+      notSetContextInPromptTip: 'コンテキスト利用時はプロンプトに変数を明記してください',
       prompt: 'プロンプト',
+      addMessage: 'メッセージ追加',
       roleDescription: {
-        system: '会話の高レベルな命令を与えます',
-        user: 'モデルへの指示、クエリ、またはテキストベースの入力を提供します',
-        assistant: 'ユーザーメッセージに基づいてモデルの応答',
+        system: '対話の基本動作を定義',
+        user: '指示/質問を入力',
+        assistant: 'ユーザー入力への応答',
       },
-      addMessage: 'メッセージを追加',
       vision: 'ビジョン',
       files: 'ファイル',
       resolution: {
         name: '解像度',
-        high: '高',
-        low: '低',
+        high: '高',
+        low: '低',
       },
       outputVars: {
-        output: 'コンテンツを生成',
-        usage: 'モデルの使用情報',
+        output: '生成内容',
+        usage: 'モデル使用量',
       },
       singleRun: {
         variable: '変数',
       },
-      sysQueryInUser: 'ユーザーメッセージにsys.queryが必要です',
+      sysQueryInUser: 'ユーザーメッセージにsys.queryを含めてください',
     },
     knowledgeRetrieval: {
-      queryVariable: 'クエリ変数',
-      knowledge: 'ナレッジ',
+      queryVariable: '検索変数',
+      knowledge: 'ナレッジベース',
       outputVars: {
-        output: '検索されたセグメント化されたデータ',
-        content: 'セグメント化されたコンテンツ',
-        title: 'セグメント化されたタイトル',
-        icon: 'セグメント化されたアイコン',
-        url: 'セグメント化されたURL',
-        metadata: 'その他のメタデータ',
+        output: '検索結果セグメント',
+        content: 'セグメント内容',
+        title: 'セグメントタイトル',
+        icon: 'セグメントアイコン',
+        url: 'セグメントURL',
+        metadata: 'メタデータ',
+      },
+      metadata: {
+        title: 'メタデータフィルタ',
+        tip: 'タグ/カテゴリ等の属性で検索を絞り込み',
+        options: {
+          disabled: {
+            title: '無効',
+            subTitle: 'フィルタリング不使用',
+          },
+          automatic: {
+            title: '自動生成',
+            subTitle: '検索履歴からフィルタ条件を自動生成',
+            desc: 'Query Variable(検索変数)に基づきフィルタ条件を自動生成',
+          },
+          manual: {
+            title: '手動設定',
+            subTitle: 'メタデータの条件を手動で追加',
+          },
+        },
+        panel: {
+          title: 'メタデータのフィルタ条件',
+          conditions: '条件一覧',
+          add: '条件追加',
+          search: 'メタデータ検索',
+          placeholder: '値を入力',
+          datePlaceholder: '日付選択...',
+          select: '変数選択...',
+        },
       },
     },
     http: {
       inputVars: '入力変数',
       api: 'API',
-      apiPlaceholder: 'URLを入力、「/」を入力して変数を挿入',
-      notStartWithHttp: 'APIはhttp://またはhttps://で始まる必要があります',
+      apiPlaceholder: 'URLを入力(変数使用時は"/"を入力)',
+      extractListPlaceholder: 'リスト番号を入力(変数使用時は"/"を入力)',
+      notStartWithHttp: 'APIは http:// または https:// で始まってください',
       key: 'キー',
+      type: 'タイプ',
       value: '値',
       bulkEdit: '一括編集',
-      keyValueEdit: 'キー-値の編集',
+      keyValueEdit: 'キーバリュー編集',
       headers: 'ヘッダー',
       params: 'パラメータ',
       body: 'ボディ',
+      binaryFileVariable: 'バイナリファイル変数',
       outputVars: {
         body: 'レスポンスコンテンツ',
         statusCode: 'レスポンスステータスコード',
-        headers: 'レスポンスヘッダーリストJSON',
-        files: 'ファイルリスト',
+        headers: 'レスポンスヘッダ(JSON)',
+        files: 'ファイル一覧',
       },
       authorization: {
         'authorization': '認証',
         'authorizationType': '認証タイプ',
         'no-auth': 'なし',
         'api-key': 'APIキー',
-        'auth-type': '認証タイプ',
-        'basic': '基本',
+        'auth-type': 'API認証タイプ',
+        'basic': 'ベーシック',
         'bearer': 'Bearer',
         'custom': 'カスタム',
         'api-key-title': 'APIキー',
@@ -449,19 +494,16 @@ const translation = {
       },
       insertVarPlaceholder: '変数を挿入するには\'/\'を入力してください',
       timeout: {
-        title: 'タイムアウト',
+        title: 'タイムアウト設定',
         connectLabel: '接続タイムアウト',
-        connectPlaceholder: '接続タイムアウトを秒で入力',
+        connectPlaceholder: '接続タイムアウト(秒)',
         readLabel: '読み取りタイムアウト',
-        readPlaceholder: '読み取りタイムアウトを秒で入力',
+        readPlaceholder: '読み取りタイムアウト(秒)',
         writeLabel: '書き込みタイムアウト',
-        writePlaceholder: '書き込みタイムアウトを秒で入力',
+        writePlaceholder: '書き込みタイムアウト(秒)',
       },
-      type: 'タイプ',
-      binaryFileVariable: 'バイナリファイル変数',
-      extractListPlaceholder: 'リスト項目のインデックスを入力し、変数を挿入 \'/\' と入力します',
       curl: {
-        title: 'cURLからインポート',
+        title: 'cURLからインポート',
         placeholder: 'ここにcURL文字列を貼り付けます',
       },
     },
@@ -653,6 +695,25 @@ const translation = {
       MaxParallelismDesc: '最大並列処理は、1 回の反復で同時に実行されるタスクの数を制御するために使用されます。',
       answerNodeWarningDesc: '並列モードの警告: 応答ノード、会話変数の割り当て、およびイテレーション内の永続的な読み取り/書き込み操作により、例外が発生する可能性があります。',
     },
+    loop: {
+      deleteTitle: 'ループノードを削除しますか?',
+      deleteDesc: 'ループノードを削除すると、全ての子ノードが削除されます。',
+      input: '入力',
+      output: '出力変数',
+      loop_one: '{{count}}回',
+      loop_other: '{{count}}回',
+      currentLoop: '現在のループ',
+      breakCondition: 'ループ終了条件',
+      breakConditionTip: 'ループ内の変数やセッション変数を参照し、終了条件を設定できます。',
+      loopMaxCount: '最大ループ回数',
+      loopMaxCountError: '最大ループ回数は1から{{maxCount}}の範囲で正しく入力してください。',
+      errorResponseMethod: 'エラー対応方法',
+      ErrorMethod: {
+        operationTerminated: 'エラー時に処理を終了',
+        continueOnError: 'エラーを無視して継続',
+        removeAbnormalOutput: '異常出力を除外',
+      },
+    },
     note: {
       addNote: 'コメントを追加',
       editor: {
@@ -771,12 +832,37 @@ const translation = {
   tracing: {
     stopBy: '{{user}}によって停止',
   },
-  variableReference: {
-    noVarsForOperation: '選択した操作で代入できる変数はありません。',
-    noAvailableVars: '使用可能な変数がありません',
-    noAssignedVars: '使用可能な代入変数がありません',
-    assignedVarsDescription: '代入変数は、次のような書き込み可能な変数である必要があります。',
-    conversationVars: '会話変数',
+  versionHistory: {
+    title: 'バージョン',
+    currentDraft: '現在の下書き',
+    latest: '最新版',
+    filter: {
+      all: 'すべて',
+      onlyYours: '自分のみ',
+      onlyShowNamedVersions: '名前付きバージョンのみ',
+      reset: 'リセット',
+      empty: '該当するバージョンがありません',
+    },
+    defaultName: '名称未設定',
+    nameThisVersion: 'バージョン名を付ける',
+    editVersionInfo: 'バージョン情報を編集',
+    editField: {
+      title: 'タイトル',
+      releaseNotes: 'リリースノート',
+      titleLengthLimit: 'タイトルは{{limit}}文字以内で入力してください',
+      releaseNotesLengthLimit: 'リリースノートは{{limit}}文字以内で入力してください',
+    },
+    releaseNotesPlaceholder: '変更内容を入力してください',
+    restorationTip: 'バージョンを復元すると、現在の下書きが上書きされます',
+    deletionTip: '削除したデータは復元できません。よろしいですか?',
+    action: {
+      restoreSuccess: '復元が完了しました',
+      restoreFailure: '復元に失敗しました',
+      deleteSuccess: '削除が完了しました',
+      deleteFailure: '削除に失敗しました',
+      updateSuccess: '更新が完了しました',
+      updateFailure: '更新に失敗しました',
+    },
   },
 }