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)); + }); });