diff --git a/src/i18n/index.ts b/src/i18n/index.ts
index 2a7b1e7d..4a2869a9 100644
--- a/src/i18n/index.ts
+++ b/src/i18n/index.ts
@@ -4,7 +4,7 @@
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
-import { en, zh, hi, id } from './locales';
+import { en, zh, hi, id, ja } from './locales';
// NOTE: locale JSON is ingested into the i18next store once, here, at init().
// Adding keys to a locale file requires a full page reload (not just HMR) for
@@ -14,6 +14,7 @@ const resources = {
zh: { translation: zh },
hi: { translation: hi },
id: { translation: id },
+ ja: { translation: ja },
};
export const SUPPORTED_UI_LANGUAGES: readonly string[] = Object.keys(resources);
diff --git a/src/i18n/locales/index.ts b/src/i18n/locales/index.ts
index 9e621620..47fe7153 100644
--- a/src/i18n/locales/index.ts
+++ b/src/i18n/locales/index.ts
@@ -5,5 +5,6 @@ import en from './en';
import zh from './zh';
import hi from './hi';
import id from './id';
+import ja from './ja';
-export { en, zh, hi, id };
+export { en, zh, hi, id, ja };
diff --git a/src/i18n/locales/ja/chart.json b/src/i18n/locales/ja/chart.json
new file mode 100644
index 00000000..26e8f51c
--- /dev/null
+++ b/src/i18n/locales/ja/chart.json
@@ -0,0 +1,278 @@
+{
+ "chart": {
+ "vegaLocale": {
+ "dateTime": "%Y年%-m月%-d日 %A %X",
+ "date": "%Y/%-m/%-d",
+ "time": "%H:%M:%S",
+ "periods": [
+ "午前",
+ "午後"
+ ],
+ "days": [
+ "日曜日",
+ "月曜日",
+ "火曜日",
+ "水曜日",
+ "木曜日",
+ "金曜日",
+ "土曜日"
+ ],
+ "shortDays": [
+ "日",
+ "月",
+ "火",
+ "水",
+ "木",
+ "金",
+ "土"
+ ],
+ "months": [
+ "1月",
+ "2月",
+ "3月",
+ "4月",
+ "5月",
+ "6月",
+ "7月",
+ "8月",
+ "9月",
+ "10月",
+ "11月",
+ "12月"
+ ],
+ "shortMonths": [
+ "1月",
+ "2月",
+ "3月",
+ "4月",
+ "5月",
+ "6月",
+ "7月",
+ "8月",
+ "9月",
+ "10月",
+ "11月",
+ "12月"
+ ]
+ },
+ "derivedConcepts": "数式",
+ "dataTransformCode": "データ変換コード",
+ "dataTransformExplanation": "データ変換の説明",
+ "zoomIn": "拡大します",
+ "zoomOut": "縮小します",
+ "resizeSliderAria": "チャート表示スケール",
+ "saveCopy": "コピーを保存します",
+ "duplicate": "チャートを複製します",
+ "delete": "削除します",
+ "deleteChart": "チャートを削除します",
+ "deleteChartConfirm": "このチャートを削除しますか?",
+ "deleteChartCancel": "キャンセルします",
+ "deleteChartYes": "削除します",
+ "sampleSize": "サンプルサイズ",
+ "sampleSizeAria": "サンプルサイズ",
+ "sampleAgain": "もう一度サンプリングします!",
+ "chartType": "チャートの種類",
+ "chartPreview": "チャートプレビュー",
+ "noChart": "チャートが選択されていません",
+ "createChart": "チャートを作成して開始します",
+ "addChart": "チャートを追加します",
+ "chartSettings": "チャート設定",
+ "chartBuilder": "チャートビルダー",
+ "dataSource": "データソース",
+ "data": "データ",
+ "chat": "チャット",
+ "code": "コード",
+ "agentLog": "エージェントログ",
+ "explain": "説明します",
+ "concepts": "数式",
+ "orStartWithChartType": "新しいチャートを作成しますか?",
+ "orCreateYourself": "または自分で作成しますか?",
+ "emptyStateTitle": "データを探索する準備ができましたか?",
+ "emptyStateSubtitle": "チャットでエージェントに質問してください — アイデアの提案、データの説明、データ変換、チャート作成ができます。",
+ "emptyStateChatHint": "左下のチャット入力をお試しください",
+ "emptyStateOrPickType": "またはチャート種別を選んで手動で開始します",
+ "resample": "再サンプリングします",
+ "adjustSampleSize": "サンプルサイズを調整します: {{sampleSize}} / {{totalSize}} 行",
+ "log": "ログ",
+ "insight": "インサイト",
+ "openInVegaEditor": "Vega Editorで開きます",
+ "viewChartSpec": "チャート仕様を表示します",
+ "editChart": "チャートを編集します",
+ "chartInsight": "チャートインサイト",
+ "analyzingChart": "チャートを分析しています...",
+ "regenerate": "再生成します",
+ "noInsightAvailable": "利用可能なインサイトがありません。",
+ "generateInsight": "インサイトを生成します",
+ "iLikeIt": "気に入りました!",
+ "notAnymore": "もう気に入っていません",
+ "visualizing": "可視化しています",
+ "sampleRows": "サンプル行",
+ "msgTable": "可視化したい内容を教えてください!",
+ "msgAuto": "何か話しかけてチャートのおすすめを取得しましょう!",
+ "msgEncodingEmpty": "データフィールドをチャートビルダーに配置するか、希望を説明してください!",
+ "msgUnavailable": "データを定式化して可視化を作成しましょう!",
+ "msgSynthesizing": "合成しています...",
+ "msgWarning": "AIが生成した結果は不正確な場合があります。内容を確認してください!",
+ "templateGroups": {
+ "table": "テーブル",
+ "scatter": "散布図",
+ "bar": "棒グラフ",
+ "map": "地図",
+ "pie": "円グラフ",
+ "line": "折れ線グラフ",
+ "custom": "カスタム"
+ },
+ "templateNames": {
+ "auto": "自動",
+ "table": "テーブル",
+ "scatterPlot": "散布図",
+ "regression": "回帰",
+ "rangedDotPlot": "レンジドットプロット",
+ "boxplot": "箱ひげ図",
+ "stripPlot": "ストリッププロット",
+ "barChart": "棒グラフ",
+ "groupedBarChart": "グループ化棒グラフ",
+ "stackedBarChart": "積み上げ棒グラフ",
+ "histogram": "ヒストグラム",
+ "lollipopChart": "ロリポップチャート",
+ "pyramidChart": "ピラミッドチャート",
+ "lineChart": "折れ線グラフ",
+ "bumpChart": "バンプチャート",
+ "areaChart": "面グラフ",
+ "streamgraph": "ストリームグラフ",
+ "pieChart": "円グラフ",
+ "roseChart": "ローズチャート",
+ "heatmap": "ヒートマップ",
+ "waterfallChart": "ウォーターフォールチャート",
+ "densityPlot": "密度プロット",
+ "radarChart": "レーダーチャート",
+ "candlestickChart": "ローソク足チャート",
+ "usMap": "米国地図",
+ "worldMap": "世界地図",
+ "customPoint": "カスタムポイント",
+ "customLine": "カスタムライン",
+ "customBar": "カスタムバー",
+ "customRect": "カスタム長方形",
+ "customArea": "カスタムエリア"
+ },
+ "chartCategoryTip": {
+ "points": "ポイント系チャート(散布図、ドット、回帰)",
+ "bars": "棒グラフ・縦棒グラフ",
+ "distributions": "分布・統計チャート",
+ "linesAndAreas": "折れ線・エリアチャート",
+ "circular": "円グラフ・ローズチャート・レーダーチャート",
+ "tablesAndMaps": "タイル、テーブル、KPI・地図チャート",
+ "custom": "カスタムマークの種類"
+ },
+ "gallery": {
+ "inferredSize": "推定サイズ: {{size}}",
+ "warningLabel": "警告:",
+ "copySpecVL": "Spec + VLをコピーします",
+ "copyMarkdownAgentsInputHeading": "## agents-chart 入力仕様",
+ "copyMarkdownVegaLiteOutputHeading": "## vega-lite 出力仕様(最初の50行)",
+ "spec": "Spec",
+ "noTestCases": "「{{chartGroup}}」にテストケースが定義されていません",
+ "echartsLabel": "ECharts",
+ "echartsOption": "EChartsオプション",
+ "vegaLiteLabel": "Vega-Lite",
+ "vegaLiteSpec": "Vega-Lite仕様",
+ "chartJsLabel": "Chart.js",
+ "chartJsConfig": "Chart.js設定",
+ "noSpec": "{{assembler}} はspecを返しませんでした",
+ "noOption": "{{assembler}} はオプションを返しませんでした",
+ "noConfig": "{{assembler}} は設定を返しませんでした",
+ "noVLSpec": "VL仕様がありません",
+ "embedError": "{{backend}} 埋め込みエラー: {{message}}",
+ "assemblyError": "アセンブリエラー: {{message}}",
+ "backendError": "{{backend}} エラー: {{message}}",
+ "sectionLabels": {
+ "semanticContext": "セマンティックコンテキスト",
+ "vegaLite": "VegaLite",
+ "facets": "ファセット",
+ "stressTests": "ストレステスト",
+ "echartsBackend": "EChartsバックエンド",
+ "chartJsBackend": "Chart.jsバックエンド",
+ "goFishBasic": "GoFishベーシック"
+ },
+ "sectionDescriptions": {
+ "semanticContext": "セマンティック型アノテーションがチャート出力をどう改善するかを示します: 書式、ドメイン制約、軸反転、スケール種別、補間",
+ "vegaLite": "対応する全チャート種別のデモです",
+ "facets": "ファセットモードと機能の組み合わせです",
+ "stressTests": "オーバーフロー、弾力性、時間形式のストレステストです",
+ "echartsBackend": "同じ入力をEChartsバックエンドで処理 — シリーズベース出力とVLエンコーディングベース出力を比較します",
+ "chartJsBackend": "同じ入力をChart.jsバックエンドで処理 — データセットベース出力とVL/EC出力を比較します",
+ "goFishBasic": "すべてのGoFishチャート例を1ページにまとめています"
+ },
+ "entryLabels": {
+ "semanticContext": "セマンティックコンテキスト",
+ "snapToBound": "境界スナップ",
+ "scatterPlot": "散布図",
+ "regression": "回帰",
+ "barChart": "棒グラフ",
+ "stackedBarChart": "積み上げ棒グラフ",
+ "groupedBarChart": "グループ化棒グラフ",
+ "histogram": "ヒストグラム",
+ "heatmap": "ヒートマップ",
+ "lineChart": "折れ線グラフ",
+ "boxplot": "箱ひげ図",
+ "pieChart": "円グラフ",
+ "rangedDotPlot": "レンジドットプロット",
+ "areaChart": "面グラフ",
+ "streamgraph": "ストリームグラフ",
+ "lollipopChart": "ロリポップチャート",
+ "densityPlot": "密度プロット",
+ "bumpChart": "バンプチャート",
+ "candlestickChart": "ローソク足チャート",
+ "waterfallChart": "ウォーターフォールチャート",
+ "stripPlot": "ストリッププロット",
+ "radarChart": "レーダーチャート",
+ "pyramidChart": "ピラミッドチャート",
+ "roseChart": "ローズチャート",
+ "customCharts": "カスタムチャート",
+ "facetColumns": "ファセット: 列",
+ "facetRows": "ファセット: 行",
+ "facetColsRows": "ファセット: 列+行",
+ "facetSmall": "ファセット: 小",
+ "facetWrap": "ファセット: ラップ",
+ "facetClip": "ファセット: クリップ",
+ "facetOverflowedCol": "ファセット: オーバーフロー列",
+ "facetOverflowedColRow": "ファセット: オーバーフロー列+行",
+ "facetOverflowedRow": "ファセット: オーバーフロー行",
+ "facetDenseLine": "ファセット: 密な線",
+ "overflow": "オーバーフロー",
+ "elasticityStretch": "弾力性と伸縮",
+ "discreteAxisSizing": "離散軸サイズ",
+ "gasPressure": "ガス圧力 (§2)",
+ "lineAreaStretch": "線・面の伸縮",
+ "datesYear": "日付: 年",
+ "datesMonth": "日付: 月",
+ "datesYearMonth": "日付: 年月",
+ "datesDecade": "日付: 年代",
+ "datesDateTime": "日付: 日付/日時",
+ "datesHours": "日付: 時",
+ "echartsFacetSmall": "ECharts: ファセット小",
+ "echartsFacetWrap": "ECharts: ファセットラップ",
+ "echartsFacetClip": "ECharts: ファセットクリップ",
+ "echartsGauge": "ECharts: ゲージ",
+ "echartsFunnel": "ECharts: ファネル",
+ "echartsTreemap": "ECharts: ツリーマップ",
+ "echartsSunburst": "ECharts: サンバースト",
+ "echartsSankey": "ECharts: サンキー",
+ "echartsUniqueStress": "ECharts: 固有ストレステスト",
+ "echartsStressTests": "ECharts: ストレステスト",
+ "chartJsScatter": "Chart.js: 散布図",
+ "chartJsLine": "Chart.js: 折れ線",
+ "chartJsBar": "棒グラフ",
+ "chartJsStackedBar": "積み上げ棒グラフ",
+ "chartJsGroupedBar": "グループ化棒グラフ",
+ "chartJsArea": "面グラフ",
+ "chartJsPie": "円グラフ",
+ "chartJsHistogram": "Chart.js: ヒストグラム",
+ "chartJsRadar": "Chart.js: レーダー",
+ "chartJsRose": "Chart.js: ローズ",
+ "chartJsStressTests": "Chart.js: ストレステスト",
+ "goFishBasic": "GoFishベーシック"
+ }
+ }
+ }
+}
diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json
new file mode 100644
index 00000000..fb3e032c
--- /dev/null
+++ b/src/i18n/locales/ja/common.json
@@ -0,0 +1,1056 @@
+{
+ "app": {
+ "name": "Data Formulator",
+ "loading": "読み込んでいます…",
+ "save": "保存します",
+ "cancel": "キャンセルします",
+ "close": "閉じます",
+ "delete": "削除します",
+ "edit": "編集します",
+ "create": "作成します",
+ "confirm": "確認します",
+ "back": "戻ります",
+ "next": "次へ進みます",
+ "done": "完了しました",
+ "reset": "リセットします",
+ "apply": "適用します",
+ "search": "検索します",
+ "filter": "フィルターします",
+ "sort": "並べ替えます",
+ "copy": "コピーします",
+ "duplicate": "複製します",
+ "download": "ダウンロードします",
+ "upload": "アップロードします",
+ "refresh": "更新します",
+ "settings": "設定",
+ "help": "ヘルプ",
+ "info": "情報",
+ "warning": "警告",
+ "error": "エラー",
+ "success": "成功"
+ },
+ "common": {
+ "save": "保存します"
+ },
+ "appBar": {
+ "session": "セッション",
+ "explore": "探索します",
+ "reports": "レポート",
+ "reportsWithCount": "レポート ({{count}})",
+ "watchVideo": "動画を視聴します",
+ "viewOnGitHub": "GitHubで表示します",
+ "pipInstall": "pipでインストール",
+ "joinDiscord": "Discordに参加します",
+ "errorOccurred": "エラーが発生しました。セッションを更新してください。問題が解決しない場合はセッションを閉じてください。",
+ "about": "概要",
+ "app": "アプリ",
+ "data": "データ",
+ "moreOptions": "その他のオプション",
+ "moreLanguages": "その他の言語",
+ "microsoftResearch": "Microsoft Research"
+ },
+ "logs": {
+ "title": "バックエンドログ",
+ "viewLogs": "バックエンドログを表示します",
+ "refresh": "更新します",
+ "searchSavedState": "保存済みの状態を検索します(Cmd/Ctrl+F)",
+ "download": "全ログをダウンロードします",
+ "empty": "ログファイルは空です。"
+ },
+ "session": {
+ "exportSession": "セッションをエクスポートします",
+ "importSession": "セッションをインポートします",
+ "saveSessionLocally": "セッションをローカルに保存します",
+ "databaseFile": "データベースファイル",
+ "containsDatabaseWarning": "このセッションにはデータベースに保存されたデータが含まれています。後でセッションを再開するにはデータベースをエクスポートして再読み込みします。",
+ "downloadDatabase": "データベースをダウンロードします",
+ "importDatabase": "データベースをインポートします",
+ "databaseImportedSuccess": "データベースを正常にインポートしました",
+ "importFailed": "インポートに失敗しました",
+ "resetSessionTitle": "セッションをリセットしますか?",
+ "resetSessionWarning": "リセットすると未エクスポートのコンテンツ(チャート、派生データ、コンセプト)はすべて失われます。",
+ "resetSessionAction": "セッションをリセットします",
+ "resetToDefault": "既定に戻します",
+ "saveTitle": "セッションを保存します",
+ "sessionName": "セッション名",
+ "tablesWillBeSaved": "{{count}} 個のテーブルを保存します",
+ "sessionSaved": "セッション「{{name}}」を保存しました",
+ "saveFailed": "保存に失敗しました",
+ "failedToSave": "セッションの保存に失敗しました",
+ "loadTitle": "セッションを読み込みます",
+ "refreshList": "セッション一覧を更新します",
+ "loadingSessions": "セッションを読み込んでいます...",
+ "noSavedSessions": "保存済みセッションが見つかりません。",
+ "deleteSession": "セッションを削除します",
+ "sessionLoaded": "セッション「{{name}}」を読み込みました",
+ "loadFailed": "読み込みに失敗しました",
+ "failedToLoad": "セッションの読み込みに失敗しました",
+ "saveSession": "セッションを保存します",
+ "openSession": "セッションを開きます...",
+ "quickResume": "クイック再開",
+ "localFile": "ローカルファイル",
+ "exportToFile": "ファイルにエクスポートします",
+ "exporting": "エクスポートしています...",
+ "sessionExported": "セッションをエクスポートしました",
+ "failedToExport": "セッションのエクスポートに失敗しました",
+ "importFromFile": "ファイルからインポートします",
+ "importingFrom": "{{file}} からセッションをインポートしています...",
+ "sessionImported": "{{file}} からセッションをインポートしました",
+ "failedToImport": "セッションのインポートに失敗しました",
+ "resetTitle": "セッションをリセットしますか?",
+ "resetWarning": "未保存のコンテンツ(データ、チャート、レポート)はすべて失われます。リセット前にセッションを保存してください。",
+ "resetAction": "セッションをリセットします",
+ "resetButton": "リセットします",
+ "cleaningWorkspace": "ワークスペースを整理しています...",
+ "installLocallyHint": "この機能を使うにはローカルにインストールします"
+ },
+ "config": {
+ "frontend": "フロントエンド",
+ "backend": "バックエンド",
+ "defaultChartWidth": "既定のチャート幅",
+ "defaultChartHeight": "既定のチャート高さ",
+ "chartSizeRangeError": "値は100~1000ピクセルの範囲で指定します",
+ "formulateTimeout": "定式化タイムアウト(秒)",
+ "formulateTimeoutRangeError": "値は1~3600秒の範囲で指定します",
+ "formulateTimeoutHint": "タイムアウトするまで定式化処理に許可される最大時間です。",
+ "maxRepairAttempts": "最大修復試行回数",
+ "maxRepairAttemptsRangeError": "値は1~5の範囲で指定します",
+ "maxRepairAttemptsHint": "コード実行失敗時にLLMがコード修復を試みる回数です(推奨 = 1、値を大きくすると成功率が上がる場合がありますが遅くなります)。",
+ "colorTheme": "カラーテーマ",
+ "localRowLimit": "ローカルのみの行数上限",
+ "localRowLimitRangeError": "値は100~2,000,000行の範囲で指定します",
+ "localRowLimitHint": "ローカルでデータを読み込む際に保持する最大行数です(サーバーには保存されません)。",
+ "maxStretchFactor": "チャート最大伸縮率",
+ "maxStretchFactorRangeError": "値は1.0~5.0の範囲で指定します",
+ "maxStretchFactorHint": "チャートが基本サイズを超えて拡大できる倍率です(1.0 = 伸縮なし、2.0 = 最大2倍)。"
+ },
+ "landing": {
+ "tagline": "AIエージェントによる可視化でデータを探索します。",
+ "demos": "デモ",
+ "demoBannerBody": "これはデモサイトです!下の例をお試しいただくか、ファイルをアップロードしてください。大規模データセットの利用、データベース接続、ローカルフォルダーのリンク、永続分析セッションの作成、カスタムモデルの利用、ユーザー管理については ",
+ "demoBannerCta": "インストールガイド",
+ "demoBannerSuffix": "をご覧ください。",
+ "firstSelectModelPrefix": "まず、",
+ "modelTip": "コーディングとマルチモーダル機能に優れたモデルを使うと、Data Formulatorをより快適に利用できます。"
+ },
+ "about": {
+ "startExploration": "探索を開始します",
+ "installLocally": "ローカルにインストールします",
+ "tryOnlineDemo": "オンラインデモを試します",
+ "video": "動画",
+ "github": "GitHub",
+ "featuresAria": "機能",
+ "feature1Title": "あらゆるデータに接続します",
+ "feature1Description": "ファイルのアップロード、ローカルフォルダーのリンク、データベースやクラウドソースへの接続 — Postgres、MySQL、Kusto、Cosmos DB、S3、OneLakeなどに対応します。保存済み接続は次回もすぐ使えます。エージェントはスクリーンショットやテキストからアドホックデータを取得することもできます。",
+ "feature2Title": "対話型データエージェント",
+ "feature2Description": "テーブルを理解するエージェントとチャットします。質問したり、変換を依頼したり、アイデアを探索したりできます。エージェントはデータを分析し、コードを実行して、結果をインラインで表示します。",
+ "feature3Title": "インタラクティブ編集",
+ "feature3Description": "UIと自然言語を組み合わせてチャートを整えます。スタイル調整エージェントでタイポグラフィ、色、レイアウトを磨き、おすすめを取得し、Data Threadsで前に戻ったり分岐したりできます。",
+ "feature4Title": "保存と共有",
+ "feature4Description": "作業をセッション間で保存・保持します。各チャートの背後にあるデータ、数式、コードを確認し、見つけた内容をレポートにまとめて共有します。",
+ "videoDemoAria": "動画デモ: {{title}}",
+ "dataHandling": "データの取り扱い:",
+ "dataHandlingText": "データはブラウザー内のみに保存 • ローカル版はPythonをローカル実行、オンラインデモはサーバー側で処理(保存なし) • LLMはプロンプトと少量サンプルを受け取ります",
+ "researchPrototype": "Microsoft Researchのリサーチプロトタイプ",
+ "installViaPipAria": "pipでローカルにインストールします(新しいタブで開きます)",
+ "watchVideoAria": "YouTubeで動画を視聴します(新しいタブで開きます)",
+ "viewGithubAria": "GitHubで表示します(新しいタブで開きます)"
+ },
+ "footer": {
+ "privacyCookies": "プライバシーとCookie",
+ "termsOfUse": "利用規約",
+ "contactUs": "お問い合わせ",
+ "privacyCookiesAria": "プライバシーとCookie(新しいタブで開きます)",
+ "termsOfUseAria": "利用規約(新しいタブで開きます)",
+ "contactUsAria": "お問い合わせ(新しいタブで開きます)"
+ },
+ "agentRules": {
+ "title": "エージェントルール",
+ "codingRules": "コーディングルール",
+ "codingRulesHint": "(データを変換して可視化を提案するコードを生成する際にAIエージェントが従うルールです。)",
+ "explorationRules": "探索ルール",
+ "explorationRulesHint": "(データセットを探索し、質問を生成し、インサイトを発見する際にAIエージェントが従うルールです)",
+ "saveCodingRules": "コーディングルールを保存します",
+ "saveExplorationRules": "探索ルールを保存します"
+ },
+ "refresh": {
+ "titleForTable": "「{{table}}」のデータを更新します",
+ "description": "新しいデータをアップロードして現在のテーブル内容を置き換えます。必須列:",
+ "installLocallyForUpload": "ファイルアップロードを有効にするにはData Formulatorをローカルにインストールします。",
+ "urlPlaceholder": "URLからCSV、TSV、JSONファイルを読み込みます(例: https://example.com/data.json)",
+ "urlSuffixHelper": "URLは .csv、.tsv、.json ファイルを指している必要があります",
+ "refreshData": "データを更新します",
+ "contentExceedsLimit": "コンテンツは {{limit}}MB の上限を超えています ({{size}}MB)",
+ "errorNoData": "アップロードされたコンテンツにデータが見つかりません。",
+ "errorColumnCountMismatch": "列数が一致しません。{{expected}} 列({{expectedNames}})のはずが、{{actual}} 列({{actualNames}})でした。",
+ "errorColumnNamesMismatch": "列名が一致しません。",
+ "errorMissingColumns": "不足している列:{{columns}}。",
+ "errorUnexpectedColumns": "予期しない列:{{columns}}。",
+ "errorPleaseAddData": "データを貼り付けてください。",
+ "errorJsonArray": "JSONコンテンツはオブジェクトの配列である必要があります。",
+ "errorParsePaste": "貼り付けコンテンツをJSONまたはCSV/TSVとして解析できませんでした。",
+ "errorParseContent": "貼り付けコンテンツの解析に失敗しました。",
+ "errorPleaseEnterUrl": "URLを入力してください。",
+ "errorUrlSuffix": "URLは .csv、.tsv、.json ファイルを指している必要があります。",
+ "errorParseUrl": "URLコンテンツをJSONまたはCSV/TSVとして解析できませんでした。",
+ "errorParseFile": "ファイル内容を解析できませんでした。",
+ "errorParseExcel": "Excelファイルの解析に失敗しました。",
+ "errorUnsupportedFormat": "未対応のファイル形式です。CSV、TSV、JSON、Excelファイルを使用してください。",
+ "errorFileTooLarge": "ファイルが大きすぎます ({{size}}MB)。最大サイズは5MBです。",
+ "errorFetchUrl": "URLからのデータ取得に失敗しました: {{message}}",
+ "errorReadFile": "ファイルの読み取りに失敗しました: {{message}}"
+ },
+ "report": {
+ "deleteReport": "レポートを削除します",
+ "backToEditor": "エディターに戻ります",
+ "editReport": "レポートを編集します",
+ "doneEditing": "編集を終了しました",
+ "createChartifactReport": "Chartifactレポートを作成します",
+ "shareReportAsImage": "レポートを画像として共有します",
+ "couldNotFindContent": "キャプチャするレポートコンテンツが見つかりませんでした",
+ "failedToGenerateImage": "画像の生成に失敗しました",
+ "imageCopied": "レポート画像をクリップボードにコピーしました!貼り付けて共有できます。",
+ "failedToCopyClipboard": "クリップボードへのコピーに失敗しました。お使いのブラウザーはこの機能に対応していない可能性があります。",
+ "clipboardNotSupported": "お使いのブラウザーはClipboard APIに対応していません。最新のブラウザーをお使いください。",
+ "clipboardRequiresSecureContext": "クリップボードへのコピーにはHTTPSまたはlocalhostが必要です。このHTTPページではClipboard APIにアクセスできません。HTTPSを使うか、代わりにPNGダウンロードを使います。",
+ "failedToGenerateReportImage": "レポート画像の生成に失敗しました。もう一度お試しください。",
+ "couldNotParseSvg": "SVGを解析できませんでした",
+ "couldNotGetCanvasContext": "キャンバスコンテキストを取得できませんでした",
+ "pleaseSelectChart": "チャートを1つ以上選択してください",
+ "noModelSelected": "モデルが選択されていません",
+ "failedToGenerateReport": "レポートの生成に失敗しました",
+ "noResponseBody": "応答本文がありません",
+ "errorGeneratingReport": "レポート生成エラーです",
+ "backToExplore": "探索に戻ります",
+ "viewReports": "レポートを表示します",
+ "createA": "作成します",
+ "from": "から",
+ "chart": "チャート",
+ "charts": "チャート",
+ "composing": "作成しています...",
+ "compose": "作成します",
+ "styleLiveReport": "ライブレポート",
+ "styleBlogPost": "ブログ記事",
+ "styleSocialPost": "ソーシャル投稿",
+ "styleExecutiveSummary": "エグゼクティブサマリー",
+ "styleShortNote": "ショートノート",
+ "truncationNote": "注:このレポートでは一部のテーブルが {{maxRows}} 行に切り詰められています。対象テーブル:{{list}}。",
+ "truncationTableEntry": "「{{name}}」(全 {{totalRows}} 行)",
+ "noChartsAvailable": "利用可能なチャートがありません。まず可視化を作成してください。",
+ "loadingChartPreviews": "チャートプレビューを読み込んでいます...",
+ "noAvailableCharts": "表示できるチャートがありません。読み込み中か、利用できない可能性があります。",
+ "createNewReport": "新しいレポートを作成します",
+ "aiDisclaimer": "AIが選択チャートから投稿を生成しました。不正確な場合があります!",
+ "showAllReports": "すべてのレポートを表示します",
+ "reports": "レポート",
+ "createChartifact": "Chartifactを作成します",
+ "copied": "コピーしました!",
+ "copyContent": "コンテンツをコピーします",
+ "contentCopied": "レポートコンテンツをクリップボードにコピーしました。",
+ "inspectingCharts": "チャートを確認しています...",
+ "inspectedCharts": "確認済みチャート",
+ "downloadAndShare": "ダウンロードと共有",
+ "saveAsImage": "画像として保存します",
+ "downloadPdf": "PDFをダウンロードします",
+ "imageActions": "画像",
+ "copyImage": "画像をクリップボードにコピーします",
+ "downloadPng": "PNGをダウンロードします",
+ "exportPdf": "PDFをエクスポートします",
+ "pngDownloaded": "PNGをダウンロードしました",
+ "failedToDownloadPng": "PNGのダウンロードに失敗しました。もう一度お試しください。",
+ "pdfPrintOpened": "印刷ダイアログを開きました。PDFとして保存を選びます。",
+ "failedToExportPdf": "PDFのエクスポートに失敗しました。もう一度お試しください。",
+ "shareImage": "画像を共有します",
+ "createdWithAI": "AIで作成(使用モデル:",
+ "chartAlt": "チャート",
+ "untitled": "無題のレポート"
+ },
+ "db": {
+ "manager": "DBマネージャー",
+ "externalDataLoaders": "外部データローダー",
+ "localDuckDB": "ローカルDuckDB",
+ "noTablesAvailable": "利用可能なテーブルがありません",
+ "viewsWithCount": "ビュー ({{count}})",
+ "cleanUnusedViews": "未使用のビューを整理します",
+ "refreshTableList": "テーブル一覧を更新します",
+ "importDatabaseFile": "データベースファイルをインポートします",
+ "exportDatabaseFile": "データベースファイルをエクスポートします",
+ "resetDatabase": "データベースをリセットします",
+ "uploadTableTooltip": "csv/tsvファイルをローカルデータベースにアップロードします",
+ "uploading": "アップロードしています...",
+ "uploadTableCta": "csv/tsvファイルをローカルデータベースにアップロードします",
+ "databaseEmptyHint": "データベースは空です。テーブル一覧を更新するか、データをインポートして開始します。",
+ "dropTable": "テーブルを削除します",
+ "showingFirstRows": "全 {{count}} 行の最初の9行を表示しています",
+ "loaded": "読み込み済み",
+ "watchMode": "ウォッチモード",
+ "checkUpdatesEvery": "更新を確認する間隔",
+ "watchHint": "データベースから定期的にデータを自動確認・更新します",
+ "loadTable": "{{live}}テーブルを読み込みます",
+ "livePrefix": "ライブ ",
+ "resetConfirm": "バックエンドデータベースをリセットしてすべてのテーブルを削除しますか? 元に戻せません。",
+ "tableName": "テーブル名",
+ "columns": "列",
+ "importOptions": "インポートオプション",
+ "skip": "スキップします",
+ "full": "全体",
+ "subset": "サブセット",
+ "dontImportTable": "このテーブルはインポートしません",
+ "importEntireTable": "テーブル全体をインポートします",
+ "importSubsetTooltip": "最初のK行をインポートします(並べ替えは任意です)",
+ "createSubsetOf": "「{{table}}」のサブセットを作成します",
+ "rowLimit": "行数上限(最大: {{count}} 行)",
+ "sortByOptional": "並べ替え基準(任意)",
+ "selectColumns": "列を選択します...",
+ "asc": "昇順",
+ "desc": "降順",
+ "done": "完了しました",
+ "importSelectedTables": "選択テーブルをローカルDuckDBにインポートします ({{count}})",
+ "importTablesFrom": "{{loader}} からテーブルをインポートします",
+ "tableFilter": "テーブルフィルター",
+ "tableFilterPlaceholder": "キーワードを含むテーブルのみ読み込みます",
+ "refresh": "更新します",
+ "connect": "{{suffix}} に接続します",
+ "withFilter": "フィルター付き",
+ "disconnect": "切断します",
+ "failedFetchTables": "テーブルの取得に失敗しました。サーバーが起動しているかご確認ください",
+ "failedUploadTable": "テーブルのアップロードに失敗しました",
+ "failedUploadTableServer": "テーブルのアップロードに失敗しました。サーバーが起動しているかご確認ください",
+ "tableRenamed": "テーブル {{original}} は既に存在します。{{renamed}} に名前を変更しました",
+ "failedResetDatabase": "データベースのリセットに失敗しました",
+ "failedDeleteTable": "テーブルの削除に失敗しました",
+ "failedDeleteTableServer": "テーブルの削除に失敗しました。サーバーが起動しているかご確認ください",
+ "deletedUnusedViews": "未参照の派生ビュー {{count}} 件を削除しました: {{views}}",
+ "downloadDatabaseFailed": "データベースファイルのダウンロードに失敗しました",
+ "confirmDeleteUnusedViews": "以下の未参照の派生ビューを削除してもよろしいですか?",
+ "confirmDeleteTableLoaded": "{{table}} を削除してもよろしいですか?\n{{table}} は現在Data Formulatorに読み込まれており、データベースから削除されます。",
+ "failedFetchLoaderTables": "データローダーテーブルの取得に失敗しました: {{message}}",
+ "failedFetchLoaderTablesServer": "データローダーテーブルの取得に失敗しました。サーバーが起動しているかご確認ください",
+ "successImportTables": "{{count}} テーブルを正常にインポートしました",
+ "failedImportSomeTables": "一部テーブルのインポートに失敗しました: {{errors}}",
+ "failedIngestData": "データの取り込みに失敗しました: {{error}}",
+ "emptyValue": "(空)",
+ "notInstalledHint": "インストールされていません。実行します: {{hint}}",
+ "selectDataLoader": "左パネルからデータソースを選択します",
+ "connectedSection": "接続済み",
+ "availableSection": "利用可能",
+ "uploadingData": "データをアップロードしています...",
+ "rowsCount": "{{count}} 行",
+ "sampleRowsCount": "{{count}} サンプル行",
+ "loadSubset": "サブセットを読み込みます",
+ "rowsLabel": "行:",
+ "subsetLoaded": "サブセットを読み込みました",
+ "unload": "アンロードします",
+ "loadTableSubset": "テーブルサブセットを読み込みます",
+ "loadTableBtn": "テーブルを読み込みます",
+ "loadWithFilters": "フィルター付きで読み込みます",
+ "maxRows": "最大行数",
+ "datasets": "データセット",
+ "dashboards": "ダッシュボード",
+ "rememberCredentials": "資格情報を記憶します",
+ "setupDetails": "設定の詳細",
+ "askAgent": "エージェントに質問します",
+ "askAgentPrompt": "{{connector}} 接続の設定を手伝ってもらいます。利用可能なオプションを案内し、各パラメーターの意味を説明し、失敗時はトラブルシューティングを手伝ってもらいます。",
+ "setupFieldsIntro": "接続するには以下を指定します:",
+ "optional": "任意",
+ "connectionTimeout": "接続がタイムアウトしました。資格情報をご確認のうえ、もう一度お試しください。",
+ "delegatedLogin": "サービス経由でログインします",
+ "cliLoginReady": "{{user}} でサインインしています。接続できます。",
+ "cliLogin": "Azure CLIでサインインします",
+ "cliLoginCurrentAccount": "現在のアカウント",
+ "cliLoginRequired": "接続前にAzure CLIでサインインします。ターミナルで `az login` を実行してからこのフォームを開き直します。",
+ "cliNotInstalled": "Azure CLIが見つかりません。接続前にインストールしてターミナルで `az login` を実行します。",
+ "cliLoginFailed": "サインインに失敗しました。ターミナルでログインコマンドを実行してお試しください。",
+ "popupBlocked": "ポップアップがブロックされました。ポップアップを許可してもう一度お試しください。",
+ "tierConnection": "接続",
+ "tierAuth": "サインイン",
+ "tierFilter": "範囲",
+ "tierAuthOr": "または",
+ "tierAuthManual": "資格情報を手動で入力します",
+ "selectTableFromTree": "ツリーからテーブルを選んでプレビューします",
+ "noTablesFound": "テーブルが見つかりません",
+ "localFilterPlaceholder": "名前で絞り込みます...",
+ "createConnector": "コネクタを作成します",
+ "deleteConnector": "削除します",
+ "showingPreview": "最初の {{count}} 行をプレビューしています"
+ },
+ "connectorPreview": {
+ "rowCount": "{{count}} 行",
+ "showingPreview": "最初の {{count}} 行をプレビューしています",
+ "previewRowsNotice": "最初の {{count}} 行のみプレビューしています",
+ "maxRows": "最大行数",
+ "addFilter": "フィルターを追加します",
+ "filterColumn": "列",
+ "filterValue": "値",
+ "filterValueTo": "終了値",
+ "filterValueSearch": "入力して検索します",
+ "filterOptionsTruncated": "結果は切り詰められています。入力して絞り込みます。",
+ "noValueNeeded": "値は不要です",
+ "opBetween": "BETWEEN",
+ "opContains": "CONTAINS",
+ "refreshPreview": "プレビューします",
+ "noMatchingRows": "現在のフィルターに一致する行がありません",
+ "noPreviewAvailable": "利用可能なプレビューがありません",
+ "loaded": "読み込み済み",
+ "unload": "アンロードします",
+ "loadTable": "テーブルを読み込みます",
+ "sourceMetadata": "ソースメタデータ",
+ "noSourceMetadata": "ソースメタデータがありません",
+ "columnsCount": "列",
+ "colName": "列",
+ "colType": "型",
+ "colDesc": "説明",
+ "metadataStatus": {
+ "synced": "同期済み",
+ "partial": "一部",
+ "unavailable": "利用不可",
+ "not_synced": "未同期"
+ },
+ "loadInNewSession": "新しいセッションに読み込みます"
+ },
+ "canvas": {
+ "close": "キャンバスを閉じます"
+ },
+ "dataThread": {
+ "title": "データスレッド",
+ "refreshNow": "今すぐ更新します",
+ "watchForUpdates": "更新を監視します",
+ "every": "間隔",
+ "refreshInterval": {
+ "1": "1秒",
+ "10": "10秒",
+ "30": "30秒",
+ "60": "1分",
+ "300": "5分",
+ "600": "10分",
+ "1800": "30分",
+ "3600": "1時間",
+ "86400": "24時間"
+ },
+ "tableCardActionsAria": "テーブルカードのアクション",
+ "attachMetadataTo": "{{table}} にメタデータを添付します",
+ "metadata": "メタデータ",
+ "metadataPlaceholder": "AIエージェントがデータをよりよく理解・処理できるよう、追加のコンテキストやガイダンスを添付します。",
+ "sourceDescription": "ソースの説明",
+ "deleteMessage": "メッセージを削除します",
+ "editTableName": "テーブル名を編集します",
+ "moreOptions": "その他のオプション",
+ "createNewChart": "新しいチャートを作成します",
+ "deleteTable": "テーブルを削除します",
+ "deleteChart": "チャートを削除します",
+ "deleteReport": "レポートを削除します",
+ "attachMetadata": "メタデータを添付します",
+ "editMetadata": "メタデータを編集します",
+ "refreshData": "データを更新します",
+ "autoRefreshTooltip": "{{interval}} ごとに自動更新します - クリックして間隔を変更または監視を停止します",
+ "threadIndex": "スレッド - {{index}}",
+ "continuedFromAbove": "続き",
+ "continuesBelow": "続く",
+ "textTurnEarlier": "{{count}} 件の以前の返信",
+ "textTurnEarlier_other": "{{count}} 件の以前の返信",
+ "textTurnCollapse": "折りたたみます",
+ "usingSources": "使用しています",
+ "switchingSources": "切り替えます",
+ "hmm": "うーん...",
+ "oops": "おっと...",
+ "completed": "完了しました",
+ "workspace": "ワークスペース",
+ "thinking": "考えています...",
+ "runningCode": "コードを実行しています...",
+ "creatingChart": "チャートを作成しています...",
+ "inspectingData": "ソースデータを調べています...",
+ "inspectedData": "ソースデータを調べました",
+ "inspectingChart": "チャートを確認しています…",
+ "loadingSkill": "スキルを読み込んでいます: {{skill}}...",
+ "rulesLoaded": "ルールを読み取っています:{{rules}}",
+ "knowledgeLoaded": "ナレッジを読み取っています:{{knowledge}}",
+ "searching": "検索しています...",
+ "listingConnectors": "利用可能なコネクタを確認しています",
+ "readingConnector": "コネクタ設定を読んでいます",
+ "producingAction": "{{action}} を出力しています...",
+ "jumpToThreadRange": "スレッド {{label}} に移動します",
+ "collapse": "折りたたみます",
+ "expand": "展開します",
+ "renameTable": "テーブル名を変更します",
+ "addData": "データを追加します",
+ "addMoreData": "データをさらに追加します",
+ "dataSources": "データソース",
+ "tablesAvailableToAgent": "エージェントが利用できるテーブルは {{count}} 件です",
+ "tablesAvailableToAgent_other": "エージェントが利用できるテーブルは {{count}} 件です",
+ "showAllTables": "{{count}} 件をすべて表示します",
+ "importedTables_one": "{{count}} インポート済みテーブル",
+ "importedTables_other": "{{count}} インポート済みテーブル",
+ "importsFrom": "{{name}} からのインポートです",
+ "showFewerTables": "表示を減らします",
+ "earlierTurns": "{{count}} 件の以前のターン",
+ "earlierTurns_other": "{{count}} 件の以前のターン",
+ "hideEarlierTurns": "以前のターンを非表示にします",
+ "working": "作業しています...",
+ "waitingForClarification": "確認を待っています...",
+ "emptySessionTitle": "まだデータがありません",
+ "emptySession": "下のエージェントに読み込みを依頼します。準備ができるとここに表示されます。",
+ "startingRun": "リクエストに対応しています…",
+ "rename": "名前を変更します",
+ "refreshSettings": "更新設定",
+ "replaceData": "データを置き換えます",
+ "viewMetadata": "メタデータを表示します",
+ "metadataFor": "{{table}} のメタデータ",
+ "derivationSummary": "派生サマリー",
+ "noMetadata": "このテーブルの説明はありません。",
+ "rowsByColumns": "{{rows}}行 × {{cols}}列",
+ "chartAlt": "{{type}} チャート",
+ "streamSourceLabel": "ストリーム",
+ "sourceFile": "ファイル",
+ "sourcePaste": "貼り付けデータ",
+ "sourceUrl": "URL",
+ "sourceStream": "ストリーム",
+ "sourceDatabase": "データベース",
+ "sourceExample": "例",
+ "sourceExtract": "抽出済み",
+ "failedRefreshDerivedTable": "派生テーブル「{{table}}」の更新に失敗しました: {{message}}",
+ "errorRefreshingDerivedTable": "派生テーブル「{{table}}」の更新エラーです",
+ "alsoUses": "こちらも使います"
+ },
+ "dataLoading": {
+ "extractingData": "データを抽出しています...",
+ "examples": "例",
+ "stopGeneration": "生成を停止します",
+ "deleteTable": "テーブルを削除します",
+ "loadingThread": "読み込み - {{index}}",
+ "noDataSelected": "データが選択されていません",
+ "imageUrlPrefix": "画像URL: ",
+ "dataUrl": "データURL",
+ "imageAlt": "{{name}} の画像",
+ "extractFromImagePlaceholder": "この画像からデータを抽出します",
+ "followUpPlaceholder": "追加指示(例: ヘッダー修正、合計削除、15行生成など)",
+ "pasteContentPlaceholder": "Webサイト、画像、テキストブロックなどのコンテンツを貼り付けて、AIにデータの抽出・整形を依頼します。",
+ "unableToExtract": "応答からテーブルを抽出できません",
+ "stoppedByUser": "ユーザーによって生成が停止されました",
+ "serverError": "データ処理中のサーバーエラー: {{message}}",
+ "pastedImageAlt": "貼り付け画像 {{index}}",
+ "uploadedImageAlt": "ユーザーがアップロードした画像 {{index}}",
+ "sampleExtractRepos": "https://github.com/microsoft から上位リポジトリを抽出します",
+ "sampleExtractFromImage": "この画像からデータを抽出します",
+ "sampleExtractGrowth": "テキストから成長データを抽出します",
+ "sampleGenerateDataset": "UK王朝データセットを生成します",
+ "textOnlyModelWarning": "現在のモデルは画像入力に対応していない可能性があります。必要に応じてテキストのみの分析を続けます。"
+ },
+ "preview": {
+ "preview": "プレビュー",
+ "removeTable": "テーブルを削除します",
+ "rowsColumns": "{{rows}} 行 × {{columns}} 列",
+ "noTablesToPreview": "プレビューするテーブルがありません。"
+ },
+ "conceptShelf": {
+ "cleanUnusedFields": "未使用フィールドを整理します",
+ "showAllFields": "... {{group}} フィールド {{count}} 件をすべて表示します ▾",
+ "dataFields": "データフィールド",
+ "fieldOperators": "フィールド演算子",
+ "openPanel": "コンセプトパネルを開きます",
+ "hidePanel": "コンセプトパネルを非表示にします"
+ },
+ "chartRec": {
+ "skipAnswer": "スキップします",
+ "generateFromDescription": "説明からチャートを生成します",
+ "getSomeIdeas": "アイデアを提案してもらいます!",
+ "ideasPrompt": "アイデアはありますか?",
+ "interactive": "インタラクティブ",
+ "agent": "エージェント",
+ "getIdeas": "アイデアを取得します",
+ "whatsNext": "次は何をしますか?",
+ "editor": "エディター",
+ "getIdeasForVisualization": "可視化のアイデアを取得します",
+ "differentIdeas": "別のアイデアを表示しますか?",
+ "getIdeasQuestion": "アイデアを取得しますか?",
+ "placeholderVisualize": "何を可視化しますか?",
+ "placeholderVisualizeEmphasis": "✏️ 何を可視化しますか?",
+ "defaultInterestingPromptPlaceholder": "データの興味深い点を説明します",
+ "placeholderFormulate": "データを定式化します",
+ "placeholderFormulateEmphasis": "✏️ データを定式化します",
+ "formulateAndOverride": "定式化して上書きします",
+ "agentWorking": "エージェントが作業しています...",
+ "attachUploadFailed": "{{name}} の添付に失敗しました",
+ "replyPlaceholder": "エージェントの質問に回答します…",
+ "emptyAnalysisInputsPlaceholder": "Tabを押して読み込み可能なデータを質問します",
+ "explorePlaceholder": "質問するか、探索したい内容を説明します(@でコンテキストを追加します)",
+ "explorePlaceholderSingleTable": "質問するか、探索したい内容を説明します",
+ "addMoreData": "ワークスペースにデータをさらに追加します",
+ "mentionTable": "テーブルをコンテキストに追加します (@)",
+ "searchTables": "テーブルを検索します...",
+ "noMoreTables": "利用可能なテーブルはこれ以上ありません",
+ "getIdeaSuggestions": "アイデア提案を取得します",
+ "exploreIdeasPrompt": "次に何を探索するか決めるのを手伝ってください — `clarify` アクションで3~5個の選択肢を提示し、まだ私に代わって選ばないでください。\n\n各選択肢は短くクリック可能な方向にしてください — 例: 詳細を掘り下げる、別の角度に切り替える、視野を広げる、別のテーブルを取り込む、統計手法を試す。各選択肢に**ごく短い**1行の理由を付けてください(10語以内)。",
+ "askedForRecommendations": "次に何を探索すべきですか?",
+ "generateReport": "レポートを生成します",
+ "quickActions": "クイックアクション",
+ "writeReport": "レポートを書きます",
+ "createWorkflow": "ワークフローを作成します",
+ "reportConversationPrompt": "現在の会話とデータからレポート作成を手伝ってください。下書き前に選べるよう、有用な方向をいくつか提案してください。",
+ "reportPrompt": "この探索の主な発見をまとめたレポートを書きます。",
+ "askedForReport": "探索をまとめたレポートを書きます。",
+ "expandStarters": "提案を表示します",
+ "collapseStarters": "提案を非表示にします",
+ "endConversation": "会話を終了します",
+ "sendReply": "返信を送信します",
+ "explore": "探索します",
+ "regenerateIdeas": "アイデアを再生成します",
+ "interruptedByRefresh": "ページ更新により中断されました",
+ "generatingIdeas": "探索アイデアを生成しています...",
+ "progressBuildingContext": "データコンテキストを準備しています...",
+ "progressGenerating": "AIが提案を生成しています...",
+ "conversationEnded": "ユーザーにより会話を終了しました。",
+ "explorationCancelled": "探索をキャンセルしました",
+ "explorationTimedOut": "探索がタイムアウトしました",
+ "noResponseReader": "利用可能な応答本文リーダーがありません",
+ "explorationFailed": "探索に失敗しました: {{message}}",
+ "agentLost": "エージェントがデータ内で迷子になりました。",
+ "couldYouClarify": "詳しく教えていただけますか?",
+ "clarificationTitle": "質問",
+ "minimizeClarification": "最小化します",
+ "expandClarification": "展開します",
+ "pauseClose": "閉じます(フォーカス切替)",
+ "pauseDelete": "削除します",
+ "clarificationQuestionLabel": "{{index}}.",
+ "optionalClarification": "(任意)",
+ "freeTextClarificationPlaceholder": "回答を入力します...",
+ "customAnswerPlaceholder": "または独自の回答を入力します...",
+ "freeTextClarificationHint": "下のチャットボックスに回答を入力します。",
+ "directClarificationLabel": "または選択を直接説明します:",
+ "directClarificationPlaceholder": "エージェントに行ってほしい内容を説明します...",
+ "submitClarification": "続けます",
+ "cancelClarification": "キャンセルします",
+ "invalidClarification": "エージェントから無効な確認リクエストが返されました。",
+ "invalidExplanation": "エージェントから無効な説明が返されました。",
+ "explanationTitle": "説明",
+ "explanationFollowupsLabel": "次の手順の候補:",
+ "delegateTitle": "提案する次のエージェント",
+ "delegateMinimize": "最小化します",
+ "delegateExpand": "展開します",
+ "delegateDismiss": "閉じます",
+ "delegateToDataLoading": "データ読み込みで検索します",
+ "delegateToReportGen": "レポートを生成します",
+ "errorDuringExploration": "探索中のエラーです",
+ "explorationStep": "探索手順 {{step}}: {{question}}",
+ "emptyAnalysisInputsPrompt": "読み込み可能なデータは何ですか?",
+ "threadExplorePrompt": "このデータの興味深いパターンや傾向を探索します",
+ "explorationThreadDeriveDescription": "{{source}} から指示で派生します: {{instruction}}",
+ "explorationStepCodeComment": "# 探索手順 {{step}}",
+ "maxIterationsReached": "探索手順の最大数に達しました。"
+ },
+ "dataGrid": {
+ "loading": "読み込んでいます ...",
+ "sortBy": "{{label}} で並べ替えます",
+ "rowCount": "{{count}} 行",
+ "columnCount_one": "{{count}} 列",
+ "columnCount_other": "{{count}} 列",
+ "filename": "ファイル名: {{name}}",
+ "loadedOfTotal": "{{loaded}} / {{total}} 行",
+ "viewRandomRows": "このテーブルからランダムに10000行を表示します",
+ "restoreOrder": "元の順序に戻します",
+ "downloadAsCsv": "CSVでダウンロードします",
+ "downloading": "ダウンロードしています...",
+ "columnMenu": {
+ "openMenu": "列オプション",
+ "sortAsc": "昇順に並べ替えます",
+ "sortDesc": "降順に並べ替えます",
+ "clearSort": "並べ替えをクリアします",
+ "filter": "フィルター…",
+ "filterActive": "フィルター(有効)",
+ "clearFilter": "フィルターをクリアします",
+ "filterComingSoon": "フィルターUIは近日公開です。"
+ },
+ "filter": {
+ "from": "開始",
+ "to": "終了",
+ "includeBlanks": "空白を表示します",
+ "showBlanksOnly": "空白のみ表示します",
+ "contains": "含みます…",
+ "blank": "(空白)",
+ "apply": "適用します",
+ "clear": "フィルターをクリアします",
+ "search": "値を検索します",
+ "selectAll": "(すべて選択)",
+ "noMatches": "一致する値がありません",
+ "distinctHint": "{{count}} 個の個別値",
+ "sectionSort": "並べ替え",
+ "sectionFilter": "フィルター",
+ "filterApplied": "フィルターを適用しました",
+ "summaryRows": "{{count, number}} 行",
+ "summaryDistinct": "{{count, number}} 個別値",
+ "summaryBlanks": "{{count, number}} 個の空白"
+ }
+ },
+ "chatDialog": {
+ "noHistory": "まだ会話履歴はありません",
+ "you": "あなた",
+ "assistant": "アシスタント",
+ "agentLog": "エージェントログ",
+ "truncatedPreview": "コンテンツは折りたたまれています。展開して全文を表示します。",
+ "expandFullMessage": "全文を展開します({{count}} 文字)",
+ "collapseFullMessage": "全文を折りたたみます"
+ },
+ "dataView": {
+ "breadcrumb": "パンくずリスト"
+ },
+ "auth": {
+ "loginTitle": "Data Formulatorにサインインします",
+ "loginSubtitle": "Supersetアカウントを接続してデータセットにアクセスするか、ゲストとして続けます。",
+ "username": "ユーザー名",
+ "password": "パスワード",
+ "signIn": "サインインします",
+ "signingIn": "サインインしています...",
+ "continueAsGuest": "ゲストとして続けます",
+ "guestDescription": "Supersetアカウントなしで独自のデータセットをアップロードします。",
+ "loginFailed": "ログインに失敗しました: {{message}}",
+ "or": "または",
+ "supersetConnection": "Superset接続",
+ "connectedAs": "{{name}} でサインインしています",
+ "signOut": "サインアウトします",
+ "signOutConfirm": "サインアウトしてセッションデータを消去しますか?",
+ "notConfigured": "Supersetは構成されていません。ゲストモードで続けます。",
+ "ssoLogin": "SSOログイン",
+ "ssoLoggingIn": "SSOでログインしています...",
+ "ssoDescription": "シングルサインオンで企業アカウントを使ってログインします",
+ "ssoPopupBlocked": "ポップアップがブロックされました。このサイトのポップアップを許可してください。",
+ "ssoFailed": "SSOログインに失敗しました: {{message}}",
+ "ssoOrPassword": "またはSupersetアカウントでサインインします",
+ "completingLogin": "ログインを完了しています…",
+ "idpRedirecting": "SSOへリダイレクトしています。しばらくお待ちください…",
+ "callbackFailed": "ログインコールバックに失敗しました: {{message}}",
+ "ssoErrorAccessDenied": "認証はキャンセルされました。SSOを使う場合はもう一度サインインしてください。",
+ "ssoErrorInvalidState": "SSOセッションの有効期限が切れたか、中断されました。もう一度サインインしてください。",
+ "ssoErrorInvalidClient": "SSOクライアントの資格情報が正しくありません。構成の確認は管理者にお問い合わせください。",
+ "ssoErrorTokenExchange": "トークン交換中にSSOログインが失敗しました。もう一度お試しいただくか、管理者にお問い合わせください。",
+ "ssoErrorMissingEndpoint": "SSOが正しく構成されていません(トークンエンドポイントがありません)。管理者にお問い合わせください。",
+ "ssoErrorGeneric": "SSOログインに失敗しました。もう一度お試しいただくか、管理者にお問い合わせください。",
+ "sessionExpired": "セッションの有効期限が切れました。もう一度サインインしてください。",
+ "silentRenewFailed": "バックグラウンドのトークン更新に失敗しました。ログインにリダイレクトしています…",
+ "migration": {
+ "title": "以前のデータをインポートしますか?",
+ "description": "以前は匿名で作業し、データのあるワークスペースが {{count}} 件あります。アカウントにインポートしますか?",
+ "importButton": "データをインポートします",
+ "freshButton": "新規開始します",
+ "importing": "ワークスペースをインポートしています…",
+ "success": "{{count}} ワークスペースを正常にインポートしました。",
+ "failed": "インポートに失敗しました: {{message}}"
+ }
+ },
+ "supersetPanel": {
+ "datasets": "データセット",
+ "dashboards": "ダッシュボード"
+ },
+ "supersetDashboard": {
+ "title": "Supersetダッシュボード",
+ "searchPlaceholder": "ダッシュボードを検索します...",
+ "noDashboards": "ダッシュボードが見つかりません。",
+ "noDatasetsInDashboard": "このダッシュボードにデータセットがありません。"
+ },
+ "workspace": {
+ "sessions": "セッション",
+ "refreshList": "一覧を更新します",
+ "deleteSession": "セッションを削除します",
+ "delete": "削除します",
+ "cancel": "キャンセルします",
+ "close": "閉じます",
+ "newSession": "+ 新しいセッション",
+ "loadingSessions": "セッションを読み込んでいます...",
+ "active": "(アクティブ)",
+ "openingWorkspace": "ワークスペースを開いています...",
+ "openedSession": "セッション「{{name}}」を開きました",
+ "failedToOpenWorkspace": "ワークスペースを開けませんでした",
+ "expiredReadOnly": "この一時セッションはサーバー上で有効期限が切れています。読み取り専用のブラウザースナップショットを表示しています。",
+ "deletedSession": "セッション「{{name}}」を削除しました",
+ "sessionTooltip": "セッション: {{name}}",
+ "newSessionTooltip": "新しいセッション",
+ "exit": "終了します",
+ "exitSessionTooltip": "セッションを終了します",
+ "recoveredSession": "復元されたセッション",
+ "errorOccurred": "エラーが発生しました。",
+ "refreshSession": "セッションを更新します",
+ "errorPersistHint": "問題が解決しない場合はセッションを閉じます。",
+ "yourSessions": "あなたのセッション",
+ "rename": "名前を変更します",
+ "export": "エクスポートします",
+ "importZip": "ワークスペースをインポートします (.zip)",
+ "importingFile": "{{name}} をインポートしています...",
+ "deleteTitle": "セッションを削除しますか?",
+ "deleteConfirm": "{{name}} ({{id}}) とすべてのデータを完全に削除します。",
+ "deleteFailed": "ワークスペースの削除に失敗しました",
+ "renameFailed": "ワークスペースの名前変更に失敗しました",
+ "exportFailed": "ワークスペースのエクスポートに失敗しました",
+ "importFailed": "ワークスペースのインポートに失敗しました",
+ "sortNewest": "新しい順",
+ "sortOldest": "古い順",
+ "sortRecentlyModified": "最近更新順",
+ "sortName": "名前順",
+ "sortNewestFirst": "新しい順",
+ "sortOldestFirst": "古い順",
+ "sortRecentlyModifiedFirst": "最近更新順",
+ "sortNameAsc": "名前順(a–z)",
+ "sortSessions": "セッションを並べ替えます"
+ },
+ "supersetCatalog": {
+ "title": "Supersetデータセット",
+ "searchPlaceholder": "データセットを検索します...",
+ "loadDataset": "読み込みます",
+ "loadOverwrite": "読み込んで上書きします",
+ "loadAsNewTip": "別名で新しいテーブルとして読み込みます",
+ "createNewDataset": "新しいデータセットを作成します",
+ "loading": "データセットを読み込んでいます...",
+ "loadingDataset": "データセットを読み込んでいます...",
+ "noDatasets": "データセットが見つかりません。",
+ "columns": "{{count}} 列",
+ "rows": "{{count}} 行",
+ "database": "データベース",
+ "schema": "スキーマ",
+ "loadSuccess": "データセット「{{name}}」を正常に読み込みました({{count}} 行)。",
+ "loadFailed": "データセットの読み込みに失敗しました: {{message}}",
+ "refresh": "更新します",
+ "aliasPlaceholder": "テーブル別名(任意)",
+ "suffixDialogTitle": "データセット名の接尾辞を入力します",
+ "suffixDialogDesc": "データセット「{{name}}」の接尾辞を指定します。新しい名前で右パネルに読み込まれます。",
+ "suffixPlaceholder": "接尾辞を入力します",
+ "suffixPreview": "最終テーブル名",
+ "cancel": "キャンセルします",
+ "confirmLoad": "確認して読み込みます",
+ "rowLimitTip": "読み込む最大行数"
+ },
+ "tableSelection": {
+ "noTables": "利用可能なテーブルがありません。",
+ "loadDataset": "データセットを読み込みます",
+ "loadInNewSession": "新しいセッションに読み込みます",
+ "fromSource": "[{{source}} から]"
+ },
+ "interaction": {
+ "askedForClarification": "確認を求めました",
+ "gaveExplanation": "説明を共有しました",
+ "delegatedToDataLoading": "さらにデータの読み込みを提案しました",
+ "delegatedToReportGen": "レポート生成を提案しました",
+ "delegateLabelDataLoading": "提案データ",
+ "delegateLabelReportGen": "提案レポート",
+ "clarificationNeeded": "アクション待ちです"
+ },
+ "concepts": {
+ "showFewer": "数式の表示を減らします",
+ "showAll": "すべての数式を表示します",
+ "showFirstN": "最初の {{count}} 数式を表示します",
+ "showAllN": "{{count}} 数式をすべて表示します"
+ },
+ "dataframe": {
+ "columnCount": "{{count}} 列"
+ },
+ "editor": {
+ "bold": "太字 (⌘B)",
+ "italic": "斜体 (⌘I)",
+ "heading1": "見出し1",
+ "heading2": "見出し2",
+ "bulletList": "箇条書き",
+ "numberedList": "番号付きリスト",
+ "quote": "引用",
+ "generating": "生成しています…",
+ "writingReport": "レポートを書いています…",
+ "workingTitle": "レポートに取り組んでいます"
+ },
+ "sidebar": {
+ "openDataSources": "データソース",
+ "openUpload": "データをアップロードします",
+ "openDataLoadingChat": "エージェントでデータを追加します",
+ "openDataConnectors": "データコネクタ",
+ "uploadData": "データをアップロードします",
+ "dataConnectorsTitle": "データコネクタ",
+ "dataSources": "データソース",
+ "sessions": "セッション",
+ "collapse": "折りたたみます",
+ "loadData": "データを読み込みます",
+ "dataConnectors": "データコネクタ",
+ "refreshCatalog": "更新します",
+ "refresh": "データを更新します",
+ "emptyTree": "テーブルが見つかりません",
+ "addConnector": "データコネクタを追加します",
+ "add": "追加します",
+ "new": "新規",
+ "import": "インポートします",
+ "connectDataSource": "データソースを接続します",
+ "browseInDataView": "データビューで参照します",
+ "connectConnector": "接続します",
+ "linkLocalFolder": "ローカルフォルダーをリンクします",
+ "newSession": "新しいセッション",
+ "importSession": "セッションをインポートします",
+ "noSessions": "保存済みセッションがありません",
+ "tableCount": "{{count}} テーブル",
+ "chartCount": "{{count}} チャート",
+ "andMore": "他 {{count}} 件",
+ "emptyWorkspace": "空のワークスペース",
+ "unableToLoadInfo": "情報を読み込めません",
+ "openingWorkspace": "ワークスペースを開いています...",
+ "sessionDeleted": "セッションを削除しました",
+ "failedDeleteSession": "セッションの削除に失敗しました",
+ "loadedTable": "テーブル「{{name}}」を読み込みました",
+ "loadedTableTruncated": "「{{name}}」から {{count}} 行を読み込みました(行数上限に達しました。ソースにはさらに多くのデータがある場合があります)",
+ "failedLoadTable": "「{{name}}」の読み込みに失敗しました: {{error}}",
+ "refreshedTable": "「{{name}}」を更新しました",
+ "currentSession": "現在のセッション",
+ "currentSessionWithDate": "現在のセッション · {{date}}",
+ "clickToOpen": "クリックして開きます",
+ "previewRowCount": "{{count}} 行",
+ "previewColumnsHeader": "列 ({{count}})",
+ "noPreviewAvailable": "利用可能なプレビューがありません",
+ "alreadyLoaded": "読み込み済みです",
+ "maxRows": "最大行数",
+ "allRows": "すべて",
+ "loadingEllipsis": "読み込んでいます...",
+ "loadWithFilters": "フィルター付きで読み込みます",
+ "load": "読み込みます",
+ "disconnectConnector": "切断します",
+ "connectorConnected": "「{{name}}」に接続しました",
+ "failedConnectConnector": "接続に失敗しました",
+ "connectorDisconnected": "コネクタ「{{name}}」を切断しました",
+ "failedDisconnectConnector": "コネクタの切断に失敗しました",
+ "failedSearchConnector": "{{connector}} の検索に失敗しました",
+ "deleteConnector": "コネクタを削除します",
+ "deleteConnectorTitle": "コネクタを削除します",
+ "deleteConnectorConfirm": "「{{name}}」を削除してもよろしいですか? インポート済みデータに影響はありません。",
+ "connectorDeleted": "コネクタ「{{name}}」を削除しました",
+ "failedDeleteConnector": "コネクタの削除に失敗しました",
+ "deletingEllipsis": "削除しています...",
+ "deleteConfirmBtn": "削除します",
+ "searchTables": "テーブルを検索します...",
+ "addFilter": "フィルターを追加します",
+ "filterColumn": "列",
+ "filterValue": "値",
+ "filterValueTo": "終了値",
+ "filterValueSearch": "入力して検索します",
+ "filterOptionsTruncated": "結果は切り詰められています、入力して絞り込みます",
+ "noValueNeeded": "値は不要です",
+ "opBetween": "BETWEEN",
+ "opContains": "CONTAINS",
+ "refreshPreview": "プレビューします",
+ "noMatchingRows": "現在のフィルターに一致する行がありません",
+ "knowledge": "ナレッジ",
+ "metadataPartial": "部分的なメタデータ",
+ "metadataUnavailable": "メタデータを利用できません",
+ "largeTableChatPrompt": "「{{connector}}」から以下のテーブルを読み込みたいです: {{tables}}。全件インポートには大きすぎます: {{large}}。テーブル全体ではなく、フィルター・サンプル・集計したサブセットの読み込みを手伝ってください。",
+ "semanticFieldCounts": "{{measures}} メジャー · {{dimensions}} ディメンション",
+ "semanticModelSummary": "セマンティックモデル · {{measures}} メジャー · {{dimensions}} ディメンション",
+ "semanticSampleCaption": "サンプル: 少数のディメンションによる少数のメジャー",
+ "semanticAddToWorkspace": "ワークスペースに追加します",
+ "semanticTag": "モデル",
+ "openInDataView": "データビューで開きます",
+ "saving": "保存しています...",
+ "rename": "名前を変更します",
+ "exportSession": "エクスポートします",
+ "exportFailed": "セッションのエクスポートに失敗しました",
+ "importFailed": "ワークスペースのインポートに失敗しました",
+ "failedRenameSession": "セッションの名前変更に失敗しました",
+ "sortNewest": "新しい順",
+ "sortOldest": "古い順",
+ "sortRecentlyModified": "最近更新順",
+ "sortName": "名前順",
+ "sortNewestFirst": "新しい順",
+ "sortOldestFirst": "古い順",
+ "sortRecentlyModifiedFirst": "最近更新順",
+ "sortNameAsc": "名前順(a–z)",
+ "sortSessions": "セッションを並べ替えます",
+ "organizeSessions": "セッションをグループ化・並べ替えます",
+ "groupSessions": "グループ化します",
+ "groupBySource": "データソース",
+ "groupSourceShort": "ソース",
+ "noGrouping": "グループ化なし",
+ "sourceUpload": "アップロード",
+ "sourceExampleDatasets": "サンプルデータセット",
+ "sourceNoData": "データなし",
+ "sourceOther": "その他",
+ "runCatalogSearch": "検索します",
+ "clearCatalogSearch": "検索をクリアします",
+ "timeJustNow": "たった今",
+ "timeMinutes": "{{count}}分",
+ "timeHours": "{{count}}時間",
+ "timeYesterday": "昨日",
+ "timeDays": "{{count}}日"
+ },
+ "knowledge": {
+ "title": "エージェントナレッジ",
+ "rules": "ルール",
+ "workflows": "ワークフロー",
+ "rulesDescription": "エージェントが従うべき制約と基準です",
+ "workflowsDescription": "過去セッションから抽出した再利用可能な分析ワークフローで、エージェントが保存・再実行できます",
+ "newItem": "新規",
+ "search": "検索します",
+ "searchPlaceholder": "ナレッジを検索します...",
+ "noItems": "まだアイテムがありません",
+ "noSearchResults": "結果が見つかりませんでした",
+ "editTitle": "ナレッジを編集します",
+ "fileName": "ファイル名",
+ "fileNamePlaceholder": "例: my-rule.md",
+ "content": "コンテンツ",
+ "tags": "タグ",
+ "tagsPlaceholder": "カンマ区切りタグ",
+ "source": "ソース",
+ "sourceManual": "手動",
+ "sourceAgent": "エージェント要約",
+ "save": "保存します",
+ "saving": "保存しています...",
+ "saved": "ナレッジを保存しました",
+ "deleted": "ナレッジを削除しました",
+ "deleteConfirm": "「{{title}}」を削除しますか?",
+ "deleteConfirmBody": "この操作は元に戻せません。",
+ "failedToLoad": "ナレッジの読み込みに失敗しました",
+ "failedToSave": "ナレッジの保存に失敗しました",
+ "failedToDelete": "ナレッジの削除に失敗しました",
+ "failedToSearch": "検索に失敗しました",
+ "saveAsExperience": "ワークフローとして保存します",
+ "saveAsExperienceTitle": "ワークフローとして保存します",
+ "distillHint": "この分析からワークフローを抽出し、エージェントが将来のセッションで保存・再実行できるようにします。",
+ "distillFromHeading": "抽出元",
+ "distillFromCaption": "下のスレッドはLLMに送信されます。スレッドをクリックしてイベントを確認します。",
+ "distillingOverlay": "ワークフローを抽出しています… しばらくかかる場合があります。",
+ "userInstruction": "ユーザー指示(任意)",
+ "userInstructionPlaceholder": "重視点、除外点…",
+ "distillationInstructions": "抽出指示(任意)",
+ "distillationInstructionsPlaceholder": "例:データクレンジング手順に焦点を当てる、探索的なチャートのバリエーションは除外する、テーブル結合で躓いた点を強調する…",
+ "distillWorkflow": "ワークフローを抽出します",
+ "distillStarted": "ワークフローを抽出しています...",
+ "distilling": "ワークフローを抽出しています...",
+ "distilled": "ワークフローを保存しました",
+ "distillFailedRetry": "保存に失敗しました、再試行します",
+ "failedToDistill": "ワークフローの抽出に失敗しました",
+ "distillSessionTitle": "セッションワークフローを抽出します",
+ "updateSessionTitle": "セッションワークフローを更新します",
+ "distillSessionHint": "この分析を、エージェントが再実行できる再利用可能なワークフロードキュメントに抽出します。",
+ "distillSessionUpdateHint": "この分析を既存のワークフロードキュメントに再抽出します。",
+ "distillSessionNothing": "このセッションには完了した分析スレッドがまだありません。",
+ "distillFromSession": "このセッションから抽出します",
+ "workflowPlaceholderHint": "この分析をワークフローとして保存します",
+ "updateFromSession": "このセッションから更新します",
+ "updateFromSessionHint": "新しい学びで更新します",
+ "addNewRule": "新しいルールを追加します",
+ "addNewRuleHint": "エージェントの規約を設定します",
+ "updateSession": "更新します",
+ "updateSessionTooltip": "このセッションから更新します",
+ "sessionStatsLine": "セッション · {{threads}} スレッド · {{steps}} 手順",
+ "threadHeader": "スレッド {{idx}} · {{label}}",
+ "threadStepBadge": "{{steps}} 手順",
+ "itemCount": "({{count}})",
+ "collapse": "折りたたみます",
+ "expand": "展開します",
+ "emptyState": "AIエージェントの働きを良くするルールやワークフローを追加します。",
+ "rulesHint": "エージェントが従うべきルールを指定します。",
+ "workflowsHint": "分析を再利用可能なワークフローに抽出します。新しいコンテキストで再実行します。",
+ "markdownEditor": "Markdownエディター",
+ "description": "説明",
+ "descriptionPlaceholder": "このルールの短い概要(最大 {{max}} 文字)",
+ "alwaysApply": "常にAIに読み込ませます",
+ "alwaysApplyHint": "有効にすると、このルールはコンテキストにかかわらず、すべてのAIエージェントのプロンプトに常に挿入されます",
+ "charCount": "{{current}} / {{max}}",
+ "charCountExceeded": "{{max}} 文字の上限を超えています({{current}} / {{max}})",
+ "replay": "再実行します",
+ "replayTooltip": "この分析を現在のデータで再実行します",
+ "replayBusy": "エージェントは実行中です — 再実行する前に終了を待ちます。",
+ "replayNoData": "ワークフローを再実行する前にデータセットを読み込みます。",
+ "replayStarted": "現在のデータでワークフローを再実行しています…",
+ "deleteItem": "削除します",
+ "threadExpand": "スレッドを展開します",
+ "threadCollapse": "スレッドを折りたたみます",
+ "replayPrompt": "現在読み込んでいるデータで、以下の分析ワークフローを再現します。手順に沿って進め、列参照は現在のデータセットで利用可能な列に合わせます。結果が同一でなくても構いません — 全体として同じ分析を再現します。\n\n大きな仮定を置く前に、現在のデータが本当にそのワークフローを支えられるか確認します。大きな相違がある場合 — 例:必須フィールドやメジャーがない、粒度や形状が大きく異なる、手順に相当するものがデータにない — 推測せず、一時停止して進め方を確認してもらうか(または不一致と提案する適応を簡潔に説明し)、確認を求めます。小さな違い(列名変更、列追加)は黙って適応します。\n\n{{content}}"
+ }
+}
diff --git a/src/i18n/locales/ja/dataLoading.json b/src/i18n/locales/ja/dataLoading.json
new file mode 100644
index 00000000..e4438882
--- /dev/null
+++ b/src/i18n/locales/ja/dataLoading.json
@@ -0,0 +1,115 @@
+{
+ "dataLoading": {
+ "title": "データ読み込みアシスタント",
+ "subtitle": "データの抽出、生成、参照をお手伝いします — 何でもお尋ねください。",
+ "capabilityAsk": "接続済みデータソースについて質問します",
+ "capabilitySearch": "厳選サンプルデータセットを検索・参照します",
+ "capabilityExtractImage": "画像から構造化データを抽出します",
+ "capabilityExtractFile": "PDFや貼り付けテキストからデータを抽出します",
+ "capabilityHint": "下の入力にフォーカスするとプロンプト例が表示されます。",
+ "newRequestDivider": "新しいリクエスト",
+ "continueFromSection": "このセクションから続けます",
+ "continueTask": "続けます",
+ "previewShowingRows": "{{total}} 行中 {{shown}} 行を表示しています",
+ "previewShowingFirstRows": "最初の {{shown}} 行を表示しています",
+ "sectionTry": "タスクを試します",
+ "sectionChat": "または気軽に質問します",
+ "chatHint": "",
+ "chatHintExample": "ここにはどんなデータがありますか?",
+ "placeholder": "抽出・アップロード・生成するデータを説明します...",
+ "attachTooltip": "ファイルまたは画像を添付します",
+ "stopTooltip": "生成を停止します",
+ "sendTooltip": "送信します (Enter)",
+ "shiftEnterHint": "Shift+Enterで改行します",
+ "canvasConnection": "接続設定",
+ "canvasLoadPlan": "テーブル読み込みプラン",
+ "canvasClose": "閉じます",
+ "canvasOpen": "開きます",
+ "canvasView": "表示します",
+ "canvasReview": "確認します",
+ "canvasConnectCaption": "接続の詳細を入力します",
+ "canvasPlanCaption": "{{count}} 個のテーブルを提案しています",
+ "canvasPlanLoaded": "読み込み済み",
+ "canvasRow": "{{formatted}} 行",
+ "canvasRows": "{{formatted}} 行",
+ "canvasSourceLabel": "ソース",
+ "canvasPythonSource": "Python",
+ "canvasExtractedSource": "抽出済み",
+ "canvasMoreTables": "他に {{count}} 件",
+ "load": "読み込みます",
+ "loadTable": "テーブルを読み込みます",
+ "loadAllTables": "{{count}} 個のテーブルをすべて読み込みます",
+ "ranPythonCode": "Pythonコードを実行しました",
+ "error": "エラー",
+ "rows": "行",
+ "cols": "列",
+ "showRawData": "生のメッセージデータを表示します",
+ "stopped": "— 停止しました",
+ "uploaded": "[アップロード済み: {{name}}]",
+ "defaultImageMessage": "この画像からデータを抽出します",
+ "syncInProgress": "カタログメタデータを同期しています…",
+ "syncComplete": "カタログの同期が完了しました",
+ "syncPartial": "カタログの同期は一部完了しました — 一部メタデータが不足している場合があります",
+ "metadataStatusSynced": "同期済み",
+ "metadataStatusPartial": "一部",
+ "metadataStatusUnavailable": "利用不可",
+ "metadataStatusNotSynced": "未同期",
+ "loadPlan": {
+ "filters": "フィルター",
+ "filtersLabel": "フィルター:",
+ "rowLimit": "行数上限",
+ "loadSelected": "選択を読み込みます",
+ "loadInNewWorkspace": "新しいワークスペースに読み込みます",
+ "addToCurrent": "現在のワークスペースに追加します",
+ "loadedCount": "✓ {{count}} テーブルを読み込みました",
+ "loadedCount_plural": "✓ {{count}} テーブルを読み込みました",
+ "preview": "プレビュー",
+ "hidePreview": "非表示にします",
+ "previewing": "プレビューしています...",
+ "previewFailed": "プレビューに失敗しました",
+ "retryPreview": "再試行します",
+ "reconnectAndRetry": "再接続します",
+ "fromSource": "ソースから"
+ },
+ "operation": {
+ "virtualSource": "{{name}}: 仮想ソース(行はリモートに残ります)",
+ "title": "データ読み込みオプション",
+ "previewHeading": "読み込むテーブル",
+ "previewGuide": "ワークスペースに追加する前に各テーブルをプレビューします。",
+ "previewColumns": "{{count}} 列",
+ "previewColumns_plural": "{{count}} 列",
+ "previewShowingRows": "{{count}} 行を表示しています",
+ "previewShowingRows_plural": "{{count}} 行を表示しています",
+ "previewUnavailable": "プレビューを利用できません",
+ "reconnectSource": "接続を確認します",
+ "failedSteps": "{{count}} テーブルを読み込めませんでした",
+ "failedSteps_plural": "{{count}} テーブルを読み込めませんでした",
+ "partialFailure": "一部のデータを読み込みましたが、{{count}} 個のテーブルで失敗しました。",
+ "partialFailure_plural": "一部のデータを読み込みましたが、{{count}} 個のテーブルで失敗しました。"
+ },
+ "toolLabels": {
+ "readingFile": "ファイルを読み取っています",
+ "writingFile": "ファイルを書き込んでいます",
+ "listingFiles": "ファイルを一覧表示しています",
+ "runningPython": "Pythonを実行しています",
+ "preparingPreview": "プレビューを準備しています",
+ "summarizingSources": "接続済みデータを要約しています",
+ "browsingCatalog": "参照しています",
+ "searchingData": "検索しています",
+ "describingData": "テーブルを読み取っています",
+ "probingData": "調査しています",
+ "proposingLoadPlan": "読み込みプランを提案しています"
+ },
+ "examples": {
+ "extractFromImage": "画像からデータを抽出します",
+ "extractFromImageExample": "この画像から売上データを抽出します",
+ "extractFromText": "テキストからデータを抽出します",
+ "extractFromTextExample": "このテキストから売上成長データを抽出します: Business Highlights ...",
+ "extractFromTextPrompt": "Extract revenue growth data from this text:\n\nBusiness Highlights\n\nMicrosoft Cloud revenue was $51.5 billion and increased 26% (up 24% in constant currency), and commercial remaining performance obligation increased 110% to $625 billion.\n\nRevenue in Productivity and Business Processes was $34.1 billion and increased 16% (up 14% in constant currency), with the following business highlights:\n\n· Microsoft 365 Commercial cloud revenue increased 17% (up 14% in constant currency)\n\n· Microsoft 365 Consumer cloud revenue increased 29% (up 27% in constant currency)\n\n· LinkedIn revenue increased 11% (up 10% in constant currency)\n\n· Dynamics 365 revenue increased 19% (up 17% in constant currency)\n\nRevenue in Intelligent Cloud was $32.9 billion and increased 29% (up 28% in constant currency), with the following business highlights:\n\n· Azure and other cloud services revenue increased 39% (up 38% in constant currency)\n\nRevenue in More Personal Computing was $14.3 billion and decreased 3%, with the following business highlights:\n\n· Windows OEM and Devices revenue increased 1% (relatively unchanged in constant currency)\n\n· Xbox content and services revenue decreased 5% (down 6% in constant currency)\n\n· Search and news advertising revenue excluding traffic acquisition costs increased 10% (up 9% in constant currency)\n\nMicrosoft returned $12.7 billion to shareholders in the form of dividends and share repurchases in the second quarter of fiscal year 2026, an increase of 32% compared to the second quarter of fiscal year 2025.",
+ "generateSynthetic": "合成データを生成します",
+ "generateSyntheticExample": "20行のUK王朝データセットを生成します",
+ "browseSamples": "サンプルデータセットを参照します",
+ "browseSamplesExample": "利用可能なサンプルデータセットは何ですか?"
+ }
+ }
+}
diff --git a/src/i18n/locales/ja/encoding.json b/src/i18n/locales/ja/encoding.json
new file mode 100644
index 00000000..16edfd87
--- /dev/null
+++ b/src/i18n/locales/ja/encoding.json
@@ -0,0 +1,84 @@
+{
+ "encoding": {
+ "dataType": "データ型",
+ "stack": "スタック",
+ "sortBy": "並べ替え基準",
+ "sortOrder": "並べ替え順",
+ "colorScheme": "配色",
+ "smartSort": "スマートな並べ替え順を推測する",
+ "ascending": "昇順",
+ "descending": "降順",
+ "normalize": "正規化",
+ "aggregate": "集計",
+ "bin": "ビン",
+ "field": "フィールド",
+ "channel": "チャネル",
+ "xAxis": "X軸",
+ "yAxis": "Y軸",
+ "color": "色",
+ "size": "サイズ",
+ "shape": "形状",
+ "tooltip": "ツールチップ",
+ "auto": "自動",
+ "default": "既定",
+ "layered": "レイヤー",
+ "center": "中央",
+ "rerunSmartSort": "スマートソートを再実行します",
+ "fieldPlaceholder": "フィールド",
+ "newFieldNamePlaceholder": "新しいフィールド名を入力します",
+ "createNewFieldGroup": "新しいフィールドを作成します",
+ "axisSettings": "軸の設定",
+ "legends": "凡例",
+ "facets": "ファセット",
+ "dataFields": "データフィールド",
+ "editor": "エディター",
+ "ideas": "アイデア",
+ "ideasHeading": "探索の方向性の例:",
+ "getIdeas": "アイデアを取得します",
+ "getIdeasQuestion": "アイデアを取得しますか?",
+ "differentIdeas": "別のアイデアを表示しますか?",
+ "formulateData": "データを定式化します",
+ "ideating": "アイデアを作成しています...",
+ "formulateAndOverride": "定式化して上書きします",
+ "formulate": "定式化します",
+ "whatDoYouWantToVisualize": "何を可視化しますか?",
+ "getIdeasForVisualization": "可視化のアイデアを取得します",
+ "channelX": "x軸",
+ "channelY": "y軸",
+ "channelColor": "色",
+ "channelSize": "サイズ",
+ "channelShape": "形状",
+ "channelTooltip": "ツールチップ",
+ "channelOpacity": "不透明度",
+ "channelColumn": "列",
+ "channelRow": "行",
+ "channelDetail": "詳細",
+ "channelGroup": "グループ",
+ "channelRadius": "半径",
+ "channelStrokeDash": "破線",
+ "channelX_tip": "データを水平位置にマッピングします",
+ "channelY_tip": "データを垂直位置にマッピングします",
+ "channelColor_tip": "データを色やカテゴリにマッピングします",
+ "channelSize_tip": "データを要素のサイズにマッピングします",
+ "channelShape_tip": "データをマーカーの形状にマッピングします",
+ "channelOpacity_tip": "データを透明度にマッピングします",
+ "channelColumn_tip": "チャートを列に分割します(水平ファセット)",
+ "channelRow_tip": "チャートを行に分割します(垂直ファセット)",
+ "channelDetail_tip": "視覚エンコーディングを伴わない追加のグループ化です",
+ "channelGroup_tip": "データ要素をグループ化します",
+ "channelRadius_tip": "データを放射方向の距離にマッピングします",
+ "channelStrokeDash_tip": "データを線の破線パターンにマッピングします",
+ "ascShort": "↑ 昇順",
+ "descShort": "↓ 降順",
+ "sortOrderLabel": "並べ替え順:",
+ "autoSortFailed": "自動ソートを実行できませんでした。",
+ "autoSortServerError": "サーバーの問題により自動ソートを実行できませんでした。",
+ "followUpChartPlaceholder": "チャートのスタイルを更新するか、追加分析を行います",
+ "refreshIdeas": "アイデアを更新します",
+ "stylePresetsTooltip": "チャートのスタイルを変更…",
+ "stylePresetsHeader": "チャートのスタイルを変更",
+ "stylePresetsHint": "または入力ボックスでスタイルを指定します — 例: 「ティール系パレットを使う」「タイトルを太字にする」「軸ラベルを回転する」「ピークに注釈を付ける」。",
+ "formulationSucceeded": "{{fields}} のデータ定式化に成功しました。",
+ "formulationFailed": "データ定式化に失敗しました。"
+ }
+}
diff --git a/src/i18n/locales/ja/errors.json b/src/i18n/locales/ja/errors.json
new file mode 100644
index 00000000..2f525f14
--- /dev/null
+++ b/src/i18n/locales/ja/errors.json
@@ -0,0 +1,38 @@
+{
+ "errors": {
+ "authRequired": "認証が必要です",
+ "authExpired": "セッションの有効期限が切れました — もう一度ログインしてください",
+ "accessDenied": "アクセスが拒否されました",
+
+ "invalidRequest": "無効なリクエストです",
+ "tableNotFound": "テーブルが見つかりません",
+ "fileParseError": "アップロードされたファイルの解析に失敗しました",
+ "fileTooLarge": "ファイルが大きすぎます",
+ "validationError": "検証エラーです",
+
+ "llmAuthFailed": "認証に失敗しました — APIキーをご確認ください",
+ "llmRateLimit": "レート制限を超えました — しばらく待ってからもう一度お試しください",
+ "llmContextTooLong": "入力が長すぎます — データサイズまたはプロンプトの長さを減らしてください",
+ "llmModelNotFound": "モデルが見つかりません — モデル名をご確認ください",
+ "llmTimeout": "リクエストがタイムアウトしました — 接続をご確認のうえ、もう一度お試しください",
+ "llmServiceError": "モデルサービスからエラーが返されました — しばらくしてからもう一度お試しください",
+ "llmContentFiltered": "リクエストはコンテンツセーフティフィルターによってブロックされました",
+ "llmUnknownError": "モデルのリクエストに失敗しました",
+
+ "connectorAuthFailed": "データソースの認証に失敗しました",
+ "dbConnectionFailed": "データソースへの接続に失敗しました",
+ "dbQueryError": "データベースクエリエラーです",
+ "dataLoadError": "データの読み込みに失敗しました",
+ "connectorError": "データコネクタエラーです",
+
+ "codeExecutionError": "コードの実行中にエラーが発生しました",
+ "agentError": "エージェントでエラーが発生しました",
+
+ "catalogSyncTimeout": "カタログの同期がタイムアウトしました — もう一度お試しください",
+ "catalogNotFound": "コネクタが見つからないか、接続されていません",
+
+ "internalError": "予期しないエラーが発生しました",
+ "serviceUnavailable": "サービスは一時的にご利用いただけません",
+ "storageFull": "ワークスペースの容量がいっぱいです。ディスク容量を空けてからもう一度お試しください。"
+ }
+}
diff --git a/src/i18n/locales/ja/index.ts b/src/i18n/locales/ja/index.ts
new file mode 100644
index 00000000..051f1644
--- /dev/null
+++ b/src/i18n/locales/ja/index.ts
@@ -0,0 +1,26 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+import common from './common.json';
+import upload from './upload.json';
+import chart from './chart.json';
+import model from './model.json';
+import encoding from './encoding.json';
+import messages from './messages.json';
+import navigation from './navigation.json';
+import dataLoading from './dataLoading.json';
+import loader from './loader.json';
+import errors from './errors.json';
+
+export default {
+ ...common,
+ ...upload,
+ ...chart,
+ ...model,
+ ...encoding,
+ ...messages,
+ ...navigation,
+ ...dataLoading,
+ ...loader,
+ ...errors,
+};
diff --git a/src/i18n/locales/ja/loader.json b/src/i18n/locales/ja/loader.json
new file mode 100644
index 00000000..de9aa049
--- /dev/null
+++ b/src/i18n/locales/ja/loader.json
@@ -0,0 +1,116 @@
+{
+ "loader": {
+ "mysql": {
+ "user": "MySQLユーザー名",
+ "password": "パスワードを設定していない場合は空欄にします",
+ "host": "サーバーアドレス",
+ "port": "サーバーポート",
+ "database": "データベース名(すべてのデータベースを参照する場合は空欄にします)",
+ "authInstructions": "**例:** user: `root` · host: `localhost` · port: `3306` · database: `mydb`\n\n**ローカル設定:** MySQLが起動していることを確認します — `brew services list`(macOS)または `systemctl status mysql`(Linux)。パスワード未設定の場合は空欄にします。\n\n**リモート設定:** ホスト、ポート、ユーザー名、パスワードをデータベース管理者から取得します。サーバーがリモート接続を許可し、お客様のIPがホワイトリストに登録されていることを確認します。\n\n**範囲:** *database* を空にするとサーバー上のすべてのデータベースを参照でき、入力するとそのデータベースのテーブルに直接移動します。\n\n**トラブルシューティング:** `mysql -u -p -h -P ` でテストします"
+ },
+ "mssql": {
+ "server": "SQL Serverのホストアドレスまたはインスタンス名",
+ "database": "データベース名(すべてのデータベースを参照する場合は空欄にします)",
+ "user": "ユーザー名(Entra ID / Windows認証の場合は空欄にします)",
+ "password": "パスワード(Entra ID / Windows認証の場合は空欄にします)",
+ "port": "SQL Serverポート(既定: 1433)",
+ "encrypt": "暗号化を有効にします(yes/no)",
+ "trust_server_certificate": "サーバー証明書を信頼します(yes/no)",
+ "connection_timeout": "接続タイムアウト(秒)",
+ "authInstructions": "**Microsoft Entra ID(推奨):** ターミナルで一度 `az login` を実行してからData Formulatorを起動します。*Microsoft Entra ID* を選び、`server` と(任意で)`database` のみ入力し、ユーザー名・パスワードは空にします — Azure CLIの資格情報が自動的に使われます。Managed Identity、VS Code、環境資格情報も `DefaultAzureCredential` 経由で動作します。\n\n> Entra IDにはデータベースへのアクセス許可が必要です。例: 管理者が `CREATE USER [you@contoso.com] FROM EXTERNAL PROVIDER;` を実行し、必要なロールを付与します。\n\n**例(Entra ID):** server: `myserver.database.windows.net` · database: `mydb`(ユーザー名・パスワードは空)\n\n**SQL Server認証:** *SQL Server認証* を選び、ユーザー名とパスワードを入力します。\n\n**例(SQL認証):** server: `localhost` · database: `mydb` · user: `sa` · password: `MyP@ss` · port: `1433`\n\n**Windows認証(Windowsのみ):** *Windows認証* を選び、ユーザー名・パスワードは空にします。\n\n**ドライバー:** Microsoft SQL ServerドライバーはData Formulatorに同梱されています。ODBCの個別インストールは不要です。Entra IDではAzure CLIをインストールして `az login` を実行します。\n\n**トラブルシューティング:** `az account show` でサインインを確認します。SQL Serverサービスが起動し、TCP/IPが有効であることを確認します。SQL認証は `sqlcmd -S -d -U -P ` でテストします。"
+ },
+ "postgresql": {
+ "user": "PostgreSQLユーザー名",
+ "password": "パスワードを設定していない場合は空欄にします",
+ "host": "PostgreSQLホスト",
+ "port": "PostgreSQLポート",
+ "database": "データベース名(すべてのデータベースを参照する場合は空欄にします)",
+ "authInstructions": "**例:** user: `postgres` · host: `localhost` · port: `5432` · database: `mydb`\n\n**ローカル設定:** PostgreSQLが起動していることを確認します — `brew services list`(macOS)または `systemctl status postgresql`(Linux)。パスワード未設定の場合は空欄にします。\n\n**リモート設定:** ホスト、ポート、ユーザー名、パスワードをデータベース管理者から取得します。アクセスしたいテーブルに対するSELECT権限がユーザーに必要です。\n\n**範囲:** *database* を空にするとサーバー上のすべてのデータベースを参照でき、入力するとそのデータベースのスキーマ・テーブルに直接移動します。\n\n**トラブルシューティング:** `psql -U -h -p -d ` でテストします"
+ },
+ "mongodb": {
+ "host": "サーバーアドレス",
+ "port": "サーバーポート",
+ "username": "認証を使用しない場合は空欄にします",
+ "password": "認証を使用しない場合は空欄にします",
+ "database": "データベース名",
+ "collection": "すべてのコレクションを一覧表示する場合は空欄にします",
+ "authSource": "認証データベース(既定は対象データベース)",
+ "authInstructions": "**例:** host: `localhost` · port: `27017` · database: `mydb` · collection: `users`\n\n**ローカル設定:** MongoDBが起動していることを確認します。認証が有効でない場合はユーザー名とパスワードを空欄にします。\n\n**リモート設定:** ホスト、ポート、ユーザー名、パスワードをデータベース管理者から取得します。\n\n**トラブルシューティング:** `mongosh --host --port ` でテストします"
+ },
+ "cosmosdb": {
+ "endpoint": "Cosmos DBアカウントのエンドポイントURL",
+ "key": "アカウントキーまたはエミュレーターキー",
+ "database": "データベース名",
+ "container": "すべてのコンテナーを一覧表示する場合は空欄にします",
+ "authInstructions": "**例:** endpoint: `https://myaccount.documents.azure.com:443/` · database: `mydb`\n\n**Azure設定:** Cosmos DBアカウントのAzure Portalの *Keys* でエンドポイントとキーを確認します。\n\n**ローカルエミュレーター:** 既知のエミュレーターキーとエンドポイント `https://localhost:8081` を使います。\n\n**トラブルシューティング:** アカウントのファイアウォールがお客様のIPを許可しているか、許可済みネットワークから接続しているか確認します。"
+ },
+ "bigquery": {
+ "project_id": "Google CloudプロジェクトID",
+ "dataset_id": "データセットID — 空の場合はすべて、カンマ区切りで1件以上指定できます",
+ "credentials_path": "サービスアカウントJSONファイルのパス(任意)",
+ "location": "BigQueryのロケーション(既定:US)",
+ "authInstructions": "**例:** project_id: `my-gcp-project` · dataset_id: `analytics` · credentials_path: `/path/to/key.json` · location: `US`\n\n**方法1 — アプリケーションの既定の認証情報(推奨):**\n[Google Cloud SDK](https://cloud.google.com/sdk/docs/install) をインストールして `gcloud auth application-default login` を実行します。`credentials_path` は空にします。\n\n**方法2 — サービスアカウントキーファイル:**\nGoogle Cloud Consoleでサービスアカウントを作成し、JSONキーをダウンロードしてフルパスを `credentials_path` に入力します。アカウントに **BigQuery Data Viewer** と **BigQuery Job User** ロールを付与します。\n\n**方法3 — 環境変数:**\nサービスアカウントJSONファイルのパスを `GOOGLE_APPLICATION_CREDENTIALS` に設定します。`credentials_path` は空にします。"
+ },
+ "athena": {
+ "aws_profile": "~/.aws/credentials のAWSプロファイル名(設定時はアクセスキーとシークレットは不要です)",
+ "aws_access_key_id": "AWSアクセスキーID(aws_profile使用時は不要です)",
+ "aws_secret_access_key": "AWSシークレットアクセスキー(aws_profile使用時は不要です)",
+ "aws_session_token": "AWSセッショントークン(一時認証情報に必要です)",
+ "region_name": "AWSリージョン名",
+ "workgroup": "Athenaワークグループ名(出力先はワークグループ設定から取得されます)",
+ "output_location": "クエリ結果のS3出力先(例:s3://bucket/path/)。空欄の場合はワークグループ設定を使用します。",
+ "database": "クエリに使用する既定のデータベース・カタログ",
+ "query_timeout": "クエリ実行タイムアウト(秒)(既定:300 = 5分)",
+ "authInstructions": "**例(プロファイル):** aws_profile: `default` · region_name: `us-east-1` · workgroup: `primary` · database: `my_database`\n\n**例(キー):** aws_access_key_id: `AKIA...` · aws_secret_access_key: `wJalr...` · region_name: `us-east-1`\n\n**方法1 — AWSプロファイル(推奨):**\n`aws_profile` に `~/.aws/credentials` のプロファイル名を設定します。`aws configure --profile ` で設定します。アクセスキーやシークレットは不要です。\n\n**方法2 — 明示的な認証情報:**\n`aws_access_key_id` と `aws_secret_access_key` を直接入力します。一時認証情報には `aws_session_token` を追加します。\n\n**必要なIAM権限:** `athena:StartQueryExecution`、`athena:GetQueryExecution`、`athena:GetQueryResults`、`athena:GetWorkGroup`、`athena:ListDatabases`、`athena:ListTableMetadata`、およびデータ・結果バケットへのS3・Glue権限。"
+ },
+ "kusto": {
+ "kusto_cluster": "例: https://mycluster.region.kusto.windows.net",
+ "kusto_database": "データベース名(必須)",
+ "client_id": "サービスプリンシパルのみ",
+ "client_secret": "サービスプリンシパルのみ",
+ "tenant_id": "サービスプリンシパルのみ",
+ "authInstructions": "**方法1 — Microsoftでサインイン(推奨):** ご自身でサインインし、既存のKusto権限を使います。この方法はサーバーに `KUSTO_OAUTH_CLIENT_ID` が構成されている場合に表示されます。\n\n**方法2 — Azure既定のID:** Azure CLIログイン(`az login`)、Managed Identity、VS Code資格情報、環境資格情報を使います。\n\n**方法3 — サービスプリンシパル:** クラスターアクセス権を持つサービスプリンシパルの `client_id`、`client_secret`、`tenant_id` を指定します。\n\nすべてのIDは選択したKustoデータベースへのデータプレーンアクセスを事前に持っている必要があります。"
+ },
+ "databricks": {
+ "server_hostname": "例: adb-1234567890.11.azuredatabricks.net",
+ "http_path": "SQLウェアハウスのHTTPパス、例: /sql/1.0/warehouses/abc123",
+ "catalog": "Unity Catalog名(すべてのカタログを参照する場合は空にします)",
+ "schema": "スキーマ名(カタログ内のすべてのスキーマを参照する場合は空にします)",
+ "access_token": "Databricks個人アクセストークン(dapi...)",
+ "authInstructions": "**確認場所:** Databricksワークスペースで **SQL → SQL Warehouses**(左サイドバー)を開き、ウェアハウスをクリックして **Connection details** タブを開きます — **Server hostname** と **HTTP path** をコピーします。\n\n**アクセストークン:** アバター(右上)をクリック → **Settings → Developer → Access tokens → Generate new token**。`dapi` で始まり、一度だけ表示されます。\n\n**権限:** トークンのユーザーには読み取りたいUnity Catalogオブジェクトへの `USE CATALOG` / `USE SCHEMA` と `SELECT` が必要です。\n\n**範囲:** *catalog* と *schema* を空にするとアクセス可能なすべてを参照でき、設定すると特定カタログ・スキーマに直接移動します — 例: 組み込み `samples` カタログ → `nyctaxi` → `trips` をお試しください。\n\n**アカウントをお持ちでない場合:** Databricks Free Editionはサーバーレスで無料、`samples` カタログ付きです — クラスターやウェアハウスの設定は不要です。"
+ },
+ "superset": {
+ "url": "SupersetベースURL(例: https://bi.company.com)",
+ "username": "Supersetユーザー名(SSO利用時は任意です)",
+ "password": "Supersetパスワード(SSO利用時は任意です)",
+ "authInstructions": "**例:** url: `https://bi.company.com` · username: `admin` · password: `***`\n\n**設定:** SupersetインスタンスのベースURLと、少なくとも **Gamma** ロール(データセット読み取り権限)を持つユーザーの資格情報を指定します。\n\n**SSO:** SupersetでSSOを使う場合はパスワード認証ではなくSSOブリッジフローを使います(`PLG_SUPERSET_SSO_LOGIN_URL` で構成します)。"
+ },
+ "azure_blob": {
+ "account_name": "Azureストレージアカウント名",
+ "container_name": "Azure Blobコンテナー名",
+ "connection_string": "Azureストレージ接続文字列(account_name + 資格情報の代替)",
+ "credential_chain": "Azure資格情報プロバイダーの順序付き一覧(cli;managed_identity;env)",
+ "account_key": "Azureストレージアカウントキー",
+ "sas_token": "Azure SASトークン",
+ "endpoint": "Azureエンドポイントの上書き",
+ "authInstructions": "**例(接続文字列):** connection_string: `DefaultEndpointsProtocol=https;AccountName=...` · container_name: `mydata`\n\n**例(アカウントキー):** account_name: `mystorageacct` · container_name: `mydata` · account_key: `abc123...`\n\n**方法1 — 接続文字列(最も簡単):**\nAzure Portal → Storage Account → Access keysから取得します。`connection_string` に入力します。`account_name` は省略できます。\n\n**方法2 — アカウントキー:**\nAzure Portal → Storage Account → Access keysから取得します。`account_name` + `account_key` を使います。\n\n**方法3 — SASトークン(制限付きアクセスに推奨):**\nAzure Portal → Storage Account → Shared access signatureから生成します。`account_name` + `sas_token` を使います。期限や権限を限定できます。\n\n**方法4 — Azure CLI / Managed Identity(最も安全):**\n`account_name` + `container_name` のみ指定します。`az login` またはManaged Identityが必要です。\n\n**対応形式:** CSV、Parquet、JSON、JSONL"
+ },
+ "s3": {
+ "aws_access_key_id": "AWSアクセスキーID",
+ "aws_secret_access_key": "AWSシークレットアクセスキー",
+ "aws_session_token": "AWSセッショントークン(一時認証情報に必要です)",
+ "region_name": "AWSリージョン名",
+ "bucket": "S3バケット名",
+ "authInstructions": "**例:** aws_access_key_id: `AKIA...` · aws_secret_access_key: `wJalr...` · region_name: `us-east-1` · bucket: `my-data-bucket`\n\n**認証情報の取得:** AWS Console → IAM → Users → Security credentials → Create access key → 「Application running outside AWS」を選びます。\n\n**必要な権限:** バケットへの `s3:GetObject` と `s3:ListBucket`。\n\n**対応形式:** CSV、Parquet、JSON、JSONL"
+ },
+ "local_folder": {
+ "root_dir": "参照するローカルディレクトリの絶対パス",
+ "recursive": "サブディレクトリ内のファイルを含めます",
+ "file_pattern": "ファイルを絞り込むグロブパターン(例: '*.csv')",
+ "authInstructions": "`root_dir` にデータファイルを含むローカルディレクトリを指定します。\n\n**対応形式:** CSV、TSV、Parquet、JSON、JSONL、Excel(.xlsx/.xls)\n\n**参照** をクリックしてフォルダーピッカーを開くか、ディレクトリパスを貼り付けます。"
+ },
+ "_common": {
+ "table_filter": "キーワードでテーブルを絞り込みます(例: 'sales')"
+ }
+ }
+}
diff --git a/src/i18n/locales/ja/messages.json b/src/i18n/locales/ja/messages.json
new file mode 100644
index 00000000..a8172292
--- /dev/null
+++ b/src/i18n/locales/ja/messages.json
@@ -0,0 +1,92 @@
+{
+ "messages": {
+ "noMessages": "まだメッセージはありません",
+ "noConversation": "まだ会話履歴はありません",
+ "loadingExample": "サンプルセッションを読み込んでいます: {{title}}",
+ "loadSuccess": "{{title}} を正常に読み込みました",
+ "loadFailed": "{{title}} の読み込みに失敗しました: {{error}}",
+ "saving": "保存しています...",
+ "saved": "保存しました",
+ "error": "エラーが発生しました",
+ "retry": "再試行します",
+ "undo": "元に戻します",
+ "redo": "やり直します",
+ "processing": "処理しています...",
+ "completed": "完了しました",
+ "noData": "利用可能なデータがありません",
+ "loadingData": "データを読み込んでいます…",
+ "dataLoaded": "データを正常に読み込みました",
+ "confirmDelete": "本当に削除しますか?",
+ "confirmReset": "本当にリセットしますか?",
+ "changesSaved": "変更を保存しました",
+ "changesDiscarded": "変更を破棄しました",
+ "formulate": "定式化します",
+ "formulateAndOverride": "定式化して上書きします",
+ "viewSystemMessages": "システムメッセージを表示します",
+ "systemMessagesWithCount": "システムメッセージ ({{count}})",
+ "showingLatest": "最新の {{count}} 件を表示しています",
+ "clearAllMessages": "すべてのメッセージを消去します",
+ "details": "詳細",
+ "generatedCode": "[生成されたコード]",
+ "chatWithAgents": "エージェントとの対話",
+ "you": "あなた",
+ "assistant": "アシスタント",
+ "sortBy": "{{label}} で並べ替えます",
+ "copyColumnName": "ヘッダーをコピー: {{label}}",
+ "columnNameCopied": "コピーしました: {{label}}",
+ "loading": "読み込んでいます…",
+ "rowsWithCount": "{{count}} 行",
+ "randomRowsTooltip": "このテーブルからランダムに10000行を表示します",
+ "close": "閉じます",
+ "autoSortFailed": "自動ソートを実行できませんでした。",
+ "autoSortServerFailed": "サーバーの問題により自動ソートを実行できませんでした。",
+ "removeTable": "テーブルを削除します",
+ "preview": "プレビュー",
+ "noTablesToPreview": "プレビューするテーブルがありません。",
+ "rowLimitReached": "{{count}} 行を読み込み、選択した行数の上限に達しました。ソースにはさらに多くの行が含まれている場合があります。",
+ "report": {
+ "component": "レポート"
+ },
+ "dataRefresh": {
+ "component": "データ更新",
+ "unknownError": "不明なエラーです",
+ "failedDerivedTable": "派生テーブルの更新に失敗しました ({{table}}): {{detail}}",
+ "errorRefreshingDerivedTable": "派生テーブル ({{table}}) の更新エラーです",
+ "successRefreshedWithDerived": "({{table}}) のデータを正常に更新し、派生テーブルを更新しました。",
+ "errorRefreshingData": "データの更新エラー: {{error}}"
+ },
+ "catalog": {
+ "syncComplete": "カタログの同期が完了しました",
+ "syncPartial": "カタログの同期は一部完了しました — {{synced}}/{{total}} テーブルが同期され、{{failed}} 件が失敗しました"
+ },
+ "agent": {
+ "clarifyExhausted": "広範囲に探索しましたが、まだ結論に至っていません。\n\nこれまでに完了した手順:\n{{steps}}\n\nどのように進めますか?",
+ "clarifyOptionContinue": "探索を続けます",
+ "clarifyOptionSimplify": "タスクを簡略化します",
+ "clarifyOptionPresent": "現時点の結果を示します",
+ "clarifyOptionSummary": "現時点の結果を要約します",
+ "maxIterationsSummary": "探索手順の最大数に達しました。",
+ "emptyDataframe": "出力DataFrameが空です(0行)。フィルターまたはデータの読み込みをご確認ください。",
+ "fieldsNotFound": "出力DataFrameにチャートエンコーディングのフィールドが見つかりません: {{missing}}。利用可能な列: {{available}}",
+ "llmApiError": "LLM APIエラーです",
+ "llmEmptyResponse": "LLMから空の応答が返されました",
+ "parseActionFailed": "LLM応答からエージェントアクションを解析できませんでした",
+ "unknownAction": "不明なアクション: {{actionType}}",
+ "noCodeBlock": "応答にコードブロックが見つかりませんでした。モデルはタスクを完了するコードを生成できません。",
+ "unexpectedError": "予期しないエラーです",
+ "codeExecError": "コードの実行中にエラーが発生しました。",
+ "unableExtractTables": "応答からテーブルを抽出できません",
+ "unableExtractScript": "応答からスクリプトを抽出できません",
+ "errorCallingModel": "モデルの呼び出しエラー: {{error}}",
+ "noModelConfigured": "モデルが構成されていません",
+ "requestTimedOut": "リクエストは {{seconds}} 秒以内に完全な応答を得られませんでした。フロントエンドは自動的に待機を停止しました。後でもう一度お試しいただくか、設定の「定式化タイムアウト」を増やしてください。",
+ "suggestionsTimedOut": "AI提案の生成は {{seconds}} 秒以内に結果を得られませんでした。フロントエンドは待機を停止しました。再試行するか、設定の「定式化タイムアウト」を増やしてください。",
+ "formulationTimedOut": "データ定式化は {{seconds}} 秒でタイムアウトしました。タスクを分割するか、別のモデルを使うか、設定の「定式化タイムアウト」を増やすことをご検討ください。"
+ },
+ "chartInsightTimedOut": "チャートインサイトは {{seconds}} 秒でタイムアウトしました。再試行するか、設定の「定式化タイムアウト」を増やしてください。",
+ "chartInsightImageNotReady": "チャート画像の準備が間に合いませんでした。チャートの描画が終わるまで待ってからもう一度お試しください。",
+ "chartInsightFailed": "チャートインサイトの生成に失敗しました。モデル構成をご確認ください。",
+ "globalModelListFailed": "サーバー構成モデルの読み込みに失敗しました。",
+ "availableModelsFailed": "サーバー構成モデルの接続確認に失敗しました。"
+ }
+}
diff --git a/src/i18n/locales/ja/model.json b/src/i18n/locales/ja/model.json
new file mode 100644
index 00000000..391bfd30
--- /dev/null
+++ b/src/i18n/locales/ja/model.json
@@ -0,0 +1,140 @@
+{
+ "model": {
+ "selectModel": "モデルを選択します",
+ "provider": "プロバイダー",
+ "account": "アカウント",
+ "signInCategory": "サインイン",
+ "apiCategory": "API",
+ "connectChatGPT": "ChatGPTでサインインします",
+ "chatgptAccount": "ChatGPTアカウント",
+ "openChatGPTAuthorization": "ChatGPTを開きます",
+ "manageChatGPTConnection": "ChatGPTで管理します",
+ "chatgptBilling": "試験運用中です。ChatGPTのサブスクリプション制限とモデルの利用可否が適用されます。ChatGPTのセキュリティ設定でデバイスコードログインを有効にする必要があります。",
+ "disconnectChatGPTTitle": "ChatGPTを切断しますか?",
+ "disconnectChatGPTMessage": "Data Formulator上のこの接続を忘れます。保存済みモデルは残ります。ChatGPT側の認証は取り消されません。",
+ "connectCopilot": "GitHub Copilotを接続します",
+ "copilotAccount": "GitHub Copilotアカウント",
+ "openGitHubAuthorization": "GitHubを開きます",
+ "manageCopilotConnection": "GitHubで管理します",
+ "deviceCode": "デバイスコード",
+ "deviceCodeInstructions": "アカウントを接続するため、このコードを {{provider}} に入力してください。",
+ "copyDeviceCode": "デバイスコードをコピーします",
+ "copyDeviceCodeFailed": "コードをコピーできませんでした。手動で選択してコピーしてください。",
+ "copilotBilling": "試験運用中です。Copilotのサブスクリプション制限と組織ポリシーが適用されます。互換性のあるチャットモデルのみ表示されます。",
+ "disconnectCopilotTitle": "GitHub Copilotを切断しますか?",
+ "disconnectCopilotMessage": "Data Formulator上のこの接続を忘れます。保存済みモデルは残ります。GitHub側の認証は取り消されません。",
+ "manageGitHubAuthorizations": "GitHubの認証を管理します",
+ "apiKey": "APIキー",
+ "model": "モデル",
+ "apiBase": "ベースURL",
+ "optionalApiKey": "APIキー(任意)",
+ "apiVersion": "APIバージョン",
+ "status": "状態",
+ "none": "なし",
+ "active": "アクティブ",
+ "inactive": "非アクティブ",
+ "configureModel": "モデルを構成します",
+ "addModel": "モデルを追加します",
+ "models": "モデル",
+ "newModel": "新しいモデル",
+ "edit": "編集します",
+ "copyDetails": "詳細をコピーします",
+ "testModel": "モデルをテストします",
+ "testPassed": "テストに合格しました",
+ "testFailedRetry": "テストに失敗しました。再試行します",
+ "testAndSave": "テストして保存します",
+ "back": "戻ります",
+ "testAndAdd": "テストして追加します",
+ "deploymentName": "モデルのデプロイ",
+ "azureDeploymentSource": "デプロイの選択",
+ "browseDeployments": "デプロイを参照します",
+ "enterManually": "手動で入力します",
+ "azureSubscription": "サブスクリプション",
+ "refreshAzureDeployments": "Azureデプロイを更新します",
+ "loadingAzureDeployments": "Azureデプロイを読み込んでいます...",
+ "noAzureDeployments": "利用可能なOpenAIデプロイが見つかりませんでした。別のサブスクリプションをお試しいただくか、手動で入力してください。",
+ "noAzureSubscriptions": "現在のAzure CLIテナントに有効なサブスクリプションが見つかりませんでした。",
+ "authentication": "認証",
+ "apiKeyAlternative": "APIキー(代替)",
+ "endpoint": "エンドポイントURL",
+ "azureAccount": "アカウント: {{user}}",
+ "azureCliAccess": "{{user}} に許可されたAzureモデルにアクセスできます。",
+ "existingModels": "既存のモデル",
+ "copyExistingHint": "既存のモデルを開始点として使用します。",
+ "useAsTemplate": "テンプレートとして使います",
+ "removeModel": "モデルを削除します",
+ "testConnection": "接続をテストします",
+ "connectionSuccess": "接続に成功しました",
+ "connectionFailed": "接続に失敗しました",
+ "litellmNote": "モデル構成はLiteLLMに基づいています。対応プロバイダーについてはドキュメントをご覧ください。",
+ "seeDocs": "対応プロバイダーを表示します",
+ "default": "既定",
+ "ready": "準備完了",
+ "retest": "再テストします",
+ "test": "テストします",
+ "selectModels": "モデルを選択します",
+ "current": "現在",
+ "unselected": "未選択",
+ "pleaseSelectModel": "モデルを選択してください",
+ "providerPlaceholder": "プロバイダー",
+ "example": "例",
+ "optionalKeylessEndpoint": "キーレスエンドポイントの場合は任意です",
+ "modelPlaceholder": "例: gpt-5.4",
+ "enterModelName": "モデル名を入力してください",
+ "optional": "任意",
+ "providerModelExists": "プロバイダー + モデルは既に存在します",
+ "addAndTestModel": "モデルを追加してテストします",
+ "clear": "クリアします",
+ "modelReadyMessage": "モデルは利用可能です",
+ "clickToTestModel": "クリックしてこのモデルが動作するかテストします",
+ "unknownError": "不明なエラーです",
+ "errorMessage": "エラー: {{message}}。クリックして再テストします。",
+ "showKeys": "APIキーを表示します",
+ "hideKeys": "APIキーを非表示にします",
+ "useModel": "{{modelName}} を使います",
+ "cancel": "キャンセルします",
+ "recommendedModelTip": "コーディングとマルチモーダル機能に優れたモデルを使うと、最良の体験が得られます。",
+ "openaiProviderTip": "OpenAI互換APIにはopenaiプロバイダーを使用します。",
+ "loadingModels": "モデルを読み込んでいます...",
+ "serverManaged": "サーバー管理",
+ "serverChip": "サーバー構成済み",
+ "serverConfigured": "サーバー構成済み",
+ "serverManagedTooltip": "管理者が管理しています",
+ "serverManagedSection": "サーバー構成モデル",
+ "serverManagedReadonly": "読み取り専用",
+ "userManagedSection": "マイモデル",
+ "testing": "テストしています…",
+ "configured": "構成済み",
+ "available": "利用可能",
+ "advancedSettings": "詳細設定",
+ "copyDiagnostic": "診断情報をコピーします",
+ "viewRecentLog": "最近のログを表示します",
+ "recentLog": "最近のログ",
+ "recentConfigurations": "最近の構成",
+ "useRecent": "最近のものを使います",
+ "connectOpenRouter": "OpenRouterに接続します",
+ "openRouterAccount": "OpenRouterアカウント",
+ "openRouterConnected": "接続済み",
+ "checkingConnection": "接続を確認しています...",
+ "authorizationExpired": "認証の有効期限が切れました",
+ "connectionUnavailable": "接続を利用できません",
+ "keyCreatorId": "キー作成者ID",
+ "connectionActions": "接続アクション",
+ "manageOpenRouterConnection": "OpenRouterで管理します",
+ "manageConnection": "{{provider}} でアカウントを表示します",
+ "authorizeAgain": "もう一度認証します...",
+ "retryConnection": "再試行します",
+ "reconnectAccount": "再接続します",
+ "disconnectAccount": "切断します",
+ "refreshAccount": "アカウントを更新します",
+ "waitingForAuthorization": "認証を待っています...",
+ "openAuthorization": "OpenRouterを開きます",
+ "accountAuthorizationFailed": "認証に失敗したか、有効期限が切れました。再接続して再試行してください。",
+ "noCompatibleModels": "互換性のあるモデルがありません",
+ "openRouterBilling": "モデルのテストと利用には、お客様のOpenRouterアカウントに料金が発生します。",
+ "disconnectOpenRouterTitle": "OpenRouterを切断しますか?",
+ "disconnectOpenRouterMessage": "Data Formulatorに保存されたキーを忘れます。この接続を使うすべてのモデルは再接続が必要になります。OpenRouter側でもキーを取り消すには、OpenRouterのキー一覧から削除してください。",
+ "manageOpenRouterKeys": "OpenRouterのキーを管理します",
+ "configuredMessage": "サーバーで構成されています。クリックして接続を確認します。"
+ }
+}
diff --git a/src/i18n/locales/ja/navigation.json b/src/i18n/locales/ja/navigation.json
new file mode 100644
index 00000000..a035e2d6
--- /dev/null
+++ b/src/i18n/locales/ja/navigation.json
@@ -0,0 +1,18 @@
+{
+ "navigation": {
+ "startExploration": "探索を開始します",
+ "installLocally": "ローカルにインストールします",
+ "tryOnlineDemo": "オンラインデモを試します",
+ "video": "動画",
+ "github": "GitHub",
+ "contactUs": "お問い合わせ",
+ "termsOfUse": "利用規約",
+ "about": "概要",
+ "home": "ホーム",
+ "data": "データ",
+ "visualization": "可視化",
+ "report": "レポート",
+ "chat": "チャット",
+ "agentRules": "エージェントルール"
+ }
+}
diff --git a/src/i18n/locales/ja/upload.json b/src/i18n/locales/ja/upload.json
new file mode 100644
index 00000000..0146fc44
--- /dev/null
+++ b/src/i18n/locales/ja/upload.json
@@ -0,0 +1,199 @@
+{
+ "upload": {
+ "title": "データを読み込みます",
+ "sampleDatasets": "サンプルデータセット",
+ "sampleDatasetsDesc": "厳選サンプルデータセット",
+ "uploadFile": "ファイルをアップロードします",
+ "uploadFileDesc": "テーブル、Excelブック、ドキュメント",
+ "pasteData": "データを貼り付けます",
+ "pasteDataDesc": "クリップボードから貼り付けます",
+ "extractData": "データ読み込みエージェント",
+ "extractDataDesc": "AIでデータを検索・抽出します",
+ "loadFromUrl": "URLから読み込みます",
+ "loadFromUrlTitle": "URLから読み込みます",
+ "loadFromUrlDesc": "リモートURLからデータを取得します",
+ "database": "データベース",
+ "databaseDesc": "データベースやサービスに接続します",
+ "databaseDisabled": "この環境ではデータベース接続は無効です",
+ "dragDrop": "ファイルをここにドラッグ&ドロップします",
+ "orBrowse": "または参照します",
+ "or": "または",
+ "browse": "参照します",
+ "supportedFormats": "対応形式:CSV、TSV、JSON、Excel(xlsx、xls)",
+ "workspaceFile": "ファイル",
+ "previewUnavailable": "このファイルのクイックプレビューは利用できません。",
+ "emptyFile": "このファイルは空です。",
+ "previewTruncated": "プレビューは切り詰められています。",
+ "removeFile": "ファイルを削除します",
+ "filesSelected": "{{count}} ファイルを選択しています",
+ "addMoreFiles": "ファイルを追加します",
+ "addToWorkspace": "ワークスペースに追加します",
+ "addAllToWorkspace": "すべてワークスペースに追加します",
+ "placeholder": {
+ "url": "URLを入力します: https://example.com/data.json または /api/data",
+ "paste": "データをここに貼り付けます(CSV、TSV、JSON形式)"
+ },
+ "helperText": {
+ "urlInvalid": "http://、https://、または / で始まる有効なURLを入力してください"
+ },
+ "resetExtraction": "抽出をリセットします",
+ "autoRefresh": "自動更新",
+ "refreshInterval": "更新間隔",
+ "seconds": "秒",
+ "liveData": "ライブデータ",
+ "from": "から",
+ "previewMode": "プレビューモード: 編集は無効です。「全表示」をクリックすると編集できます。",
+ "showPreview": "プレビューを表示します",
+ "showFull": "全表示します",
+ "dataLoadingAgent": "データ読み込みエージェント",
+ "resumePreviousConversation": "以前の会話 →",
+ "agentChatPlaceholder": "データセットの検索や、画像・テキストからのデータ抽出をエージェントに依頼します…",
+ "agentChatTabSuggestion": "ここにはどんなデータセットがありますか?",
+ "agentChatSuggestionsLabel": "試しに質問します",
+ "agentChatSendTooltip": "エージェントとチャットを開始します",
+ "dataSourcesLabel": "接続先:",
+ "addSourceLabel": "データを追加します:",
+ "agentChatQuickAction": {
+ "connect": "データソースへの接続を案内してもらいます",
+ "askConnected": "接続済みソースのテーブルを一覧表示します"
+ },
+ "agentChatSuggestion": {
+ "askConnected": "接続済みソースにはどんなデータセットがありますか?",
+ "findCPI": "消費者物価指数データの読み込みを手伝ってもらいます",
+ "extractFromExcel": "添付Excelファイルからデータを抽出します",
+ "kind": {
+ "ask": "質問します",
+ "find": "検索します",
+ "extract": "抽出します"
+ }
+ },
+ "uploadData": "データをアップロードします",
+ "importData": "データをインポートします",
+ "dataConnections": "データ接続",
+ "connectToLiveData": "ライブデータソースに接続します",
+ "loadLocalData": "ローカルデータを読み込みます",
+ "localData": "ローカルデータ",
+ "orConnectToDataSource": "またはデータソースに接続します(自動更新は任意です)",
+ "addConnection": "データベースに接続します",
+ "addConnectionDesc": "ライブデータベースに接続します",
+ "connectorConnected": "接続済み",
+ "connectorDisconnected": "クリックして接続します",
+ "connectorNotConnected": "未接続",
+ "pickDataSourceType": "新しい接続を作成するデータソース種別を選びます。",
+ "nameYourConnection": "{{type}} 接続に名前を付けます。",
+ "connectionName": "接続名",
+ "createConnection": "接続を作成します",
+ "creating": "作成しています...",
+ "dataAssistant": "データ読み込みアシスタント",
+ "addData": "データを追加します",
+ "loadDataIn": "データの読み込み先",
+ "browserLabel": "ブラウザー",
+ "browserTooltip": "データはブラウザー内のみに保持されます({{limit}} 行まで)",
+ "installLocallyTooltip": "Data Formulatorをローカルにインストールすると大規模データセットの分析ができます",
+ "azureBlobTooltip": "データはAzure Blob Storageに保存されます(大規模テーブルに対応)",
+ "diskTooltip": "データはディスク上のワークスペースに保存されます(大規模テーブルに対応)",
+ "azureLabel": "Azure",
+ "diskLabel": "ディスク",
+ "openWorkspace": "ワークスペースを開きます: {{path}}",
+ "fileUploadDisabled": "この環境ではファイルアップロードは無効です。",
+ "useLoadFromUrl": "リモートソースからデータを読み込むには「URLから読み込む」を使います。",
+ "selectFileToPreview": "プレビューするファイルを選択します。",
+ "loadTable": "テーブルを読み込みます",
+ "loadingTable": "読み込んでいます...",
+ "loadAllTables": "すべてのテーブルを読み込みます",
+ "preview": "プレビュー",
+ "urlFormatHint": "URLはCSV、JSON、JSONL形式のデータを指している必要があります",
+ "watchMode": "監視モード",
+ "checkUpdatesEvery": "データ更新を確認する間隔",
+ "watchHint": "URLから定期的にデータを自動確認・更新します",
+ "tryExamples": "例を試します:",
+ "resetLabel": "リセットします",
+ "enterUrlToPreview": "URLを入力してプレビューをクリックするとデータを表示します。",
+ "watchModeStatus": "監視モード:",
+ "contentExceedsSizeLimit": "⚠️ コンテンツが {{limit}}MB の上限を超えています。現在のサイズ:{{size}}MB。大規模なデータセットにはDATABASEタブを使用してください。",
+ "largeContentDetected": "大きなコンテンツを検出しました ({{size}}KB)。",
+ "showingFullContent": "全内容を表示しています(遅くなる場合があります)",
+ "showingPreview": "パフォーマンスのためプレビューを表示しています",
+ "pastePreviewTruncatedSuffix": "…(パフォーマンスのため切り詰めています)",
+ "loadingData": "データを読み込んでいます...",
+ "loadingDataset": "{{name}} を読み込んでいます...",
+ "connect": "接続します",
+ "createConnectionTo": "{{name}} への接続を作成します",
+ "connectionNameLabel": "接続名",
+ "dataSourceTypes": "データソース",
+ "connectorGroups": {
+ "samples": "サンプル",
+ "files": "ファイル",
+ "databases": "データベース",
+ "warehouses": "データウェアハウス",
+ "semantic": "BI・セマンティックモデル",
+ "other": "その他"
+ },
+ "folderPathPlaceholder": "/データ/フォルダーへの/パス",
+ "includeSubfolders": "サブフォルダーを含めます",
+ "localFolder": "ローカルフォルダーをリンクします",
+ "localFolderConnected": "ローカルフォルダー",
+ "localFolderDesc": "コンピューター上のファイルを参照します",
+ "localFolderHint": "コンピューター上のフォルダーを選択してデータファイルを参照・インポートします。",
+ "opening": "開いています...",
+ "orTypePath": "またはパスを手動で入力します",
+ "selectDataSourceType": "データソース種別を選択します",
+ "selectFolder": "フォルダーを選択します",
+ "storedInAzure": "データはAzure Blob Storageに保存されます",
+ "storedInBrowser": "データはブラウザー内のみに保持されます",
+ "storedTemporarily": "データはこのサーバーに一時保存されます",
+ "temporaryServerLabel": "一時サーバー",
+ "storedOnDisk": "データはディスクに保存されます",
+ "connectorDesc": {
+ "sample_datasets": "サンプルデータセットを試します",
+ "mysql": "MySQLテーブルをクエリします",
+ "postgresql": "Postgresテーブルをクエリします",
+ "mssql": "SQL Serverテーブルをクエリします",
+ "cosmosdb": "Cosmos DBコンテナーをクエリします",
+ "mongodb": "MongoDBコレクションをクエリします",
+ "bigquery": "BigQueryデータセットをクエリします",
+ "athena": "Amazon Athenaをクエリします",
+ "kusto": "Azure Data Explorerをクエリします",
+ "superset": "Supersetデータセットを参照します",
+ "azure_blob": "Azure Blobファイルを読み込みます",
+ "s3": "Amazon S3ファイルを読み込みます",
+ "local_folder": "ローカルファイルを参照します"
+ },
+ "localFolderDefaultName": "ローカルフォルダー",
+ "errors": {
+ "fileTooLarge": "ファイル {{name}} は大きすぎます ({{size}}MB)。大きなファイルにはデータベースを使います。",
+ "failedToParse": "{{name}} の解析に失敗しました。",
+ "failedToRead": "{{name}} の読み取りに失敗しました。",
+ "failedToParseExcel": "Excelファイル {{name}} の解析に失敗しました。",
+ "unsupportedFormat": "未対応のファイル形式です: {{name}}。",
+ "unableToParseUrl": "指定URLからデータを解析できませんでした。URLがCSV、JSON、JSONLデータを指しているかご確認ください。",
+ "failedToFetch": "データの取得に失敗しました: {{message}}。URLがCSV、JSON、JSONLデータを指しているかご確認ください。",
+ "failedToCreateConnector": "コネクタの作成に失敗しました",
+ "failedToConnectFolder": "フォルダーの接続に失敗しました",
+ "failedToOpenFolder": "フォルダーを開けませんでした",
+ "failedToDeleteConnector": "コネクタの削除に失敗しました"
+ },
+ "messages": {
+ "connectedTo": "「{{name}}」に接続しました",
+ "deletedConnector": "コネクタ「{{name}}」を削除しました"
+ },
+ "upgrade": {
+ "title": "データコネクタにはローカルインストールが必要です",
+ "subtitle": "ブラウザーのみのモードではデータベースコネクタは無効です。ローカルにインストールすると全機能を使えます。",
+ "featureDb": "ライブデータベースに接続します",
+ "featureDbDesc": "MySQL、Postgres、Kusto、BigQuery、MongoDB、S3など。",
+ "featureLocalFolder": "ローカルフォルダーや大規模ファイルを参照します",
+ "featureWorkspaces": "永続ワークスペースとエージェントナレッジを利用します",
+ "featureCredentials": "独自のモデルキーを使用します",
+ "pythonHint": "Python 3.11以降が必要です。",
+ "installHeading": "インストールと起動",
+ "copy": "コピーします",
+ "copied": "コピーしました",
+ "viewOnGithub": "GitHubで表示します",
+ "viewOnPypi": "PyPIパッケージ",
+ "requirements": "Python 3.11以降と ",
+ "requirementsTail": "が必要です。pip、conda、Dockerのどれをお使いですか? ",
+ "otherInstallMethods": "他のインストール方法をご覧ください"
+ }
+ }
+}
diff --git a/tests/frontend/unit/app/i18nLocales.test.ts b/tests/frontend/unit/app/i18nLocales.test.ts
index dad11138..7b0d646a 100644
--- a/tests/frontend/unit/app/i18nLocales.test.ts
+++ b/tests/frontend/unit/app/i18nLocales.test.ts
@@ -3,6 +3,7 @@ import { describe, expect, it } from "vitest";
import en from "../../../../src/i18n/locales/en";
import zh from "../../../../src/i18n/locales/zh";
import id from "../../../../src/i18n/locales/id";
+import ja from "../../../../src/i18n/locales/ja";
type TranslationValue = string | Record;
type TranslationMap = Record;
@@ -32,4 +33,8 @@ describe("i18n locale bundles", () => {
it("keeps Indonesian translation keys aligned with English", () => {
expect(collectKeys(id)).toEqual(collectKeys(en));
});
+
+ it("keeps Japanese translation keys aligned with English", () => {
+ expect(collectKeys(ja)).toEqual(collectKeys(en));
+ });
});