From 1debfef284b3c1cebfecbc0bd69dce354d394637 Mon Sep 17 00:00:00 2001 From: cwatanab Date: Mon, 15 Jun 2026 18:27:06 +0900 Subject: [PATCH] feat(i18n): add Japanese translation support (#1211) --- apps/desktop/src/i18n/index.ts | 6 +- apps/desktop/src/i18n/locales/ja.ts | 2513 +++++++++++++++++++++++++ apps/desktop/src/lib/localeOptions.ts | 1 + 3 files changed, 2518 insertions(+), 2 deletions(-) create mode 100644 apps/desktop/src/i18n/locales/ja.ts diff --git a/apps/desktop/src/i18n/index.ts b/apps/desktop/src/i18n/index.ts index bea7a45d7..8471cb642 100644 --- a/apps/desktop/src/i18n/index.ts +++ b/apps/desktop/src/i18n/index.ts @@ -2,19 +2,20 @@ import { createI18n } from "vue-i18n"; import en from "./locales/en"; import { safeLocalStorageGet, safeLocalStorageSet } from "@/lib/safeStorage"; -export type Locale = "en" | "es" | "it" | "pt-BR" | "zh-CN" | "zh-TW"; +export type Locale = "en" | "es" | "it" | "ja" | "pt-BR" | "zh-CN" | "zh-TW"; type LocaleMessages = Record; type I18nGlobal = { locale: { value: Locale }; setLocaleMessage: (locale: Locale, messages: LocaleMessages) => void; }; -const supportedLocales: Locale[] = ["en", "es", "it", "pt-BR", "zh-CN", "zh-TW"]; +const supportedLocales: Locale[] = ["en", "es", "it", "ja", "pt-BR", "zh-CN", "zh-TW"]; const defaultLocale: Locale = "en"; const loadedLocales = new Set([defaultLocale]); const localeLoaders: Record, () => Promise<{ default: LocaleMessages }>> = { es: () => import("./locales/es"), it: () => import("./locales/it"), + ja: () => import("./locales/ja"), "pt-BR": () => import("./locales/pt-BR"), "zh-CN": () => import("./locales/zh-CN"), "zh-TW": () => import("./locales/zh-TW"), @@ -39,6 +40,7 @@ export function localeFromLanguageTag(value: string | null | undefined): Locale if (normalized === "en" || normalized.startsWith("en-")) return "en"; if (normalized === "es" || normalized.startsWith("es-")) return "es"; if (normalized === "it" || normalized.startsWith("it-")) return "it"; + if (normalized === "ja" || normalized.startsWith("ja-")) return "ja"; if (normalized === "pt" || normalized.startsWith("pt-")) return "pt-BR"; return null; } diff --git a/apps/desktop/src/i18n/locales/ja.ts b/apps/desktop/src/i18n/locales/ja.ts new file mode 100644 index 000000000..5fec0ba3f --- /dev/null +++ b/apps/desktop/src/i18n/locales/ja.ts @@ -0,0 +1,2513 @@ +export default { + app: { + name: "DBX", + }, + auth: { + setupTitle: "アクセスパスワードを設定", + setupDescription: "インスタンスを保護するためのパスワードを設定してください", + loginDescription: "データベース管理ツール", + newPassword: "新しいパスワードを入力", + confirmPassword: "パスワードを確認", + enterPassword: "アクセスパスワードを入力", + passwordMismatch: "パスワードが一致しません", + setPassword: "パスワードを設定", + login: "ログイン", + processing: "処理中...", + loginFailed: "パスワードが正しくありません", + connectFailed: "接続に失敗しました", + changePassword: "パスワードを変更", + oldPassword: "現在のパスワード", + oldPasswordWrong: "現在のパスワードが正しくありません", + passwordChanged: "パスワードが変更されました", + changePasswordFailed: "パスワードの変更に失敗しました", + changePasswordDescription: "現在のパスワードと新しいパスワードを入力してください", + }, + toolbar: { + newConnection: "新しい接続", + newQuery: "新しいクエリ", + execute: "実行", + executeShortcut: "選択範囲/クエリを実行 (Cmd+Enter)", + stopQuery: "クエリを停止", + explainPlan: "実行計画を表示", + stopExplain: "実行計画の表示を停止", + formatSql: "SQLをフォーマット", + formatSqlFailed: "SQLのフォーマットに失敗しました", + previewSql: "SQLをプレビュー", + hidePreviewSql: "SQLプレビューを非表示", + saveSql: "SQLライブラリに保存", + openSql: "SQLファイルを開く", + theme: "テーマ", + themeLight: "ライト", + themeDark: "ダーク", + themeSystem: "システム設定に従う", + sqlSaved: "SQLを保存しました", + sqlOpenFailed: "ファイルを開けませんでした: {message}", + sqlSaveFailed: "ファイルの保存に失敗しました: {message}", + driverManager: "ドライバーマネージャー", + updatableDriverCount: "更新可能なドライバー数", + blockDangerousRedisCommands: "危険なコマンドをブロック", + }, + updates: { + title: "アップデート", + check: "アップデートを確認", + availableTitle: "アップデートがあります", + availableMessage: "DBX {latest} が利用可能です。現在のバージョンは {current} です。", + upToDate: "DBX は最新です ({version})。", + failed: "アップデートの確認に失敗しました: {error}", + rateLimited: "GitHubのアップデート確認が一時的に制限されています。リリースページで手動確認できます。", + openRelease: "リリースページを開く", + downloadAndInstall: "ダウンロード & インストール", + portableManualUpdate: "ポータブル版はアプリ内インストーラーを使用できません。リリースページからポータブルZIPをダウンロードし、現在のDBXフォルダに上書き展開してください。portable.dbxとデータは保持されます。", + downloading: "ダウンロード中 {progress}%", + downloadFailed: "アップデートのダウンロードに失敗しました: {error}", + restart: "終了して再起動", + restartFailed: "アプリの再起動に失敗しました: {error}", + exitAndUpdate: "終了してアップデート", + reopenHint: "アップデート完了のためアプリが再起動します", + dockerUsersRun: "Dockerユーザーは以下を実行してください", + toUpdate: "更新するには", + }, + sidebar: { + connections: "接続", + noConnections: "まだ接続がありません", + import: "接続をインポート", + importDbx: "DBX設定をインポート", + importNavicat: "Navicat NCXをインポート", + importDbeaver: "DBeaverをインポート", + importDatagrip: "DataGripをインポート", + export: "接続をエクスポート", + collapse: "サイドバーを折りたたむ", + expand: "サイドバーを展開", + showMore: "さらに{count}件表示...", + filterByType: "タイプでフィルター", + searchScopeConnection: "接続", + searchScopeDatabase: "データベース", + searchScopeSchema: "スキーマ", + searchScopeTable: "テーブル", + searchScopeView: "ビュー", + clearFilter: "フィルターをクリア", + locateActiveTab: "サイドバーで表示", + }, + savedSql: { + saveToLibrary: "SQLライブラリに保存", + save: "保存", + saved: "SQLを保存しました", + saveFailed: "SQLの保存に失敗しました: {message}", + fileName: "ファイル名", + folder: "フォルダ", + rootFolder: "SQLライブラリ", + newFolder: "新しいSQLフォルダ", + newFolderDefault: "新しいフォルダ", + renameFolder: "フォルダ名を変更", + deleteFolder: "フォルダを削除", + deleteFolderConfirm: "「{name}」とその中のSQLファイルを削除しますか?", + open: "SQLを開く", + renameFile: "SQLの名前を変更", + deleteFile: "SQLを削除", + deleteFileConfirm: "「{name}」を削除しますか?", + }, + sqlLibrary: { + title: "SQLライブラリ", + empty: "保存されたクエリはまだありません", + emptyFolder: "空のフォルダ", + unfiled: "未分類", + exportFile: "SQLをエクスポート", + exportFolder: "フォルダをエクスポート", + exportLibrary: "SQLライブラリをエクスポート", + importDirectory: "ローカルフォルダをインポート", + importIntoFolder: "フォルダにインポート", + openStorageDirectory: "SQL保存ディレクトリを開く", + chooseSyncDirectory: "ローカル同期ディレクトリを設定", + disableSyncDirectory: "ローカル同期ディレクトリを無効化", + syncDirectorySaved: "SQLローカル同期ディレクトリを保存しました", + syncDirectoryDisabled: "SQLローカル同期を無効化しました", + syncDirectoryFailed: "同期ディレクトリの設定に失敗しました: {message}", + openDirectoryFailed: "ディレクトリを開けませんでした: {message}", + noSyncDirectory: "先にローカル同期ディレクトリを設定してください", + exported: "エクスポートしました", + exportFailed: "エクスポートに失敗しました: {message}", + importFailed: "インポートに失敗しました: {message}", + importNone: "選択されたフォルダに.sqlファイルが見つかりませんでした", + imported: "{count}件のSQLファイルをインポートしました", + desktopOnly: "この機能はデスクトップアプリでのみ利用可能です", + noConnection: "インポートに利用可能な接続がありません", + }, + connection: { + title: "新しい接続", + name: "名前", + namePlaceholder: "接続名(空の場合は自動生成)", + type: "タイプ", + host: "ホスト", + filePath: "ファイルパス", + h2FileMode: "ファイル", + h2TcpMode: "TCP", + h2FilePathRequired: "H2ファイルパスを指定してください", + createDuckDbFile: "DuckDBファイルを作成", + memoryDatabasePathHint: "インメモリのSQLiteまたはDuckDBデータベースを作成するには :memory: を使用してください。", + sqliteExtensions: "SQLite拡張", + sqliteExtensionsPlaceholder: "/path/to/regexp.dylib\n/path/to/text.dylib|sqlite3_text_init", + sqliteExtensionsHint: "1行に1つの.dylib/.so/.dllファイルを指定します。エントリポイントが必要な場合は「パス|エントリポイント」形式で指定します。接続時に読み込まれ、その後load_extensionは無効になります。", + sqliteExtensionBrowse: "SQLite拡張を選択", + user: "ユーザー", + password: "パスワード", + database: "データベース", + databasePlaceholder: "任意", + databasePlaceholderWithDefault: "任意、デフォルトは {database}", + defaultDatabase: "デフォルトDB", + authDatabase: "認証DB", + authDatabasePlaceholder: "任意、通常は admin", + authMechanism: "認証方式", + authMechanismDefault: "デフォルト", + driverMode: "ドライバー", + mongoDriverAuto: "自動", + mongoDriverLegacy: "レガシー", + serviceName: "サービス/SID", + serviceNameOnly: "サービス名", + version: "バージョン", + driverInstallHintPrefix: "接続前に上部ツールバーの", + driverInstallHintSuffix: "から必要なドライバーをインストールしてください。", + driverName: "ドライバー名", + driverNamePlaceholder: "ベンダー名または環境名", + urlParams: "URLパラメータ", + gbaseServer: "GBASEDBTSERVER", + sslEnable: "暗号化接続を有効にする", + caCertPath: "CA証明書", + caCertPathPlaceholder: "任意、例: ~/.yandex/RootCA.crt", + caCertPathBrowse: "証明書を参照", + redisTlsInsecure: "証明書の検証をスキップ", + redisTlsInsecureHint: "自己署名証明書やプライベートCA用の、redis-cli --tls --insecure 相当の設定です。", + mysqlTlsMode: "TLSモード", + mysqlTlsModePreferred: "優先", + mysqlTlsModeDisabled: "無効", + mysqlTlsModeRequired: "必須", + mysqlTlsModeVerifyCa: "CA検証", + mysqlTlsModeVerifyIdentity: "ID検証", + mysqlCaCertHint: "サーバー証明書がプライベートCAで署名されている場合、CA検証とID検証に必要です。", + mysqlClientCert: "クライアント認証", + mysqlClientCertPlaceholder: "/path/to/client.crt", + mysqlClientKeyPlaceholder: "/path/to/client.key", + mysqlClientCertHint: "MySQLがmTLSを要求する場合、クライアント証明書と秘密鍵の両方を指定する必要があります。", + mysqlClientCertBrowse: "クライアント証明書を選択", + mysqlClientKeyBrowse: "クライアント秘密鍵を選択", + postgresSslMode: "TLSモード", + postgresSslModeDisable: "無効にする", + postgresSslModePrefer: "優先する", + postgresSslModeRequire: "必須にする", + postgresSslModeVerifyCa: "CA検証", + postgresSslModeVerifyFull: "完全検証", + postgresServerCert: "サーバーCA", + postgresRootCertPlaceholder: "/path/to/ca.crt", + postgresRootCertHint: "サーバー証明書がプライベートCAで署名されている場合、verify-caまたはverify-fullに使用します。", + postgresRootCertBrowse: "CA証明書を選択", + postgresClientCert: "クライアント認証", + postgresClientCertPlaceholder: "/path/to/client.crt", + postgresClientKeyPlaceholder: "/path/to/client.key", + postgresClientCertHint: "PostgreSQLがmTLSを要求する場合、クライアント証明書と秘密鍵の両方を指定する必要があります。", + postgresClientCertBrowse: "クライアント証明書を選択", + postgresClientKeyBrowse: "クライアント秘密鍵を選択", + connectionUrlOptional: "URL(任意)", + connectionUrlPlaceholder: "postgresql://user:pass{'@'}host:5432/db?sslmode=require", + parseConnectionUrl: "接続URLを解析", + parseConnectionUrlApplied: "接続URLを適用しました", + parseConnectionUrlFailed: "接続URLの解析に失敗しました: {message}", + mode: "接続モード", + modeForm: "フォーム", + redisStandaloneMode: "スタンドアロン", + redisSentinelMode: "センチネル", + redisClusterMode: "クラスター", + oceanbaseMySQLMode: "MySQLモード", + oceanbaseOracleMode: "Oracleモード", + redisFirstSentinel: "最初のセンチネル", + redisFirstClusterNode: "最初のシードノード", + redisSentinelNodes: "センチネルノード", + redisClusterNodes: "クラスターシードノード", + redisSentinelMaster: "マスター名", + redisSentinelUser: "センチネルユーザー", + redisSentinelPassword: "センチネルパスワード", + redisSentinelTls: "センチネルTLS", + redisSentinelTlsHint: "センチネルノード接続時にTLSを使用する", + redisKeySeparator: "キー名前空間セパレーター", + etcdEndpoints: "エンドポイント", + etcdEndpointsHint: "1行に1つのエンドポイント。空白の場合、上のホストとポートを使用します。", + etcdCaCertPlaceholder: "/path/to/ca.crt", + etcdCaCertBrowse: "CA証明書を選択", + etcdClientAuth: "クライアント認証", + etcdClientCertPlaceholder: "/path/to/client.crt", + etcdClientKeyPlaceholder: "/path/to/client.key", + etcdClientCertHint: "etcdがmTLSを要求する場合、クライアント証明書と秘密鍵の両方を指定する必要があります。", + etcdClientCertBrowse: "クライアント証明書を選択", + etcdClientKeyBrowse: "クライアント秘密鍵を選択", + etcdClientCertPairRequired: "クライアント証明書と秘密鍵の両方を指定する必要があります。", + searchDatabasePlaceholder: "データベースタイプを検索", + iconView: "アイコン表示", + listView: "リスト表示", + selectedDatabase: "選択中", + noDatabaseMatches: "一致するデータベースがありません", + next: "次へ", + back: "戻る", + basicTab: "接続", + tlsTab: "TLS/SSL", + test: "テスト", + testing: "テスト中...", + copyTestResult: "テスト結果をコピー", + saveAndConnect: "保存して接続", + save: "保存", + editTitle: "接続を編集", + testSuccess: "接続に成功しました", + connecting: "{name} に接続中...", + connectSuccess: "{name} に接続しました", + connectFailed: "接続に失敗しました: {message}", + driverNotInstalled: "{driver} ドライバーがインストールされていません。ドライバーマネージャーからインストールしてください。", + jreNotInstalled: "JRE {jre} ランタイムがインストールされていません。ドライバーマネージャーからインストールしてください。", + systemJavaNotFound: "システムJavaランタイムがPATHに見つかりませんでした。Javaをインストールするか、カスタムJava実行ファイルを選択してください。", + customJavaPathEmpty: "カスタムJavaランタイムのパスが空です。Java実行ファイルを選択してください。", + jdbcPluginNotInstalled: "JDBCプラグインがインストールされていません。この接続を使用するにはオプションのJDBCプラグインをインストールしてください。", + lastError: "接続エラー", + clearError: "接続エラーをクリア", + saveFailed: "接続の保存に失敗しました: {message}", + deleted: "接続を削除しました", + deletedSelected: "{count}件の接続を削除しました", + copied: "コピーしました", + disconnected: "切断しました", + databaseConnectionClosed: "データベース接続を閉じました: {name}", + duplicated: "接続を複製しました", + groupDeleted: "グループを削除しました", + loadFailed: "保存された接続の読み込みに失敗しました: {message}", + sshTunnel: "SSHトンネル / プロキシ", + advancedTab: "詳細", + sshEnable: "SSHトンネル/プロキシを使用する", + sshHost: "SSHホスト", + sshUser: "SSHユーザー", + sshPassword: "SSHパスワード", + sshPasswordPlaceholder: "鍵を使用する場合は空のまま", + sshKeyPath: "鍵パス", + sshKeyPassphrase: "鍵パスフレーズ", + sshKeyPassphrasePlaceholder: "鍵が暗号化されていない場合は空のまま", + sshKeyPathBrowse: "参照", + sshExposeLan: "トンネルをLANに公開", + sshConnectTimeout: "SSHタイムアウト(秒)", + sshHops: "SSHトンネル / プロキシ階層", + sshHopAdd: "SSH階層を追加", + sshHopDuplicate: "複製", + sshHopDelete: "削除", + sshHopMoveUp: "上に移動", + sshHopMoveDown: "下に移動", + sshHopName: "階層名", + sshHopNamePlaceholder: "要塞ホスト、ジャンプホスト、本番ゲートウェイ", + sshHopDefaultName: "階層 {index}", + sshHopInvalidHost: "{hop}: SSHホストは必須です", + sshHopInvalidUser: "{hop}: SSHユーザーは必須です", + sshHopInvalidPort: "{hop}: SSHポートは1〜65535の範囲で指定してください", + sshHopInvalidAuth: "{hop}: パスワード、鍵パス、またはssh-agentが必要です", + sshUseAgent: "ssh-agentを使用", + sshHopInvalidTimeout: "{hop}: SSHタイムアウトは1〜300秒の範囲で指定してください", + connectTimeout: "接続タイムアウト(秒)", + queryTimeout: "クエリタイムアウト(秒)", + idleTimeout: "アイドルタイムアウト(秒)", + readOnly: "読み取り専用", + readOnlyHint: "すべての書き込み操作(INSERT, UPDATE, DELETEなど)をブロックします", + readOnlyBadge: "読み取り専用", + proxy: "プロキシ", + proxyEnable: "プロキシ経由でデータベースに接続", + proxyType: "プロキシタイプ", + proxyHost: "プロキシホスト", + proxyUsername: "プロキシユーザー", + proxyUsernamePlaceholder: "任意", + proxyPassword: "プロキシパスワード", + proxyPasswordPlaceholder: "任意", + jdbcUrl: "JDBC URL", + jdbcUrlPlaceholder: "jdbc:postgresql://localhost:5432/database", + jdbcDriverClass: "ドライバークラス(任意)", + jdbcDriverClassPlaceholder: "ほとんどのドライバーは自動登録されます。必要な場合は com.vendor.jdbc.Driver を指定", + jdbcDriverPaths: "ドライバーJAR", + jdbcDriverSelectPlaceholder: "インポート済みドライバーを選択", + jdbcManualClasspath: "手動クラスパス", + jdbcManualClasspathCount: "{count}件のパス", + jdbcDriverPathsPlaceholder: "/path/to/driver.jar\n/path/to/another-driver.jar", + jdbcDriverBrowse: "JDBCドライバーJARを選択", + jdbcDocs: "JDBCドキュメントを見る", + jdbcPluginHint: "最初にDBX JDBCプラグインをインストールし、次にデータベースベンダーのJDBCドライバーJARをインポートしてください。", + dmCompatHint: "システムにDM8 ODBCドライバーがインストールされている必要があります。", + dmDownload: "達夢からダウンロード", + mongoLegacyHint: "古いMongoDBサーバー(特に4.2未満)ではレガシーを使用してください。認証に失敗しユーザーがadminで作成された場合は、認証DBをadminに設定してください。", + compatible: "互換", + mainstream: "人気", + color: "色", + colorNone: "色なし", + colorGreen: "緑", + colorYellow: "黄", + colorOrange: "オレンジ", + colorRed: "赤", + colorBlue: "青", + colorPurple: "紫", + colorCustom: "カスタム色", + }, + editor: { + pressToExecute: "{mod}+Enter で実行", + pressToSaveSql: "{mod}+S でSQLを保存", + queryTimeoutError: "クエリがタイムアウトしました({seconds}秒)。データベース接続が正常か確認してください。", + connectionMayBeLost: "接続が失われた可能性があります。データを更新して再試行してください。", + showResultsPane: "結果を表示", + hideResultsPane: "結果を非表示", + noDatabase: "データベースが選択されていません", + unsavedChangesTitle: "未保存の変更", + unsavedChangesMessage: "このタブには未保存の変更があります。閉じると失われます。保存してから閉じますか?", + discardChanges: "破棄", + selectConnection: "接続を選択", + searchConnection: "接続を検索...", + selectDatabase: "データベースを選択", + searchDatabase: "データベースを検索...", + selectSchema: "スキーマを選択", + setDefaultDatabase: "デフォルトに設定", + defaultDatabase: "デフォルト", + clearDatabase: "データベースをクリア", + completion: { + nullValue: "NULL値", + isNull: "NULLかどうか", + isNotNull: "NULLでないかどうか", + stringLiteral: "文字列リテラル", + numericLiteral: "数値リテラル", + booleanValue: "真偽値", + starExpansionColumns: "{count}列", + functionDescriptions: { + COUNT: "行数を返す", + SUM: "数値列の合計を返す", + AVG: "数値列の平均を返す", + MIN: "最小値を返す", + MAX: "最大値を返す", + GROUP_CONCAT: "グループの値を文字列に連結", + STRING_AGG: "グループの文字列を連結", + CONCAT: "複数の文字列を連結", + CONCAT_WS: "区切り文字付きで文字列を連結", + SUBSTRING: "部分文字列を抽出", + REPLACE: "文字列内の内容を置換", + TRIM: "先頭と末尾の空白を削除", + UPPER: "大文字に変換", + LOWER: "小文字に変換", + LENGTH: "文字列の長さを返す", + REGEXP_REPLACE: "正規表現で置換", + DATE_FORMAT: "指定された形式で日付をフォーマット", + DATEDIFF: "二つの日付の差を計算", + DATE_ADD: "日付に間隔を加算", + DATE_SUB: "日付から間隔を減算", + EXTRACT: "日付の一部を抽出", + NOW: "現在の日時を返す", + ROUND: "指定された小数点以下桁数で丸める", + FLOOR: "切り捨て", + CEIL: "切り上げ", + ABS: "絶対値を返す", + MOD: "除算の余りを返す", + COALESCE: "最初の非NULL引数を返す", + IFNULL: "NULLの場合に代替値を返す", + NULLIF: "引数が等しい場合にNULLを返す", + CAST: "式を対象の型に変換", + JSON_EXTRACT: "JSONから値を抽出", + JSON_VALUE: "JSONからスカラー値を抽出", + JSON_OBJECT: "JSONオブジェクトを作成", + JSON_ARRAY: "JSON配列を作成", + }, + }, + contextMenu: { + executeSelection: "選択範囲を実行", + executeCurrent: "SQLを実行", + copySelection: "選択範囲をコピー", + selectAll: "すべて選択", + }, + search: { + find: "検索", + replace: "置換", + replaceAll: "すべて置換", + caseSensitive: "大文字/小文字を区別", + regex: "正規表現", + collapseReplace: "置換を折りたたむ", + expandReplace: "置換を展開", + prevMatch: "前へ (Shift+Enter)", + nextMatch: "次へ (Enter)", + close: "閉じる (Esc)", + noResults: "結果なし", + }, + }, + tabs: { + sql: "SQL", + table: "テーブル", + tableData: "テーブルデータ", + redis: "Redis", + etcd: "etcd", + mongo: "Mongo", + objects: "オブジェクト", + users: "ユーザーと権限", + executionSummary: "実行サマリー", + tooltipTitle: "タイトル:", + tooltipConnection: "接続:", + tooltipDatabase: "データベース:", + tooltipTable: "テーブル:", + tooltipCollection: "コレクション:", + tooltipSchema: "スキーマ:", + resultN: "結果 {n}", + runN: "実行 {n}", + resultRuns: "実行履歴", + removeRun: "実行 {n} を削除", + missingResultRun: "この結果は利用できなくなりました", + exportResultArchive: "結果をエクスポート", + importResultArchive: "結果をインポート", + importedResultArchive: "結果をインポートしました", + resultArchiveExported: "結果をエクスポートしました", + resultArchiveImported: "結果をインポートしました", + resultArchiveUnavailable: "エクスポート可能な保存済み結果がありません", + resultArchiveImportInvalid: "この結果アーカイブを開けませんでした", + resultArchiveExportFailed: "結果のエクスポートに失敗しました: {message}", + resultArchiveImportFailed: "結果のインポートに失敗しました: {message}", + scrollLeft: "タブを左にスクロール", + scrollRight: "タブを右にスクロール", + openTabs: "開いているタブ", + openDataTabs: "開いているテーブル", + }, + executionSummary: { + empty: "実行サマリーはありません", + executing: "実行中...", + statement: "ステートメント", + type: "タイプ", + rows: "行数", + affected: "影響行数", + time: "時間", + success: "成功", + error: "エラー", + returnedTable: "{count}列の結果テーブルを返しました", + noTable: "結果テーブルは返されませんでした", + }, + chart: { + title: "グラフ", + type: "タイプ", + line: "折れ線", + bar: "棒", + pie: "円", + noNumericData: "グラフ化できる数値データがありません", + }, + grid: { + rows: "{count}行", + totalRows: "合計 {count}行", + totalRowCount: "(合計 {count})", + totalRowCountLoading: "(カウント中...)", + calculateTotalRows: "総行数をカウント", + calculateTotalRowsInline: "(総行数をカウント)", + calculateTotalRowsFailed: "カウントに失敗しました: {message}", + rowsAffected: "{count}行が影響を受けました", + querySuccess: "クエリが正常に実行されました", + noRows: "データなし", + noRowsDescription: "この結果セットにはレコードがありません。", + noSearchResults: "一致なし", + noSearchResultsDescription: "別のキーワードを試してください。", + noFilteredRows: "フィルターに一致する行がありません", + noFilteredRowsDescription: "検索テキストまたは行ステータスフィルターを調整してください。", + copy: "コピー", + copyDdl: "DDLをコピー", + copyCell: "セルをコピー", + copyRow: "行をコピー (JSON)", + copyColumnJson: "列をコピー (JSON)", + copyRowInsert: "INSERTとしてコピー", + copyRowInsertWithoutPrimaryKeys: "主キーなしでINSERTとしてコピー", + copyRowUpdate: "UPDATEとしてコピー", + copyAll: "すべてコピー (TSV)", + selection: "選択範囲", + copySelectionTsv: "選択範囲をコピー (TSV)", + copySelectionCsv: "選択範囲をコピー (CSV)", + copySelectionJson: "選択範囲をコピー (JSON)", + copySelectionSql: "選択範囲をSQL INリストとしてコピー", + clearSelection: "選択をクリア", + export: "エクスポート", + exportCsv: "CSVエクスポート", + exportXlsx: "XLSXエクスポート", + exportJson: "JSONエクスポート", + exportMarkdown: "Markdownエクスポート", + exportSql: "SQL INSERTエクスポート", + exportSelectedRowsCsv: "選択行をCSVでエクスポート", + exportSelectedRowsXlsx: "選択行をXLSXでエクスポート", + exportSelectedRowsJson: "選択行をJSONでエクスポート", + exportSelectedRowsMarkdown: "選択行をMarkdownでエクスポート", + exportSelectedRowsSql: "選択行をSQL INSERTでエクスポート", + exported: "エクスポートしました", + exportFailed: "エクスポートに失敗しました: {message}", + copied: "コピーしました", + copyFailed: "コピーに失敗しました: {message}", + domRenderMode: "DOM", + canvasRenderMode: "Canvas", + renderModeHint: "CanvasレンダリングとDOMフォールバックグリッドを切り替えます。", + filter: "フィルター", + filterBuilder: "フィルター", + filterBuilderTitle: "フィルター", + filterBuilderHint: "ポイントアンドクリックで条件を作成し、WHERE入力と組み合わせます。", + filterBuilderSummary: "{count}件のルール", + filterBuilderAddRule: "ルールを追加", + filterBuilderColumn: "列", + filterBuilderValue: "値", + filterBuilderNoValue: "値は不要です", + filterBuilderEmpty: "ルールを追加して行のフィルタリングを開始してください。", + resetFilterBuilder: "ルールをリセット", + filterBuilderEquals: "等しい", + filterBuilderNotEquals: "等しくない", + filterBuilderContains: "含む", + filterBuilderNotContains: "含まない", + filterBuilderGreaterThan: "より大きい", + filterBuilderLessThan: "より小さい", + filterBuilderIsNull: "NULLである", + filterBuilderIsNotNull: "NULLでない", + columnActions: "列の操作", + localFilter: "ローカル列フィルター", + localFilterFor: "'{column}'のローカルフィルター", + columnFormatter: "列フォーマッター", + columnFormatterFor: "'{column}'のフォーマッター", + columnFormatterHint: "表示のみをフォーマットし、実際の値は変更されません。", + formatterType: "タイプ", + formatterDatetime: "Unixタイムスタンプ", + formatterJsonPath: "JSONパス", + formatterMask: "テキストをマスク", + formatterCustomTemplate: "カスタムテンプレート", + formatterTimestampUnit: "タイムスタンプ単位", + formatterUnitAuto: "自動", + formatterUnitSeconds: "秒", + formatterUnitMilliseconds: "ミリ秒", + formatterJsonPathInput: "JSONパス", + formatterMaskPrefix: "表示する接頭辞", + formatterMaskSuffix: "表示する接尾辞", + formatterSavedCustom: "保存済みテンプレート", + formatterNewCustom: "新しいテンプレート", + formatterCustomName: "テンプレート名", + formatterCustomNamePlaceholder: "例: ユーザーラベル", + formatterCustomTemplateInput: "テンプレート", + formatterCustomTemplateHint: "利用可能な変数: ${value}, ${upper}, ${lower}, ${length}。名前を付けるとリストに保存されます。", + formatterPreview: "プレビュー", + saveFormatter: "保存", + clearFormatter: "クリア", + searchValues: "値を検索...", + filterTypedValue: "'{value}'を使用", + value: "値", + count: "件数", + applyFilter: "フィルターを適用", + clearLocalFilters: "ローカル列フィルターをクリア", + clearLocalFiltersShort: "ローカルをクリア", + localFiltersActive: "{count}件のローカル列フィルター", + localFilterMoreValues: " +{count}件以上", + columnVisibility: "列", + columnVisibilityHint: "少なくとも1列は表示されます。", + searchColumns: "列を検索...", + invertColumnVisibility: "反転", + showAllColumns: "すべて表示", + viewOptions: "表示オプション", + hideNullColumns: "NULL列を非表示", + hideNullColumnsHint: "現在の結果ですべてNULLの列の表示を切り替えます。", + moreValues: "さらに{count}件の値があります。絞り込むには入力を続けてください", + filterByValue: "この値でフィルター", + filterExcludeValue: "この値を除外", + filterLike: "値を含む", + filterNotLike: "値を含まない", + filterLessThan: "値より小さい", + filterGreaterThan: "値より大きい", + filterIsNull: "NULL値を表示", + filterIsNotNull: "非NULL値を表示", + clearFilter: "フィルターをクリア", + sort: "並び替え", + sortAscending: "昇順", + sortDescending: "降順", + clearSort: "並び替えをクリア", + pasted: "貼り付けました!", + search: "検索...", + searchOrWhere: "検索、またはWHERE句を入力...", + applyWhere: "WHEREを適用", + filterRows: "行をフィルター", + filterAllRows: "すべての行", + filterChangedRows: "変更あり", + page: "{page}ページ", + rowsPerPage: "1ページあたりの行数", + customRowsPerPage: "カスタム行数", + applyPageSize: "適用", + save: "保存", + discard: "破棄", + dismiss: "閉じる", + addRow: "行を追加", + cloneRow: "新しい行として複製", + deleteRow: "行を削除", + deleteRows: "{count}行を削除", + cloneRows: "{count}行を新しい行として複製", + restoreRows: "{count}行を復元", + copyRows: "{count}行をコピー (JSON)", + copyColumnsJson: "{count}列をコピー (JSON)", + copyRowsInsert: "{count}行をINSERTとしてコピー", + copyRowsInsertWithoutPrimaryKeys: "{count}行を主キーなしでINSERTとしてコピー", + copyRowsUpdate: "{count}行をUPDATEとしてコピー", + selectedRows: "{count}行選択中", + restoreRow: "行を復元", + statusClean: "未変更", + statusNew: "新規", + statusEdited: "更新", + statusDeleted: "削除", + pendingChanges: "{count}件の保留中", + selectedCells: "{count}件選択中", + bulkEditSelection: "一括編集", + bulkEditTitle: "一括編集", + bulkEditDescription: "選択した{count}セルにこの値を設定します。", + bulkEditValuePlaceholder: "値、またはNULL", + applyBulkEdit: "適用", + cellDetails: "セル詳細", + cellDetailLayoutBottom: "下部に表示", + cellDetailLayoutRight: "右側に表示", + openCellDetailsDialog: "セル詳細を開く", + rowDetails: "行詳細", + rowDetailsFor: "行 {row} の詳細", + openRowDetailsDialog: "行詳細を開く", + openColumnDetailsDialog: "列詳細を開く", + columnDetailsFor: "{column} 列の詳細", + columnsCount: "{count}列", + rowCount: "行数", + rowsCount: "{count}行", + fieldIndex: "No.", + cellValue: "値", + valueEditor: "値エディタ", + imagePreview: "画像プレビュー", + imageLoadFailed: "画像の読み込みに失敗しました", + geometryPreview: "ジオメトリプレビュー", + layerPreview: "レイヤープレビュー", + zoomIn: "拡大", + zoomOut: "縮小", + fitImage: "ウィンドウに合わせる", + openImage: "画像を開く", + columnName: "列", + columnType: "データ型", + columnComment: "コメント", + rowNumber: "行", + valueLength: "長さ", + nullValue: "NULL", + noComment: "コメントなし", + formattedJson: "フォーマット済みJSON", + formattedValue: "フォーマット済み値", + detailSearchPlaceholder: "フィールドまたは値を検索…", + detailSearchNoMatch: "一致なし", + rawValue: "生の値", + largeValuePreviewHint: "先頭{count}文字をプレビュー表示中です。コピー時は完全な値が使用されます。", + copyValue: "値をコピー", + downloadBinaryValue: "値をダウンロード", + downloadSaved: "{path} に保存しました", + downloadStarted: "ダウンロード開始: {fileName}", + binaryDownload: { + binary: "生バイナリ", + utf8: "デコード済みテキスト (UTF-8)", + gbk: "デコード済みテキスト (GBK)", + }, + copyRowTsv: "行をコピー (TSV)", + copyColumnValues: "列をコピー (JSON)", + copyColumnTsv: "列をコピー (TSV)", + editValue: "値を編集", + formatJson: "JSONをフォーマット", + setNull: "NULLに設定", + restoreOriginalValue: "元の値に戻す", + copyColumnName: "列名をコピー", + copyAlterColumnSql: "SQL ALTERとしてコピー", + alterSqlCopied: "SQL ALTERをクリップボードにコピーしました", + alterSqlCopiedWithWarnings: "SQL ALTERをクリップボードにコピーしました({count}件の警告)", + noAlterSqlAvailable: "この列に利用可能なALTER SQLはありません", + copyAlterSqlFailed: "コピーに失敗しました: {message}", + copySqlCondition: "SQL条件をコピー", + transpose: "行を転置", + transposeMultiRowToggle: "複数行", + transposeSingleRow: "現在の行", + transposeMultiRow: "複数行", + transposeMultiRowHint: "有効時は転置ビューに複数行が表示されます。無効時は現在の行のみ表示されます。", + rowsPerPageShort: " 行", + columnDetails: "列詳細", + tableInfo: "テーブル情報", + tableInfoColumns: "列", + tableInfoIndexes: "インデックス", + tableInfoForeignKeys: "外部キー", + tableInfoTriggers: "トリガー", + tableInfoNullable: "NULL許容", + tableInfoEmpty: "メタデータなし", + tableInfoSearch: "検索...", + tableInfoNoResults: "結果なし", + queryError: "クエリエラー", + dataUnavailable: "テーブルデータを再読み込みする必要があります。", + dataUnavailableHintPrefix: "", + dataUnavailableHintSuffix: " を押すか、下の更新ボタンをクリックして再読み込みしてください。", + refresh: "更新", + commit: "コミット", + rollback: "ロールバック", + transactionSaveHint: "{count}件の保留中の変更をトランザクションでコミットします。", + nonTransactionalSaveHint: "{count}件の保留中の変更を1件ずつ保存します。途中で失敗した場合、それまでの成功した変更はロールバックされません。", + keylessEditWarning: "主キーなし", + keylessEditWarningHint: "このテーブルには主キーがありません。更新と削除はWHERE句にすべての元の行値を使用します。完全に重複する行はまとめて影響を受ける可能性があります。", + queryEditReady: "編集可能", + queryEditReadyHint: "この単一テーブル結果は「{table}」から取得されています。行の編集、削除、追加が可能で、保留中の変更アクションから保存できます。", + queryEditReadOnly: "読み取り専用の結果", + queryEditUnsupported: { + "not-select": "SELECTクエリの結果のみ直接編集できます。", + cte: "WITH/CTEを使用したクエリはまだ編集できません。単純な単一テーブルSELECTを使用してください。", + "set-operation": "UNION、INTERSECT、EXCEPTの結果はソース行に安全にマッピングできません。", + aggregation: "DISTINCT、GROUP BY、HAVING、および集計結果は直接編集できません。", + "external-source": "外部ファイルとテーブル関数の結果は直接書き戻せません。編集前にデータベーステーブルにインポートしてください。", + "complex-source": "JOIN、複数テーブル、サブクエリは1つのソース行に安全にマッピングできません。", + "computed-columns": "計算式や関数の結果は書き戻せません。代わりに生の列名を選択してください。", + "no-table": "編集可能なソーステーブルが検出されませんでした。", + "no-primary-key": "対象テーブルに主キーがないため、行を安全に更新または削除できません。", + "primary-key-not-returned": "結果に生の主キー列が含まれていません。元の列名で含めてください。", + "aliased-columns": "結果の列がエイリアスや式を使用しています。元の名前で編集可能な列を選択してください。", + "metadata-unavailable": "DBXがテーブルメタデータを読み込めなかったため、結果の編集は無効です。", + }, + sortUnsupported: "このSQLは完全な結果の並び替えをサポートしていません。単一のSELECTクエリで再試行してください。", + truncatedHint: "結果は{count}行に切り詰められました。フッターのページネーションを使用するか、1ページあたりの行数を調整してください。", + }, + exportProgress: { + title: "テーブルデータをエクスポート中", + fetching: "データベースからデータを取得中...", + writing: "ファイルに書き込み中...", + done: "エクスポートが完了しました!", + error: "エクスポートに失敗しました", + cancelled: "エクスポートがキャンセルされました。", + rowsCount: "{exported} / {total} 行", + rowsExported: "{count}行をエクスポートしました", + rowsShort: "行", + cancel: "キャンセル", + close: "閉じる", + tooltip: "エクスポートの進行状況", + popoverTitle: "エクスポート", + noTasks: "エクスポートはありません", + clearFinished: "完了をクリア", + showMore: "さらに{count}件表示", + showLess: "少なく表示", + delete: "削除", + }, + welcome: { + title: "データベースワークスペース", + subtitle: "左側の接続を選択してスキーマを参照するか、直接クエリタブを開いてください。", + connections: "接続", + connected: "接続済み", + databaseTypes: "データベースタイプ", + quickConnections: "クイックスタート", + quickConnectionsHint: "接続をクリックしてクエリタブを開きます。", + shortcuts: "ショートカット", + shortcutsHint: "ここから次の操作を開始します。", + sqlHistory: "クエリ履歴", + sqlHistoryEmpty: "SQLライブラリの記録はまだありません", + sqlHistoryOpenCount: "{count}回開きました", + unknownConnection: "不明な接続", + tip: "左側の接続を展開し、データベースやテーブルを右クリックしてさらに操作できます。", + tipSidebar: "左側のテーブルをクリックしてデータを表示", + tipExecute: "でクエリを実行", + fileOpened: "{name} を開きました", + mcpTitle: "AIエージェント連携", + mcpDescription: "内蔵AIアシスタントに加えて、Claude Code、Cursor、その他のコーディングエージェントをMCP経由でデータベースクエリに使用できます。", + mcpLearnMore: "詳細を見る", + }, + common: { + language: "言語", + loading: "読み込み中...", + stopping: "停止中...", + close: "閉じる", + cancel: "キャンセル", + save: "保存", + more: "もっと見る", + }, + explain: { + title: "実行計画", + tree: "ツリー", + summary: "サマリー", + running: "実行計画を読み取り中...", + empty: "実行計画がありません", + nodeCount: "{count}ノード", + node: "ノード", + relation: "テーブル", + index: "インデックス", + cost: "コスト", + rows: "行数", + details: "詳細", + unsupported: "このデータベースではまだ実行計画をサポートしていません", + emptySql: "実行計画を表示するSQLがありません", + unsafe: "この最初のバージョンではSELECT / WITH / TABLE / VALUES文のみの実行計画を表示します", + }, + lineage: { + title: "フィールドリネージ", + open: "フィールドリネージを表示", + loading: "メタデータを読み取り中 {done}/{total}", + empty: "関連するリネージが見つかりません", + noFiltered: "現在のフィルターに一致する結果はありません", + targetField: "現在のフィールド", + searchPlaceholder: "テーブル、フィールド、ビュー、SQLスニペットを検索...", + showing: "{shown}/{total}件の結果を表示中", + all: "すべて", + certain: "確定", + likely: "可能性高", + possible: "可能性あり", + queryHistory: "クエリ履歴", + openTable: "テーブルを開く", + copy: "名前をコピー", + copied: "コピーしました", + kind: { + foreignKey: "外部キー", + viewReference: "ビュー", + historyReference: "SQL履歴", + sameName: "同名", + }, + description: { + foreignKeyIncoming: "{target} は外部キーを通じて現在のフィールドを参照しています。これは検証済みの依存関係です。", + foreignKeyOutgoing: "現在のフィールドは外部キーを通じて {target} を参照しています。これは検証済みの依存関係です。", + viewLikely: "ビュー定義が対象テーブルとフィールドの両方に言及しています。通常はクエリ依存関係を示します。", + viewPossible: "ビュー定義が同名フィールドに言及していますが対象テーブルには言及していないため、確認が必要です。", + historyLikely: "履歴SQL文が対象テーブルとフィールドの両方に言及しています。影響分析のコンテキストとして使用してください。", + historyPossible: "履歴SQL文が同名フィールドに言及しています。関連している可能性がありますがコンテキストが必要です。", + sameName: "別のテーブルに同名フィールドがあります。ビジネス上の意味を共有している可能性がありますが、検証済みのデータベース依存関係ではありません。", + }, + cancel: "キャンセル", + refresh: "再分析", + }, + connectionGroup: { + createGroup: "新しいグループ", + groupNamePlaceholder: "グループ名", + renameGroup: "グループ名を変更", + deleteGroup: "グループを削除", + moveToGroup: "グループに移動", + moveToNewGroup: "新しいグループに移動", + ungrouped: "グループなし", + newGroup: "新しいグループ...", + newGroupDefault: "新しいグループ", + deleteGroupConfirmTitle: "グループを削除", + deleteGroupConfirmMessage: "グループ「{name}」を削除しますか?グループ内の接続はトップレベルに移動されます。", + }, + databaseSearch: { + title: "データベース検索", + open: "データベース検索", + keyword: "キーワード", + keywordPlaceholder: "ユーザーID、メールアドレス、注文番号などを入力...", + limitPerTable: "テーブルあたり", + search: "検索", + searching: "検索中", + stop: "停止", + hint: "現在のデータベースまたはスキーマ内の通常テーブルをスキャンします。バイナリ列はスキップされ、一度に過剰なデータを読み込まないよう各テーブルに上限が設定されています。", + loadingTables: "テーブル一覧を読み取り中...", + progress: "{done}/{total}テーブルをスキャンしました", + resultCount: "{count}件の一致", + limitedTables: "大規模スキーマが検出されました。最初の{count}テーブルのみスキャンされます", + results: "結果", + openResult: "開く", + waiting: "一致を待機中...", + noResults: "一致する結果はまだありません", + errors: "一部のテーブルで失敗しました", + }, + configExport: { + passphraseTitle: "暗号化してエクスポート", + passphraseImportTitle: "復号してインポート", + passphraseExportHint: "エクスポートに接続パスワードを含めるには、暗号化用のパスフレーズを設定してください。インポート時に同じパスフレーズが必要です。", + passphraseImportHint: "このファイルは暗号化されています。復号してインポートするためにパスフレーズを入力してください。", + passphrase: "パスフレーズ", + passphraseConfirm: "パスフレーズを確認", + passphrasePlaceholder: "パスフレーズを入力", + passphraseConfirmPlaceholder: "パスフレーズを再入力", + passphraseRequired: "パスフレーズは必須です", + passphraseMismatch: "パスフレーズが一致しません", + passphraseTooShort: "パスフレーズは4文字以上必要です", + exportEncrypted: "エクスポート", + decryptImport: "復号してインポート", + wrongPassphrase: "パスフレーズが間違っているか、ファイルが破損しています", + cryptoUnavailable: "暗号化設定のインポートはこのブラウザ環境では利用できません。HTTPS、localhost、またはDBX Desktopを使用してください。", + exportSuccess: "接続を正常にエクスポートしました", + importSuccess: "{count}件の接続をインポートしました", + importNavicatSuccess: "{count}件のNavicat接続をインポートしました。テスト前にパスワードが空の接続を入力してください。", + importDatagripSuccess: "{count}件のDataGrip接続をインポートし、macOSキーチェーンから{filled}件のパスワードを復元しました。", + importDbeaverSuccess: "{count}件のDBeaver接続をインポートしました。テスト前にパスワードが空の接続を入力してください。", + importNone: "インポートする新しい接続はありません", + importLayoutConfirm: "インポートされたファイルに接続グループが含まれています。適用しますか?", + importLayoutTitle: "グループをインポート", + importLayoutApply: "適用", + }, + ai: { + placeholder: "自然言語でクエリを説明してください...", + settings: "AI設定", + noConfig: "AIが設定されていません。設定 > AIでAIプロバイダーを設定してください。", + provider: "プロバイダー", + model: "モデル", + browseModels: "モデルを参照", + refreshModels: "モデルを更新", + loadingModels: "モデルを読み込み中...", + searchModels: "モデルを検索", + noModels: "モデルが読み込まれていません", + modelListHint: "更新をクリックしてプロバイダーからモデルを読み込んでください。", + modelListUnsupported: "このプロバイダーはモデル一覧の取得をサポートしていません。", + modelListEndpointRequired: "モデルを読み込む前にエンドポイントを入力してください。", + modelListApiKeyRequired: "モデルを読み込む前にAPIキーを入力してください。", + run: "実行", + readingSchema: "スキーマを読み取り中", + noConnection: "このタブに利用可能な接続がありません", + noSql: "処理するSQLがありません", + sqlPreview: "SQLプレビュー", + copySql: "SQLをコピー", + copyCode: "コードをコピー", + executeSql: "SQLを実行", + copyAll: "すべてコピー", + copied: "コピーしました", + replace: "エディタを置換", + append: "エディタに追加", + apply: "エディタに適用", + clear: "チャットをクリア", + welcome: "クエリしたい内容を教えてください。SQLを作成します", + newChat: "新しいチャット", + thinking: "思考中...", + reasoningProcess: "思考プロセス", + stopGenerating: "生成を停止", + tableMentionEmpty: "一致するテーブルがありません", + tableMentionPlaceholderHint: "{'@'}を入力してコンテキスト用のテーブルを指定", + tableMentionTypes: { + table: "テーブル", + view: "ビュー", + systemTable: "システムテーブル", + temporaryTable: "一時テーブル", + }, + modes: { + ask: "質問", + agent: "エージェント", + }, + modeHints: { + ask: "SQLと説明を生成します(自動実行しません)", + agent: "可能な場合に安全なクエリを自動実行します", + }, + fixWithAi: "AIで修正", + truncated: "コンテキストが切り詰められました", + contextSummary: "{database} · {tables}テーブル", + autoSqlBlocked: "AIが生成したSQLは自動実行するにはリスクが高すぎると判断されました。実行前に手動で確認してください。", + agentSteps: { + generated: "SQL生成完了", + noSql: "SQLが見つかりません", + safe: "安全性チェック合格", + needsConfirm: "確認が必要", + blocked: "ブロックされました", + autoExecute: "実行準備完了", + notRequested: "実行は要求されていません", + skipped: "未実行", + callingTool: "ツールを呼び出し中...", + toolDone: "ツール完了", + toolError: "ツールエラー", + }, + agentStepTitles: { + riskCheck: "リスクチェック: {action} · {category} · {environment} · {reasons}", + blocked: "リスクポリシーにより実行がブロックされました。SQLを手動で確認してください。", + requiresConfirmation: "このSQLは実行前に確認が必要です。", + askMode: "質問モードではSQLを自動実行しません。", + unsupportedAction: "現在のAIアクションではSQLを自動実行しません。", + noSql: "応答に実行可能なSQLコードブロックが含まれていませんでした。", + notRequested: "ユーザーがSQLの実行を要求しませんでした。", + skipped: "このステップは実行されませんでした。", + }, + proxy: "プロキシ", + proxyEnable: "プロキシ経由でAIリクエストを送信", + proxyUrl: "プロキシURL", + enableThinking: "思考", + enableThinkingOn: "有効", + enableThinkingOff: "無効", + enableThinkingHint: "このオプションは/chat/completions APIとサポートされているモデルでのみ有効です。無効にするとトークン使用量を大幅に削減できますが、生成結果の品質が若干低下する可能性があります。", + actions: { + generate: "SQLを生成", + explain: "SQLを説明", + optimize: "SQLを最適化", + fix: "エラーを修正", + convert: "方言を変換", + sampleData: "サンプルデータ", + }, + placeholders: { + generate: "クエリしたい内容を説明してください(例: 過去7日間のユーザーごとの注文数)", + explain: "任意: 理解したい内容を追加", + optimize: "任意: 目標を追加(例: フルテーブルスキャンを減らす)", + fix: "エラーを貼り付けるか、期待する結果を説明してください", + convert: "例: PostgreSQL / MySQL / SQL Serverに変換", + sampleData: "生成するサンプルデータやテスト文を説明してください", + }, + }, + contextMenu: { + openConnection: "接続を開く", + closeConnection: "接続を閉じる", + closeDatabaseConnection: "データベース接続を閉じる", + deleteConnection: "接続を削除", + deleteSelectedConnections: "選択した{count}件の接続を削除", + confirmDeleteTitle: "接続を削除", + confirmDeleteMessage: "本当に「{name}」を削除しますか?この操作は取り消せません。", + confirmDeleteSelectedMessage: "選択した{count}件の接続を削除しますか?この操作は取り消せません。", + editConnection: "接続を編集", + revealDatabaseFile: "ファイルマネージャーで表示", + selectVisibleDatabases: "表示するデータベースを選択", + userAdmin: "ユーザーと権限", + openUserAdmin: "ユーザーと権限を開く", + duplicateConnection: "接続を複製", + newQuery: "新しいクエリ", + newSql: "新しいSQL", + newInsert: "新しいINSERT", + newUpdate: "新しいUPDATE", + sqlHistory: "クエリ履歴", + noSqlHistory: "関連するSQLはありません", + openObjectBrowser: "オブジェクトを参照", + viewData: "データを表示", + editStructure: "構造を編集", + refreshChildren: "更新", + pin: "ピン留め", + unpin: "ピン留め解除", + refreshTab: "データを更新", + renameTab: "タブ名を変更", + duplicateTab: "タブを複製", + compactTabTitle: "タブタイトルを短縮", + closeTab: "タブを閉じる", + closeOtherTabs: "他のタブを閉じる", + closeAllTabs: "すべてのタブを閉じる", + copyName: "名前をコピー", + copyFinalProxyPort: "最終プロキシポートをコピー", + finalProxyPortCopied: "最終プロキシポート {port} をコピーしました", + setDefaultDatabase: "デフォルトデータベースに設定", + clearDefaultDatabase: "デフォルトデータベースをクリア", + exportDatabase: "データベースをエクスポート", + exportDatabaseSuccess: "{count}テーブルをエクスポートしました(各{limit}行まで)", + exportDatabaseFailed: "データベースのエクスポートに失敗しました: {message}", + backupSqliteDatabase: "SQLiteデータベースをバックアップ", + backupSqliteDatabaseInProgress: "SQLiteデータベースをバックアップ中...", + backupSqliteDatabaseSuccess: "SQLiteデータベースをバックアップしました", + backupSqliteDatabaseFailed: "SQLiteデータベースのバックアップに失敗しました: {message}", + importData: "データをインポート", + exportData: "データをエクスポート", + exportStructure: "構造をエクスポート", + exportStructurePreviewTitle: "構造 - {name}", + exportStructurePreviewTitleMultiple: "構造 - {count}オブジェクト", + exportStructureLoading: "構造を読み込み中...", + copyStructure: "構造をコピー", + copyStructureAs: "構造をコピー(形式指定)", + copyStructureAsTsv: "TSV(Excel用)", + copyStructureAsMarkdown: "Markdownテーブル", + structureDocTable: "テーブル", + structureDocColumn: "列", + structureDocType: "タイプ", + structureDocPrimaryKey: "主キー", + structureDocNullable: "NULL許容", + structureDocDefault: "デフォルト", + structureDocComment: "コメント", + structureDocYes: "はい", + structureDocNo: "いいえ", + structureDocCopied: "構造をコピーしました", + structureDocCopyFallbackHint: "自動コピーがブロックされました。再度コピーをクリックするか、下の内容を選択してください。", + saveStructure: "SQLを保存", + exportStructureCopied: "構造をコピーしました", + createTable: "テーブルを作成", + createView: "ビューを作成", + dropTable: "テーブルを削除", + emptyTable: "テーブルを空にする", + truncateTable: "テーブルをトランケート", + duplicateStructure: "新しいテーブルとして複製", + renameObject: "名前を変更", + renameObjectTitle: "オブジェクト名を変更", + renameObjectNamePlaceholder: "新しい名前", + renameObjectSuccess: "「{oldName}」の名前を「{newName}」に変更しました", + confirmDropTableTitle: "テーブルを削除", + confirmDropTableMessage: "本当にテーブル「{name}」をドロップ(削除)しますか?テーブルとすべてのデータが永久に削除されます。", + confirmEmptyTableTitle: "テーブルを空にする", + confirmEmptyTableMessage: "本当に「{name}」のすべてのデータを削除しますか?", + confirmTruncateTableTitle: "テーブルをトランケート", + confirmTruncateTableMessage: "本当に「{name}」をトランケート(空に)しますか?すべての行が削除されます。", + dropTableSuccess: "テーブル「{name}」をドロップ(削除)しました", + editView: "ビューを編集", + viewSource: "ソースを表示", + viewDdl: "DDLを表示", + dropObject: "オブジェクトを削除", + dropView: "ビューを削除", + dropColumn: "列を削除", + dropIndex: "インデックスを削除", + dropForeignKey: "外部キーを削除", + dropTrigger: "トリガーを削除", + batchDrop: "選択を削除({count}件)", + executeProcedure: "プロシージャを実行", + confirmExecuteProcedureTitle: "プロシージャを実行", + confirmExecuteProcedureMessage: "プロシージャ「{name}」を実行しますか?実行前に入力パラメータの値を設定・調整できます。", + loadingProcedureParameters: "パラメータを読み込み中...", + procedureParametersUnavailable: "パラメータメタデータを読み込めませんでした。以下のSQLを編集して実行することはできます。", + noProcedureParameters: "パラメータが見つかりませんでした。現在のSQLがそのまま実行されます。", + inputParameters: "{count}個の入力パラメータ", + outputParameters: "{count}個の出力パラメータ", + parameterName: "名前", + parameterType: "タイプ", + parameterMode: "モード", + parameterValue: "値", + parameterNull: "NULL", + parameterDefault: "DEFAULT", + parameterDefaultHint: "DEFAULTがチェックされている場合、DBXはその引数を省略し、データベースがプロシージャのデフォルト値を使用します。", + parameterValuePlaceholder: "値を入力", + outputOnly: "出力のみ", + sqlPreview: "SQLプレビュー", + resetSqlPreview: "SQLをリセット", + openInSqlEditor: "エディタで開く", + dropProcedure: "プロシージャを削除", + dropFunction: "関数を削除", + confirmDropViewTitle: "ビューを削除", + confirmDropViewMessage: "本当にビュー「{name}」を削除しますか?", + confirmDropObjectTitle: "オブジェクトを削除", + confirmDropObjectMessage: "本当に「{name}」を削除しますか?", + confirmDropColumnTitle: "列を削除", + confirmDropIndexTitle: "インデックスを削除", + confirmDropForeignKeyTitle: "外部キーを削除", + confirmDropTriggerTitle: "トリガーを削除", + confirmDropTableChildObjectMessage: "本当に「{table}」から「{name}」を削除しますか?", + confirmBatchDropTitle: "選択したオブジェクトを削除", + confirmBatchDropMessage: "選択した{count}個のオブジェクトを削除しますか?この操作は取り消せません。", + confirmDropProcedureTitle: "プロシージャを削除", + confirmDropProcedureMessage: "本当にプロシージャ「{name}」を削除しますか?", + confirmDropFunctionTitle: "関数を削除", + confirmDropFunctionMessage: "本当に関数「{name}」を削除しますか?", + dropViewSuccess: "ビュー「{name}」を削除しました", + dropProcedureSuccess: "プロシージャ「{name}」を削除しました", + dropFunctionSuccess: "関数「{name}」を削除しました", + dropTableChildObjectSuccess: "「{name}」を削除しました", + batchDropSuccess: "{count}個のオブジェクトを削除しました", + emptyTableSuccess: "「{name}」のすべてのデータを削除しました", + truncateTableSuccess: "テーブル「{name}」をトランケートしました", + duplicateStructureSuccess: "テーブルを「{name}」として複製しました", + tableOperationFailed: "操作に失敗しました: {message}", + duplicateNameTitle: "新しいテーブルとして複製", + duplicateNamePlaceholder: "新しいテーブル名", + createDatabase: "データベースを作成", + createDuckDbFile: "データベースファイルを作成", + dropDatabase: "データベースを削除", + confirmDropDatabaseTitle: "データベースを削除", + confirmDropDatabaseMessage: "本当にデータベース「{name}」をドロップ(削除)しますか?データベースとすべてのデータが永久に削除されます。", + createDatabaseSuccess: "データベース「{name}」を作成しました", + createDuckDbFileSuccess: "DuckDBデータベースファイル「{name}」を作成し、アタッチしました", + createDuckDbFileDesktopOnly: "DuckDBデータベースファイルの作成はデスクトップアプリでのみ利用可能です", + dropDatabaseSuccess: "データベース「{name}」を削除しました", + createDatabaseNamePlaceholder: "データベース名", + createDatabaseCharset: "文字セット", + createDatabaseCharsetPlaceholder: "例: utf8mb4", + createDatabaseCollation: "照合順序", + createDatabaseCollationPlaceholder: "例: utf8mb4_unicode_ci", + createSchema: "スキーマを作成", + dropSchema: "スキーマを削除", + confirmDropSchemaTitle: "スキーマを削除", + confirmDropSchemaMessage: "本当にスキーマ「{name}」を削除しますか?スキーマとすべてのオブジェクトが永久に削除されます。", + createSchemaSuccess: "スキーマ「{name}」を作成しました", + dropSchemaSuccess: "スキーマ「{name}」を削除しました", + createSchemaNamePlaceholder: "スキーマ名", + }, + visibleDatabases: { + title: "表示するデータベース", + description: "「{connection}」の下に表示するデータベースを選択してください。", + searchPlaceholder: "データベースを検索...", + selectedCount: "{selected}/{total}件選択中", + selectAll: "すべて選択", + selectFiltered: "検索結果を選択", + clear: "クリア", + showAll: "すべて表示", + showSystemDatabases: "システムデータベースを表示", + save: "保存", + emptySelection: "少なくとも1つのデータベースを選択するか、すべて表示でフィルターをクリアしてください。", + loadFailed: "データベースの読み込みに失敗しました: {message}", + }, + tree: { + savedSql: "SQLライブラリ", + userAdmin: "ユーザーと権限", + defaultDatabase: "デフォルトDB", + columns: "列", + indexes: "インデックス", + foreignKeys: "外部キー", + triggers: "トリガー", + tables: "テーブル", + views: "ビュー", + procedures: "プロシージャ", + functions: "関数", + sequences: "シーケンス", + packages: "パッケージ", + partitions: "パーティション", + loadMore: "もっと読み込む...", + objectBrowser: "オブジェクトブラウザで参照({count}件)", + }, + userAdmin: { + title: "ユーザーと権限", + unsupported: "MySQL互換およびPostgreSQL互換の接続がサポートされています。SQL Server、Oracle、その他の権限モデルは今後追加予定です。", + newUser: "新しいユーザー", + anonymous: "匿名", + roleName: "ロール名", + allowLogin: "ログインを許可", + searchUser: "ユーザーまたはホストを検索", + loadingUsers: "ユーザーを読み込み中...", + loadingGrants: "権限を読み込み中...", + emptyUsers: "ユーザーが見つからないか、現在のアカウントにユーザー一覧の読み取り権限がありません。", + pluginUnknown: "認証プラグインが不明です", + grants: "権限", + noGrants: "権限が見つかりません", + privilegeEditor: "権限エディタ", + privilegeHint: "権限、データベース、テーブルを選択し、適用前にSQLをプレビューしてください。* はグローバルまたは全テーブルを意味します。", + database: "データベース", + schema: "スキーマ", + table: "テーブル", + scope: "権限スコープ", + scopeDatabase: "データベース", + scopeSchema: "スキーマ", + scopeTable: "テーブル", + scopeRole: "ロールメンバーシップ", + memberRole: "メンバーロール", + privileges: "権限", + grantOption: "さらなる権限付与を許可 (WITH GRANT OPTION)", + adminOption: "メンバーシップ管理を許可 (WITH ADMIN OPTION)", + grant: "付与", + revoke: "取り消し", + username: "ユーザー名", + host: "ホスト", + changePassword: "パスワードを変更", + newPassword: "新しいパスワード", + lock: "ロック", + unlock: "ロック解除", + disableLogin: "ログインを無効化", + enableLogin: "ログインを有効化", + dropUser: "ユーザーを削除", + previewSql: "SQLをプレビュー", + sqlPreview: "SQLプレビュー", + applySql: "SQLを適用", + applySuccess: "ユーザー権限を更新しました", + applyFailed: "実行に失敗しました: {message}", + }, + objects: { + all: "すべて", + tables: "テーブル", + views: "ビュー", + procedures: "プロシージャ", + functions: "関数", + sequences: "シーケンス", + packages: "パッケージ", + table: "テーブル", + partitions: "{count}パーティション", + view: "ビュー", + procedure: "プロシージャ", + function: "関数", + sequence: "シーケンス", + package: "パッケージ", + packageBody: "パッケージボディ", + name: "名前", + type: "タイプ", + createdAt: "作成日時", + updatedAt: "更新日時", + source: "ソース", + saveSource: "保存", + cancelEdit: "キャンセル", + sourceSaved: "ソースを保存しました", + sourceSaveFailed: "ソースの保存に失敗しました: {message}", + schemaColumn: "スキーマ", + comment: "コメント", + loadingSchemas: "スキーマを読み込み中...", + schema: "スキーマ", + search: "テーブル、ビュー、関数、シーケンス、プロシージャを検索...", + loading: "オブジェクトを読み込み中...", + empty: "オブジェクトが見つかりません", + selectedTables: "{count}テーブル選択中", + exportSelected: "選択をエクスポート", + dropSelected: "選択を削除", + clearSelection: "選択をクリア", + confirmBatchDropTitle: "選択したテーブルを削除", + confirmBatchDropMessage: "選択した{count}テーブルを削除しますか?この操作は取り消せません。", + batchDropSuccess: "{count}テーブルを削除しました", + }, + structureEditor: { + title: "テーブル構造を編集", + createTitle: "テーブルを作成", + editTabTitle: "編集: {tableName}", + tableName: "テーブル名", + refresh: "構造を更新", + density: "密度", + densityCompact: "コンパクト", + densityStandard: "標準", + densityComfortable: "快適", + columns: "列", + indexes: "インデックス", + foreignKeys: "外部キー", + triggers: "トリガー", + ddl: "DDL", + addColumn: "列を追加", + addIndex: "インデックスを追加", + addForeignKey: "外部キーを追加", + addTrigger: "トリガーを追加", + columnName: "列", + dataType: "データ型", + typePlaceholder: "選択または入力...", + noMatchingType: "一致する型がありません", + length: "長さ", + nullable: "NULL許容", + primaryKey: "主キー", + defaultValue: "デフォルト", + comment: "コメント", + editComment: "コメントを編集", + commentPlaceholder: "列コメントを入力...", + tableCommentPlaceholder: "テーブルコメントを入力...", + tableCommentUnsupported: "このデータベースではテーブルコメントはサポートされていません", + actions: "操作", + indexName: "インデックス", + indexColumns: "列", + indexColumnsPlaceholder: "列を選択...", + unique: "一意", + indexType: "タイプ", + includedColumns: "付加列", + includedColumnsPlaceholder: "列を選択...", + filter: "フィルター", + foreignKeyName: "外部キー", + referencedSchema: "参照スキーマ", + referencedTable: "参照テーブル", + referencedColumn: "参照列", + onDelete: "削除時", + onUpdate: "更新時", + defaultAction: "デフォルト", + triggerName: "トリガー", + triggerStatement: "トリガー文", + primary: "主キー", + drop: "削除", + restore: "復元", + remove: "削除", + moveColumnUp: "列を上に移動", + moveColumnDown: "列を下に移動", + yes: "はい", + no: "いいえ", + emptyReadonly: "レコードなし", + sqlPreview: "SQLプレビュー", + noChanges: "変更なし", + apply: "変更を適用", + ready: "準備完了", + saved: "テーブル構造を更新しました", + copySql: "SQLをコピー", + extendedProperties: "拡張", + autoIncrement: "自動採番", + onUpdateCurrentTimestamp: "自動更新時刻", + identity: "ID列", + identityGeneration: "生成", + identitySeed: "開始値", + identityIncrement: "増分", + }, + diagram: { + title: "リレーション図", + open: "図を表示", + selectConnection: "接続を選択", + selectDatabase: "データベースを選択", + selectSchema: "スキーマを選択", + searchTables: "テーブル、列、キーを検索...", + refresh: "図を更新", + loading: "リレーションを読み取り中...", + loadingProgress: "リレーションを読み取り中... {loaded}/{total}", + partialError: "読み込みに失敗した{count}テーブルのメタデータをスキップしました", + selectTarget: "接続とデータベースを選択してください", + empty: "表示するテーブルがありません", + noMatches: "一致するテーブルがありません", + tablesCount: "{count}テーブル", + relationshipsCount: "{count}リレーション", + tableMode: "テーブルビュー", + engineeringMode: "エンジニアリングER", + allTables: "全テーブル", + relatedTables: "関連テーブル", + moreColumns: "+ {count}列", + exportSvg: "SVGエクスポート", + exportedSvg: "SVGをエクスポートしました", + exportSvgFailed: "SVGのエクスポートに失敗しました: {message}", + zoomIn: "拡大", + zoomOut: "縮小", + resetLayout: "レイアウトをリセット", + }, + etcd: { + prefixPlaceholder: "プレフィックス、例: /app/", + newKey: "新しいキー", + loadingKeys: "キーを読み込み中...", + empty: "キーが見つかりません", + loadMore: "もっと読み込む", + selectKey: "キーを選択して値を表示", + loadingValue: "値を読み込み中...", + notFound: "キーが見つかりません", + edit: "編集", + editKey: "キーを編集", + delete: "削除", + deleteTitle: "etcdキーを削除", + keyPlaceholder: "/path/to/key", + keyRequired: "キーは必須です", + saved: "キーを保存しました", + deleted: "キーを削除しました", + base64Readonly: "Base64値はこのバージョンでは読み取り専用です。", + }, + redis: { + selectKey: "キーを選択して値を表示", + noKeys: "キーが見つかりません", + pattern: "パターン(例: user:*)", + fuzzyPattern: "キーを含む...", + fuzzyMatch: "あいまい", + fuzzyMatchTitle: "あいまい検索: プレーンテキストの部分一致でキーを検索", + valueSearchPlaceholder: "値を含む...", + allSearchPlaceholder: "キーまたは値を含む...", + searchByKey: "キー", + searchByValue: "値", + searchByAll: "すべて", + keys: "{count}キー", + loadingKeys: "キーを読み込み中...", + searchingValues: "値を検索中...", + searchingAll: "キーと値を検索中...", + loadMoreKeys: "さらにキーを読み込む", + fetchAllKeys: "すべて取得", + stopFetchAll: "停止", + fetchAllProgress: "{loaded}/{total}キー読み込み完了", + fetchAllProgressUnknown: "{loaded}キー読み込み完了", + items: "{count}アイテム", + fields: "{count}フィールド", + members: "{count}メンバー", + loadedItems: "{loaded}/{total}アイテム読み込み完了", + loadedFields: "{loaded}/{total}フィールド読み込み完了", + loadedMembers: "{loaded}/{total}メンバー読み込み完了", + entries: "{count}エントリ", + noExpiry: "期限なし", + columnType: "型", + columnKey: "キー", + columnValue: "値", + columnSize: "サイズ", + columnTTL: "TTL", + binaryStringReadonlyHint: "バイナリ文字列値は読み取り専用モードでエスケープテキストとして表示されます。生バイトの編集はサポートされていません。", + selectedKeys: "選択中のキー", + deleteGroup: "グループを削除", + deleteGroupDetails: "{target}\n{count}個のキー", + flushDb: "現在のDBをクリア", + flushDbMessage: "現在のRedisデータベース内のすべてのキーが削除されます。この操作は取り消せません。続行しますか?", + flushDbDetails: "対象: Redis db{db}\n範囲: 現在のDB内のすべてのキー", + flushDbConfirm: "DBをクリア", + flushDbSuccess: "Redis db{db}をクリアしました", + keyDetail: "キー詳細", + commandLine: "コマンドライン", + selectKeyForDetail: "キーを選択して詳細を表示", + commandWelcome: "Redisコマンドコンソールへようこそ", + commandPlaceholder: "Redisコマンド(例: GET user:1)", + commandPrefix: "CMD", + commandHint: "Redisコマンドを入力(例: SMEMBERS feature:flags)", + executeCommand: "コマンドを実行", + commandEmpty: "Redisコマンドを入力してください", + commandEmptyResult: "Redisコマンドを実行すると結果が表示されます", + commandBlocked: "このRedisコマンドは安全のためブロックされています", + createKey: "キーを作成", + createKeyName: "キー", + createKeyNamePlaceholder: "user:1", + createKeyType: "タイプ", + createValue: "値", + createMember: "メンバー", + createField: "フィールド", + createFieldPlaceholder: "name", + createScore: "スコア", + createKeyTtl: "TTL(秒)", + createKeyTtlPlaceholder: "空 = 期限なし", + createKeyAddEntry: "エントリを追加", + createKeyEntryId: "エントリID", + createKeyRawMode: "直接入力", + createKeyEntries: "エントリ", + createValuePlaceholder: "value", + createKeySubmit: "作成", + createKeyNameRequired: "キー名を入力してください", + createFieldRequired: "ハッシュフィールドを入力してください", + createScoreInvalid: "有効なスコアを入力してください", + jsonModuleNotAvailable: "このRedisサーバーにReJSONモジュールがロードされていません", + fieldRequired: "フィールド名を入力してください", + valueRequired: "値を入力してください", + memberRequired: "メンバーを入力してください", + ttlInvalid: "有効なTTLを秒で入力してください(-1で期限なし)", + member: "メンバー", + memberDetail: "メンバー詳細", + viewMember: "完全な値を表示", + copyMember: "メンバーをコピー", + copied: "コピーしました", + copyInsertStatement: "INSERT文をコピー", + copyInsertStatementBinary: "バイナリデータのINSERT文は生成できません", + editMember: "編集", + jsonView: "JSONビュー", + rawContent: "生コンテンツ", + wordWrap: "折り返し", + formatJson: "フォーマット", + compressJson: "圧縮", + jsonFormatError: "不正なJSON形式です", + clearHistory: "コマンド履歴をクリア", + historyCleared: "Redisコマンド履歴をクリアしました", + blockedCommand: "コマンド {command} は安全のためブロックされています。許可するにはツールバーのシールドアイコンを無効にしてください。", + pubsub: "Pub/Sub", + pubsubConnected: "接続済み", + pubsubConnecting: "接続中...", + pubsubDisconnected: "切断しました", + pubsubConnect: "接続", + pubsubDisconnect: "切断", + pubsubChannels: "チャンネル", + pubsubChannelPlaceholder: "チャンネル名", + pubsubSubscribe: "購読", + pubsubPatterns: "パターン", + pubsubPatternPlaceholder: "パターン(例: news:*)", + pubsubPsubscribe: "パターン購読", + pubsubMessages: "メッセージ", + pubsubClear: "クリア", + pubsubEmpty: "まだメッセージはありません。チャンネルを購読してメッセージを受信してください。", + pubsubPublish: "発行", + pubsubPublishChannel: "チャンネル", + pubsubPublishMessage: "メッセージ", + pubsubSend: "送信", + pubsubPublishFailed: "発行に失敗しました: {error}", + pubsubWsConnectFailed: "WebSocket接続に失敗しました: {error}", + }, + mongo: { + documents: "{count}ドキュメント", + addField: "フィールドを追加", + deleteField: "フィールドを削除", + field: "フィールド", + value: "値", + fieldPlaceholder: "フィールド名", + emptyCollection: "空のコレクション", + selectDocument: "ドキュメントを選択", + readonlyId: "_idは読み取り専用です", + invalidJsonValue: "このセルは有効なJSON値ではありません", + duplicateField: "重複するフィールド名: {field}", + edit: "編集", + documentView: "ドキュメントビュー", + tableView: "テーブルビュー", + filterPlaceholder: "フィルター...", + sortPlaceholder: "並び替え...", + }, + history: { + title: "履歴", + search: "履歴を検索...", + empty: "まだ履歴がありません", + failed: "失敗", + success: "成功", + restore: "エディタに復元", + copy: "SQLをコピー", + delete: "削除", + clear: "履歴をクリア", + viewDetails: "詳細を表示", + analyzeWithAi: "AIで分析", + aiAnalyzeNoConnection: "接続が存在しないため、この履歴エントリを分析できません。", + aiAnalysisTab: "履歴分析", + rollback: "ロールバック", + rollbackSql: "ロールバックSQL", + rollbackAvailable: "利用可能", + rollbackUnavailable: "ロールバックSQLなし", + rollbackConfirm: "この履歴エントリ用に生成されたロールバックSQLを実行しますか?", + rollbackSuccess: "ロールバックを実行しました", + rollbackFailed: "ロールバックに失敗しました: {message}", + confirmDelete: "この履歴エントリを削除しますか?", + confirmClear: "すべての履歴をクリアしますか?", + filters: { + all: "すべて", + query: "クエリ", + data_change: "データ変更", + schema_change: "スキーマ変更", + failed: "失敗", + }, + kinds: { + query: "クエリ", + data_change: "データ変更", + schema_change: "スキーマ変更", + import: "インポート", + transfer: "転送", + redis_command: "Redisコマンド", + }, + kindShort: { + query: "SQL", + data_change: "データ", + schema_change: "DDL", + import: "インポート", + transfer: "移動", + redis_command: "Redis", + }, + detail: { + kind: "タイプ", + operation: "操作", + connection: "接続", + database: "データベース", + target: "対象", + time: "時間", + duration: "所要時間", + affectedRows: "影響行数", + rollback: "ロールバック", + status: "ステータス", + error: "エラー", + }, + }, + dangerDialog: { + title: "危険な操作", + message: "このSQL文はデータを不可逆的に変更または削除する可能性があります。実行してもよろしいですか?", + suppressFuturePrompts: "危険なSQLの確認を今後表示しない", + deleteMessage: "この削除操作は元に戻せない可能性があります。続行しますか?", + deleteConfirm: "削除を確認", + deleteRowMessage: "この行は削除対象としてマークされ、保存後にデータベースから削除されます。続行しますか?", + deleteRowsMessage: "これら{count}行は削除対象としてマークされ、保存後にデータベースから削除されます。続行しますか?", + deleteRowDetails: "テーブル: {table}", + deleteRowDetailsNoTable: "現在の結果行", + redisKeyDetails: "Redisキー: {key}", + redisHashFieldDetails: "Redisハッシュ: {key}\nフィールド: {field}", + redisListItemDetails: "Redisリスト: {key}\nインデックス: {index}", + redisSetMemberDetails: "Redisセット: {key}\nメンバー: {member}", + mongoDocumentDetails: "MongoDBコレクション: {collection}\nドキュメント _id: {id}", + mongoFieldDetails: "フィールド: {field}", + mongoArrayItemDetails: "配列アイテムインデックス: {index}", + cancel: "キャンセル", + confirm: "実行", + }, + transfer: { + title: "データ転送", + source: "ソース", + target: "対象", + sourceConnection: "ソース接続", + sourceDatabase: "ソースデータベース", + sourceSchema: "ソーススキーマ", + targetConnection: "ターゲット接続", + targetDatabase: "ターゲットデータベース", + targetSchema: "ターゲットスキーマ", + tables: "テーブル", + selectAll: "すべて選択", + deselectAll: "すべて解除", + createTable: "テーブルがなければ作成", + transferMode: "転送モード", + modeAppend: "追加 (INSERT)", + modeOverwrite: "上書き (TRUNCATE + INSERT)", + modeUpsert: "アップサート (主キーでINSERT or UPDATE)", + batchSize: "バッチサイズ", + start: "転送開始", + cancel: "キャンセル", + progress: "転送中...", + transferring: "{table} を転送中...", + completed: "転送が完了しました", + completedWithErrors: "{count}テーブル失敗で完了 | {count}テーブル失敗で完了", + failed: "転送に失敗しました", + cancelled: "転送がキャンセルされました", + rowsTransferred: "{count}行を転送しました", + tableProgress: "{current} / {total} テーブル", + noSqlConnections: "利用可能なSQL接続がありません", + selectTables: "転送するテーブルを選択してください", + searchTables: "テーブルを検索...", + noTables: "テーブルがありません", + selectSourceFirst: "先にソース接続とデータベースを選択してください", + tableError: "テーブル {table} が失敗しました: {error}", + overallProgress: "全体の進捗", + dataTransfer: "データ転送", + }, + tableImport: { + title: "テーブルデータをインポート", + target: "対象テーブル", + selectFile: "ファイルを選択", + file: "ファイル", + rows: "行数", + mapped: "マッピング済み", + mapping: "列マッピング", + skipColumn: "スキップ", + preview: "プレビュー", + mode: "インポートモード", + append: "データを追加", + truncate: "トランケートしてからインポート", + progress: "進捗", + start: "インポート開始", + success: "{count}行をインポートしました", + }, + dataGenerate: { + title: "データ生成", + target: "対象", + rowCount: "生成行数", + columns: "列", + column: "列", + type: "タイプ", + generator: "ジェネレーター", + columnProps: "列プロパティ", + databaseObjects: "データベースオブジェクト", + selectTable: "左からテーブルを選択してください", + saveProfile: "プロファイルを保存", + loadProfile: "プロファイルを読み込む", + options: "オプション", + generateOrder: "生成順序", + nextStep: "次へ", + insertSuccess: "{count}行を挿入しました", + noData: "まだデータがありません。先に生成ルールを設定してください", + noResult: "実行結果がありません", + regenerate: "再生成", + first50Rows: "先頭50行を表示中、合計{count}行", + resultTitle: "実行結果", + successLabel: "{count}件成功", + failLabel: "{count}件失敗", + totalLabel: "/ {count}エントリ", + copyAllSql: "すべてのSQLをコピー", + prevStep: "戻る", + startInsert: "挿入開始", + confirm: "確認", + back: "戻る", + reset: "リセット", + selectGenerator: "ジェネレーターを選択...", + selectGeneratorHint: "ジェネレーターを選択してください", + preview: "プレビュー", + noValue: "(なし)", + startDate: "開始日", + endDate: "終了日", + allDay: "終日", + startTime: "開始時刻", + endTime: "終了時刻", + weekday: "曜日", + all: "すべて", + weekdayOnly: "平日", + custom: "カスタム", + values: "値", + min: "最小", + max: "最大", + increment: "増分", + cycle: "超過時に循環", + includeDefault: "DEFAULTを含める", + includeNull: "NULLを含める", + unique: "一意に設定", + disableLinks: "列間のデータリンクを無効化", + imageMode: "モード", + generate: "生成", + fromFolder: "フォルダから", + imageWidth: "画像幅", + imageHeight: "画像高さ", + imageFormat: "画像形式", + folderPath: "フォルダパス", + filterByExtension: "拡張子でフィルター", + errorContinue: "エラー時に続行", + truncateBefore: "生成前にテーブルをトランケート", + useTransaction: "トランザクションを使用", + extendedInsert: "拡張INSERTを使用", + ok: "OK", + noTablesSelected: "テーブルが選択されていません", + orderHint: "矢印ボタンで並び替え", + gen: { + general: "一般", + personal: "個人", + payment: "支払い", + business: "ビジネス", + location: "場所", + product: "製品", + computer: "コンピューター", + number: "数値", + datetime: "日時", + date: "日付", + time: "時間", + sequence: "シーケンス", + enum: "列挙", + text: "テキスト", + image: "画像/バイナリ", + foreign_key: "外部キー", + uuid: "UUID", + regex: "正規表現", + full_name: "氏名", + gender: "性別", + title: "敬称", + marital_status: "婚姻状況", + phone: "電話番号", + email: "メールアドレス", + job_title: "役職", + social_id: "ソーシャルID", + payment_method: "支払方法", + credit_card_type: "クレジットカード種類", + credit_card_number: "クレジットカード番号", + credit_card_date: "クレジットカード有効期限", + company_name: "会社名", + department: "部署", + industry: "業界", + address: "住所", + city: "市区町村", + region: "都道府県", + product_name: "製品名", + product_category: "製品カテゴリ", + color: "色", + size: "サイズ", + weight_unit: "重量単位", + barcode: "バーコード", + sku: "SKU", + ip_address: "IPアドレス", + mac_address: "MACアドレス", + file_path: "ファイルパス", + file_name: "ファイル名", + file_extension: "ファイル拡張子", + url: "URL", + hostname: "ホスト名", + }, + }, + tableToolbox: { + title: "データツール", + generateData: "データを生成", + importData: "データをインポート", + exportData: "データをエクスポート", + generateDataComingSoon: "近日公開", + }, + sqlFile: { + title: "SQLファイルを実行", + file: "ファイル", + selectSqlFile: "SQLファイルを選択", + browse: "参照", + previewingLines: "{count}行をプレビュー中", + previewingFirstLines: "先頭{count}行をプレビュー中", + target: "対象", + connection: "接続", + selectConnection: "接続を選択", + database: "データベース", + selectDatabase: "データベースを選択", + databasePlaceholder: "データベース名", + options: "オプション", + continueOnError: "エラー時に続行", + cancelling: "キャンセル中...", + cancel: "キャンセル", + execute: "実行", + statement: "ステートメント", + succeeded: "成功", + failed: "失敗", + affectedRows: "影響行数", + currentStatement: "現在の文", + status: { + idle: "待機中", + started: "開始", + running: "実行中", + statementDone: "ステートメント完了", + statementFailed: "ステートメント失敗", + done: "完了", + error: "エラー", + cancelled: "キャンセル済み", + }, + }, + diff: { + title: "スキーマを比較", + source: "ソース", + target: "対象", + selectConnection: "接続を選択", + selectDatabase: "データベースを選択", + selectSchema: "スキーマを選択", + connection: "接続", + database: "データベース", + schema: "スキーマ", + recentConfigs: "最近の設定", + selectRecentConfig: "最近の設定を選択", + ignoreComments: "コメントの差分を無視", + compare: "比較", + comparing: "スキーマを比較中...", + noDifferences: "差分が見つかりません", + table: "テーブル", + status: "ステータス", + details: "詳細", + added: "追加", + removed: "削除", + modified: "変更", + indexes: "インデックス", + foreignKeys: "外部キー", + triggers: "トリガー", + comments: "コメント", + newTable: "新しいテーブル", + dropTable: "テーブル削除", + generatedSql: "同期SQL", + copySql: "SQLをコピー", + executeSync: "同期を実行", + syncSuccess: "同期が正常に実行されました", + swap: "ソースとターゲットを入れ替え", + syncProgress: "実行中: {current}/{total}", + syncSummary: "成功 {success}、失敗 {failed}", + configSaved: "設定を保存しました", + selectObjectToCompare: "DDL比較を表示するにはオブジェクトを選択してください", + noDdlAvailable: "利用可能なDDLがありません", + sourceDdl: "ソースDDL", + targetDdl: "ターゲットDDL", + objectNotExistsInSource: "このオブジェクトはソースデータベースに存在しません", + objectNotExistsInTarget: "このオブジェクトはターゲットデータベースに存在しません", + nextStepDeploy: "次へ(デプロイ確認)", + deployReview: "デプロイ確認", + backToResult: "結果に戻る", + copyScript: "スクリプトをコピー", + exportSql: ".sqlをエクスポート", + deployToServer: "サーバーにデプロイ", + deployConfirmTitle: "最終確認", + deployConfirmMessage: "以下の変更をターゲットデータベースにデプロイしようとしています", + targetServer: "ターゲットサーバー", + dbVersion: "データベースバージョン", + targetDatabase: "ターゲットデータベース", + targetSchema: "ターゲットスキーマ", + useTransaction: "トランザクションで実行(失敗時に自動ロールバック)", + confirmDeploy: "デプロイを確認", + exportSuccess: "エクスポート成功", + create: "作成", + delete: "削除", + modify: "変更", + cancel: "キャンセル", + operationLabel: { + modify: "変更するオブジェクト", + create: "作成するオブジェクト", + delete: "削除するオブジェクト", + none: "操作なし", + }, + objectKindLabel: { + table: "テーブル", + view: "ビュー", + function: "関数", + sequence: "シーケンス", + rule: "ルール", + owner: "所有者", + index: "インデックス", + foreignKey: "外部キー", + trigger: "トリガー", + }, + noObjectsSelected: "デプロイするオブジェクトを選択してください", + deploySuccess: "デプロイ成功", + deployFailed: "デプロイ失敗", + deploySuccessMessage: "SQLスクリプトがターゲットデータベースで正常に実行されました", + deployFailedMessage: "実行中にエラーが発生しました", + affectedRows: "影響行数", + executedStatements: "実行された文", + serverVersion: "サーバーバージョン", + close: "閉じる", + }, + schemaDiff: { + optionsTitle: "比較オプション", + selectConfig: "設定を選択", + newConfigName: "新しい設定", + newConfig: "新しい設定", + renameConfig: "設定名を変更", + duplicateConfig: "設定を複製", + deleteConfig: "設定を削除", + exportConfig: "設定をエクスポート", + exportAllConfigs: "すべての設定をエクスポート", + importConfig: "設定をインポート", + importFromFile: "ファイルからインポート", + importFromText: "テキストからインポート", + importPlaceholder: "JSON設定を貼り付け...", + importInvalidJson: "不正なJSON形式です", + configName: "設定名", + options: { + tables: "テーブルを比較", + primaryKeys: "主キーを比較", + foreignKeys: "外部キーを比較", + uniqueKeys: "一意キーを比較", + checks: "チェック制約を比較", + exclusions: "排他制約を比較", + views: "ビューを比較", + functions: "関数を比較", + indexes: "インデックスを比較", + sequences: "シーケンスを比較", + triggers: "トリガーを比較", + rules: "ルールを比較", + owners: "所有者を比較", + cascadeDelete: "CASCADE削除を使用", + sequenceLastValues: "シーケンス最終値を比較", + }, + }, + dataCompare: { + title: "データを比較", + selectTable: "テーブルを選択", + sourceTables: "ソーステーブル", + targetTable: "対象テーブル", + searchTables: "テーブルを検索...", + selectedTables: "{selected}/{total}件選択中", + selectAllTables: "すべて選択", + deselectAllTables: "すべて解除", + selectSourceTables: "先にソース接続とデータベースを選択し、比較するテーブルを選んでください", + noTables: "比較可能なテーブルがありません", + autoMatchHint: "バッチモードでは同じ名前のターゲットテーブルを自動的にマッチングします", + matchedTables: "{matched}/{total}テーブルがマッチしました", + missingTargetTables: "同名のターゲットテーブルが見つかりません: {tables}", + keyColumns: "キー列", + keyColumnsPlaceholder: "カンマ区切りの主キーまたは一意列", + keyColumnsAutoHint: "単一テーブル比較では空白で主キーを自動検出、バッチ比較ではテーブルごとに指定します。", + rowCounts: "ソース {source}行、ターゲット {target}行、完全比較が完了しました", + previewLimitOption: "{count}件プレビュー", + compare: "データを比較", + summary: "追加 {added}、削除 {removed}、変更 {modified}", + batchSummary: "{tables}テーブルを比較: {different}不一致、{same}一致、{failed}失敗; 追加 {added}、削除 {removed}、変更 {modified}", + comparingTable: "比較中 {current}/{total}: {table}", + keyColumnsInline: "キー列: {columns}", + selectedInline: "選択済み {selected}/{total}", + selectedSummary: "選択: 追加 {added}、削除 {removed}、変更 {modified}", + selectAllKind: "すべての{kind}を選択", + clearKind: "{kind}をクリア", + clearSelection: "すべての選択をクリア", + showAllRows: "{count}件すべて表示", + showLessRows: "少なく表示", + remainingRows: "プレビューでさらに{count}行が非表示", + planningSync: "同期計画を更新中...", + noSelectedDifferences: "実行する差分が選択されていません", + planSummary: "計画: {inserts}件のINSERT、{updates}件のUPDATE、{deletes}件のDELETE、{statements}文", + statusDifferent: "差異あり", + statusSame: "同一", + statusError: "失敗", + noKeyColumns: "少なくとも1つのキー列を選択してください", + missingKeyColumns: "キー列はソースとターゲットの両方のテーブルに存在する必要があります: {columns}", + noCommonColumns: "ソースとターゲットテーブルに比較可能な共通列がありません", + targetTableMissing: "ターゲットテーブルが見つかりません: {table}", + noComparableTables: "比較可能なテーブルが見つかりません。同名のターゲットテーブルが存在するか確認してください。", + noDifferences: "データは同一です。同期SQLは不要です", + syncSuccess: "データ同期が正常に実行されました", + }, + settings: { + title: "設定", + editorTab: "エディタ", + sqlFormatterTab: "SQLフォーマッター", + sqlFormatterImport: "設定をインポート", + sqlFormatterExport: "設定をエクスポート", + sqlFormatterImportSuccess: "フォーマッター設定をインポートしました。", + sqlFormatterCopyJson: "JSONをコピー", + sqlFormatterCopyJsonSuccess: "JSONをコピーしました。", + sqlFormatterCopyJsonFailed: "コピーに失敗しました: {message}", + sqlFormatterJsonEditorLoadFailed: "JSONエディタの読み込みに失敗しました。基本入力に切り替えました: {message}", + sqlFormatterRestoreDefaults: "デフォルトに戻す", + sqlFormatterFormMode: "フォーム", + sqlFormatterJsonMode: "JSON", + sqlFormatterKeywordCase: "キーワードの大文字/小文字", + sqlFormatterFunctionCase: "関数の大文字/小文字", + sqlFormatterDataTypeCase: "データ型の大文字/小文字", + sqlFormatterIdentifierCase: "識別子の大文字/小文字", + sqlFormatterCaseUpper: "大文字", + sqlFormatterCaseLower: "小文字", + sqlFormatterCasePreserve: "保持", + sqlFormatterIndent: "インデント", + sqlFormatterIndentSpaces: "スペース", + sqlFormatterIndentTabs: "タブ", + sqlFormatterTabWidth: "タブ幅", + sqlFormatterIndentStyle: "インデントスタイル", + sqlFormatterIndentStyleStandard: "標準", + sqlFormatterIndentStyleTabularLeft: "表形式左寄せ", + sqlFormatterIndentStyleTabularRight: "表形式右寄せ", + sqlFormatterLogicalOperatorNewline: "論理演算子の改行", + sqlFormatterLogicalBefore: "演算子の前", + sqlFormatterLogicalAfter: "演算子の後", + sqlFormatterExpressionWidth: "式の幅", + sqlFormatterLinesBetweenQueries: "クエリ間の行数", + sqlFormatterDenseOperators: "演算子を詰める", + sqlFormatterNewlineBeforeSemicolon: "セミコロンを新しい行に", + sqlFormatterAdvancedOptions: "詳細オプション", + sqlFormatterParams: "パラメータ", + sqlFormatterParamTypes: "パラメータ型", + sqlFormatterEditorShortcuts: "ショートカット", + sqlFormatterShortcutAction: "アクション", + sqlFormatterShortcutEnabled: "有効", + sqlFormatterShortcutWindows: "Windows", + sqlFormatterShortcutLinux: "Linux", + sqlFormatterShortcutMacos: "macOS", + sqlFormatterShortcutFind: "検索", + sqlFormatterShortcutReplace: "置換", + sqlFormatterShortcutIndentMore: "インデントを増やす", + sqlFormatterShortcutIndentLess: "インデントを減らす", + sqlFormatterShortcutDuplicateLine: "現在行を複製", + sqlFormatterShortcutDeleteLine: "現在行を削除", + sqlFormatterShortcutMoveLine: "行を移動", + sqlFormatterShortcutMoveLineUp: "行を上に移動", + sqlFormatterShortcutMoveLineDown: "行を下に移動", + sqlFormatterShortcutCopyLine: "行をコピー", + sqlFormatterShortcutCopyLineUp: "行を上にコピー", + sqlFormatterShortcutCopyLineDown: "行を下にコピー", + sqlFormatterShortcutUndo: "元に戻す", + sqlFormatterShortcutRedo: "やり直す", + sqlFormatterShortcutSelectAll: "すべて選択", + sqlFormatterShortcutFormatJson: "JSONをフォーマット", + sqlFormatterShortcutApply: "設定を適用", + sqlFormatterConfigErrorInvalidJson: "無効なJSONです。", + sqlFormatterConfigErrorObject: "設定はJSONオブジェクトである必要があります。", + sqlFormatterConfigErrorVersion: "サポートされていない設定バージョンです。", + sqlFormatterConfigErrorFormatter: "サポートされていないフォーマッターです。", + sqlFormatterConfigErrorUnsupportedParams: "パラメータ置換オプションはサポートされていません。SQLフォーマットはプレースホルダーを置換しません。", + sqlFormatterConfigErrorOptionsObject: "設定オプションはJSONオブジェクトである必要があります。", + sqlFormatterConfigErrorEditorObject: "エディタ設定はJSONオブジェクトである必要があります。", + sqlFormatterConfigErrorEditorScope: "サポートされていないエディタスコープです。", + sqlFormatterConfigErrorEditorPlatforms: "無効なエディタプラットフォームです。", + sqlFormatterConfigErrorEditorShortcutsArray: "エディタショートカットは配列である必要があります。", + sqlFormatterConfigErrorEditorShortcutValue: "無効なエディタショートカットです。", + sqlFormatterConfigErrorUnknownOption: "不明なフォーマッターオプション: {option}。", + sqlFormatterConfigErrorInvalidOptionValue: "{option}の値が無効です。", + sqlFormatterConfigErrorUnknownEditorShortcut: "不明なエディタショートカット: {shortcut}。", + sqlFormatterConfigErrorInvalidEditorShortcut: "無効なエディタショートカット: {shortcut}。", + sqlFormatterConfigErrorDuplicateEditorShortcut: "重複するエディタショートカット: {shortcut}。", + sqlFormatterConfigErrorInvalidConfig: "無効なフォーマッター設定です。", + appearanceTab: "外観", + navigationTab: "ナビゲーション", + dataTab: "データ", + redisTab: "Redis", + shortcutsTab: "ショートカット", + snippetsTab: "スニペット", + syncTab: "同期", + aiTab: "AI", + mcpTab: "MCP", + jdbcTab: "JDBCドライバー", + securityTab: "セキュリティ", + aboutTab: "バージョン情報", + fontFamily: "フォントファミリー", + selectFont: "フォントを選択...", + searchFont: "フォントを検索...", + loadingFonts: "フォントを読み込み中...", + noFontsFound: "フォントが見つかりません", + useCustomFont: "「{font}」を使用", + languageTitle: "言語 / Language", + fontSize: "フォントサイズ", + toolbarTitle: "ツールバー", + toolbarHiddenHint: "非表示にした左側のボタンは、「もっと見る」ドロップダウン内に表示されます。", + uiScale: "UIスケール", + uiScaleDescription: "高DPIディスプレイ向けにデスクトップUI全体をスケーリングします。変更は即座に適用され、次回起動時に復元されます。", + theme: "テーマ", + selectTheme: "テーマを選択...", + followAppTheme: "アプリテーマに従う", + appLayout: "インターフェースレイアウト", + appLayoutSeparated: "モダン分離型", + appLayoutSeparatedDescription: "ブロックスタイルのタブで明確なパネル分離。", + appLayoutClassic: "クラシックコンパクト", + appLayoutClassicDescription: "連続タブバーとコンパクトなパネルヘッダー。", + iconTheme: "アイコンとロゴのスタイル", + iconThemeDefault: "デフォルト", + iconThemeDefaultDescription: "カラーDBXアプリアイコンを使用。", + iconThemeBlack: "黒", + iconThemeBlackDescription: "ウィンドウ、トレイ、ロゴに黒のDBXマークを使用。", + showTrayIcon: "トレイ/メニューバーアイコンを表示", + showTrayIconDescription: "無効時はアイコンが表示されませんが、ウィンドウを閉じると従来通りDBXはバックグラウンドに隠れます。", + updateNotificationsEnabled: "アップデート通知を有効にする", + updateNotificationsEnabledDescription: "無効時、DBXはアプリやドライバーのアップデートを自動確認せず、アップデートバッジも表示しません。手動確認は引き続き利用可能です。", + debugLoggingEnabled: "デバッグログを有効にする", + debugLoggingEnabledDescription: "トラブルシューティング時に、より詳細なローカル診断ログを記録します。デフォルトでは無効です。", + debugLogsCopy: "ログをコピー", + debugLogsCopied: "コピーしました", + debugLogsDownload: "ログをダウンロード", + debugLogsDownloaded: "ダウンロードしました", + debugLogsClear: "ログをクリア", + dataGridDisplay: "データグリッド表示", + showColumnCommentsInHeader: "列名の下にコメントを表示", + showColumnCommentsInHeaderDescription: "グリッド列名の直下にテーブル列コメントを表示します。", + showColumnTypesInHeader: "列名の下にデータ型を表示", + showColumnTypesInHeaderDescription: "グリッド列名の直下に各列のデータ型を表示します。", + compactColumnHeaderActions: "列ヘッダーツールをコンパクトに", + compactColumnHeaderActionsDescription: "フォーマッターとローカルフィルターツールをもっと見るメニューに移動し、列名を優先表示します。", + sidebarActivation: "サイドバーのアクティベーション", + sidebarActivationSingle: "シングルクリック", + sidebarActivationSingleDescription: "1クリックでサイドバー項目を開きます。", + sidebarActivationDouble: "ダブルクリック", + sidebarActivationDoubleDescription: "シングルクリックで行を選択、ダブルクリックで項目を開きます。", + sidebarObjectDisplay: "サイドバーオブジェクトレイアウト", + sidebarObjectDisplayGrouped: "詳細表示", + sidebarObjectDisplayGroupedDescription: "オブジェクトタイプが多いデータベース向けに、テーブル、ビュー、プロシージャ、関数でグループ化します。", + sidebarObjectDisplaySimple: "シンプル表示", + sidebarObjectDisplaySimpleDescription: "中間レベルを減らすために、各データベースまたはスキーマの直下にテーブルとビューを一覧表示します。", + autoSelectActiveSidebarNode: "開いた項目を常に選択", + autoSelectActiveSidebarNodeDescription: "タブ切替時に、サイドバーで一致する表示中のテーブル、コレクション、またはSQLファイルを選択します。", + disconnectTabHandlingMode: "切断後のタブ", + disconnectTabHandlingModeDescription: "接続またはデータベースを閉じた後の関連タブの処理方法を選択します。", + disconnectTabHandlingModeCloseTabs: "すべてのタブを閉じる", + disconnectTabHandlingModeCloseTabsDescription: "接続またはデータベースの関連タブをすべて閉じます。", + disconnectTabHandlingModeKeepTabsClearResults: "オブジェクトタブを閉じ、SQLタブを保持", + disconnectTabHandlingModeKeepTabsClearResultsDescription: "テーブルデータ、オブジェクトブラウザ、構造タブを閉じ、SQLクエリタブとSQLテキストを保持し、実状態と結果セッションもクリアします。", + disconnectTabHandlingModeKeepTabsKeepResults: "関連タブを閉じない", + disconnectTabHandlingModeKeepTabsKeepResultsDescription: "関連タブ、SQLテキスト、現在の結果を追加のクリーンアップなしで保持します。", + reuseDataTab: "データタブを再利用", + reuseDataTabDescription: "サイドバーでテーブルをクリックした際、毎回新しいタブを作成せずに既存のデータタブを再利用します。", + sidebarHiddenTablePrefixes: "非表示テーブル名プレフィックス", + sidebarHiddenTablePrefixesDescription: "1行に1つのプレフィックス。サイドバーのテーブル、ビュー、コレクションラベルのみ短縮されます。ツールチップと操作は完全な名前を使用します。", + sidebarHiddenTablePrefixesPlaceholder: "Example:\nODS_\nT8Y2_LONG_", + sidebarHideTableComments: "サイドバーのテーブルコメントを非表示", + sidebarHideTableCommentsDescription: "横のスペースを節約するため、サイドバーツリーで名前の横に表示されるテーブル/ビューコメントを非表示にします。", + sidebarAllowHorizontalScroll: "サイドバーの横スクロールを許可", + sidebarAllowHorizontalScrollDescription: "サイドバーの横スクロールを許可して、長いテーブル、ビュー、コレクション名を完全に表示します。", + snippetsDescription: "エディタでトリガーされるSQLスニペットテンプレートをカスタマイズします。", + snippetsAdd: "スニペットを追加", + snippetsLabel: "ラベル", + snippetsPrefix: "プレフィックス", + snippetsBody: "SQL本文", + snippetsLabelPlaceholder: "例: select *", + snippetsPrefixPlaceholder: "例: sel", + snippetsBodyPlaceholder: "SELECT *\nFROM table\nLIMIT 100;", + snippetsRestoreDefaults: "デフォルトに戻す", + snippetsAddTitle: "スニペットを追加", + snippetsEditTitle: "スニペットを編集", + syncWebDavTitle: "WebDAV同期", + syncWebDavDescription: "WebDAV互換ストレージサービスからDBXスナップショットをアップロードまたは復元します。", + syncEndpoint: "WebDAV URL", + syncUsername: "ユーザー名", + syncPassword: "パスワード", + syncPasswordPlaceholder: "パスワードを入力", + syncClearSavedPassword: "保存されたパスワードをクリア", + syncRememberWebDavPassword: "WebDAVアプリパスワードを記憶", + syncSavedPassword: "(保存済み)", + syncRememberWebDavPasswordDescription: "パスワードは暗号化され、このデバイスにのみ保存されます。WebDAVには同期されず、同期パスワードを置き換えるものでもありません。", + syncRemotePath: "リモートスナップショットパス", + syncRemotePathDescription: "アップロード時に不足している親フォルダをDBXが作成します。", + syncSecretNotice: "デフォルトでは、DBXは接続詳細と設定のみを同期します。データベースパスワード、SSHパスワード、プロキシパスワード、接続文字列、AI APIキーはローカルに保持されます。", + syncSecrets: "暗号化されたシークレットを同期", + syncSecretsDescription: "有効時、DBXはデータベースパスワード、SSHパスワード、AI APIキーを暗号化してからWebDAVにアップロードします。", + syncSecretsPassphrase: "同期パスワード", + syncSecretsPassphraseDescription: "このパスワードは機密データの暗号化と復元にのみ使用されます。DBXは保存せず、各デバイスで再度入力する必要があります。", + syncTest: "テスト", + syncUpload: "アップロード", + syncDownload: "ダウンロード", + syncTestSuccess: "WebDAVターゲットに到達可能です。", + syncUploadSuccess: "{bytes}バイトを{path}にアップロードしました。", + syncDownloadSuccess: "{path}から{bytes}バイトをダウンロードして適用しました。", + syncSecretsApplied: "暗号化されたシークレットが復元されました。", + syncSecretsSkipped: "暗号化されたシークレットが存在しましたが復元されませんでした。", + syncDownloadConfirm: "リモートDBXスナップショットをダウンロードして適用しますか?ローカルのメタデータと保存済みSQLが置き換えられます。", + apply: "適用", + applyAndClose: "適用して閉じる", + reset: "リセット", + resetDefaults: "デフォルトにリセット", + save: "保存", + cancel: "キャンセル", + executeMode: "実行モード (Cmd+Enter)", + executeModeAll: "すべてのSQLを実行", + executeModeCurrent: "カーソル位置の文を実行", + wordWrap: "折り返し", + wordWrapDescription: "長いSQL行をエディタ幅内で折り返します", + confirmDangerousSqlExecution: "危険なSQLの前に確認", + confirmDangerousSqlExecutionDescription: "無効時、ALTER、DROP、DELETE、TRUNCATEなどの危険なSQLが警告ダイアログなしで実行されます。", + redisScanPageSize: "Redisスキャンカウント", + redisScanPageSizeDescription: "キー参照時のRedis SCANページあたりの要求キー数。", + redisScanPageSizeOption: "{count}キー", + exportBatchSize: "エクスポートバッチサイズ", + exportBatchSizeDescription: "テーブルデータエクスポート時のバッチあたりの取得行数(100〜100000)。", + exportSection: "エクスポート", + shortcutExecuteSql: "SQLを実行", + shortcutFind: "検索", + shortcutReplace: "置換", + shortcutSaveSql: "SQLを保存", + shortcutAcceptCompletion: "補完を受け入れる", + shortcutFormatSql: "SQLをフォーマット", + shortcutIndentMore: "インデントを増やす", + shortcutIndentLess: "インデントを減らす", + shortcutDuplicateLine: "現在行を複製", + shortcutDeleteLine: "現在行を削除", + shortcutMoveLineUp: "行を上に移動", + shortcutMoveLineDown: "行を下に移動", + shortcutCopyLineUp: "行を上にコピー", + shortcutCopyLineDown: "行を下にコピー", + shortcutUndo: "元に戻す", + shortcutRedo: "やり直す", + shortcutSelectAll: "すべて選択", + shortcutCopyCurrentRow: "現在のデータ行をコピー", + shortcutDeleteCurrentRow: "現在のデータ行を削除", + shortcutNewQuery: "新しいクエリ", + shortcutOpenSettings: "設定を開く", + shortcutCloseTab: "タブを閉じる", + shortcutFocusSearch: "検索にフォーカス", + shortcutZoomInUi: "UIを拡大", + shortcutZoomOutUi: "UIを縮小", + shortcutResetUiZoom: "UIズームをリセット", + shortcutRefreshData: "データを更新", + shortcutToggleTranspose: "転置ビューを切替", + shortcutCancelSearch: "検索をキャンセル", + shortcutToggleSidebar: "サイドバーを切替", + shortcutScopeGlobal: "グローバル", + shortcutScopeEditor: "SQLエディタ", + shortcutScopeGrid: "データグリッド", + shortcutScopeSearch: "フィールド検索", + shortcutPressShortcut: "ショートカットを押してください", + shortcutConflict: "このショートカットは同じスコープ内の別のアクションと競合しています。", + shortcutClear: "ショートカットをクリア", + preview: "ライブプレビュー", + customTheme: "カスタムテーマ", + customThemeConfigure: "カスタムテーマを設定", + customThemeTitle: "カスタムテーマ設定", + customThemeMyThemes: "マイテーマ", + customThemeNewTheme: "新しいテーマ", + customThemeVisualEdit: "ビジュアルエディタ", + customThemeJsonConfig: "JSON設定", + customThemeLivePreview: "ライブプレビュー", + customThemePreviewExample: "-- クエリ例", + customThemePreset: "プリセットテーマ", + customThemeSelectPreset: "プリセットテーマを選択...", + customThemeApply: "適用", + customThemePasteImport: "貼り付けインポート", + customThemeExportJson: "JSONエクスポート", + customThemeSaveAndApply: "保存して適用", + customThemeKeyword: "キーワード", + customThemeField: "フィールド/変数", + customThemeFunction: "関数", + customThemeString: "文字列", + customThemeNumber: "数値", + customThemeComment: "コメント", + customThemeTable: "テーブル", + customThemeOperator: "演算子", + customThemeType: "タイプ", + customThemeBuiltin: "組み込み", + customThemeBackground: "背景", + customThemeForeground: "前景", + customThemeDefaultName: "カスタムテーマ", + customThemeCopySuffix: "コピー", + customThemeApplied: "配色テーマ「{name}」を適用しました", + customThemeKeepOne: "少なくとも1つのテーマを保持してください", + customThemeJsonError: "無効なJSON形式です。確認してください", + jdbcPlugin: "DBX JDBCプラグイン", + jdbcPluginInstall: "JDBCプラグインをインストール", + jdbcPluginInstallSuccess: "JDBCプラグインがインストールされました", + jdbcPluginUpdate: "更新", + jdbcPluginUninstall: "アンインストール", + jdbcPluginUninstallSuccess: "JDBCプラグインがアンインストールされました", + jdbcPluginInstalled: "インストール済み: v{version}", + jdbcPluginIncompatible: "互換性のないプロトコル", + jdbcPluginNotInstalled: "未インストール", + jdbcDrivers: "JDBCドライバーJAR", + jdbcImport: "JARをインポート", + jdbcImportPath: "インポートパス", + jdbcDriverPathPlaceholder: "/path/to/driver.jar", + jdbcImportSuccess: "{count}件のドライバーファイルをインポートしました", + jdbcDeleteSuccess: "ドライバーを削除しました", + jdbcNoDrivers: "まだJDBCドライバーがインポートされていません。", + mcpTitle: "MCPサーバー", + mcpDescription: "Claude Code、Cursor、その他のエージェントが使用するDBX MCPサーバーのインストールとバージョンを確認します。", + mcpChecking: "確認中", + mcpStatusUnknown: "未確認", + mcpStatusError: "確認失敗", + mcpReady: "準備完了", + mcpNotInstalled: "未インストール", + mcpUpdateAvailable: "アップデートがあります", + mcpCurrent: "現在のバージョン", + mcpLatest: "最新バージョン", + mcpVersionMissing: "グローバルインストールが検出されませんでした", + mcpVersionUnknown: "不明", + mcpAvailable: "利用可能", + mcpUnavailable: "利用不可", + mcpBinPath: "コマンドパス", + mcpInstallCommand: "インストールコマンド", + mcpUpdateCommand: "アップグレードコマンド", + mcpInstallButton: "インストール", + mcpUpdateButton: "アップグレード", + mcpUpToDate: "最新です", + mcpInstalling: "インストール中...", + mcpInstallSuccess: "インストール成功", + mcpInstallFailed: "インストール失敗", + mcpConfig: "MCP設定", + mcpCodexConfig: "Codex設定", + mcpCodexConfigPath: "Codexは ~/.codex/config.toml またはプロジェクトレベルの .codex/config.toml を使用できます。", + mcpReadonlyMode: "読み取り専用モード", + mcpReadonlyModeDescription: "サンプル設定にDBX_MCP_ALLOW_WRITES=0を追加し、MCPセッションをクエリのみに制限します。", + mcpAllowDangerous: "危険なSQLを許可", + mcpAllowDangerousDescription: "サンプル設定にDBX_MCP_ALLOW_DANGEROUS_SQL=1を追加し、DROP、TRUNCATE、ALTERなどの文を許可します。", + mcpDetectionTiming: "このページを開くとDBXが自動的に確認します。更新するには再確認を使用してください。", + mcpNpmBoundary: "DBXはMCPステータスの確認と説明のみを行います。インストールとアップグレードはnpmを通じて実行されます。", + mcpRefresh: "再確認", + mcpGuide: "MCPガイド", + aboutDescription: "オープンソースの軽量データベース管理ツール。", + community: "コミュニティ", + qqGroup: "QQグループ", + wechatGroup: "WeChatグループ", + wechatGroupInvite: "Tencent Docs招待", + project: "プロジェクト", + openSource: "オープンソースリポジトリ", + officialDocs: "公式ドキュメント", + }, + driverStore: { + progressJreExtract: "JREを展開中...", + progressDownloadJre: "JREをダウンロード中", + progressDownloadDriver: "ドライバーをダウンロード中", + progressDownloadJdbcPlugin: "JDBCプラグインをダウンロード中", + progressJdbcPluginExtract: "JDBCプラグインをインストール中...", + usageTitle: "ストレージ使用量", + usageTotal: "合計 {size}", + usageTotalLabel: "合計", + calculating: "計算中...", + usageManagedJre: "管理対象JRE", + usageAgentDrivers: "組み込みドライバーエージェント", + usageJdbcPlugin: "JDBCプラグイン", + usageJdbcDriverJars: "JDBCドライバーJAR", + offlineDownloadHint: "エアギャップ環境の場合は、インターネット接続されたマシンでオフラインドライバーパッケージをダウンロードし、ここでインポートしてください。", + offlineDownloadLink: "オフラインドライバーダウンロード", + searchDrivers: "ドライバー名、タイプ、バージョンを検索...", + searchJdbcDrivers: "JDBCドライバー名またはパスを検索...", + jdbcMavenCoordinatePlaceholder: "Maven座標(例: org.postgresql:postgresql:42.7.7)", + jdbcMavenInstall: "Mavenからインストール", + jdbcMavenInstallSuccess: "JDBC Mavenドライバーをインストールしました", + jdbcSourceMaven: "Maven", + jdbcSourceManual: "手動", + noMatchingDrivers: "一致するドライバーがありません。", + javaRuntimeSaved: "Javaランタイム設定を保存しました", + javaRuntimeSaveFailed: "Javaランタイム設定の保存に失敗しました: {error}", + chooseJavaExecutable: "Java実行ファイルを選択", + driverInstallSuccess: "{label} ドライバーをインストールしました", + driverInstallFailed: "{label} ドライバーのインストールに失敗しました: {error}", + driverUpdateBlocked: "ドライバーを更新する前にこれらのデータベース接続を閉じてください: {labels}", + upgradeAllSuccess: "{count}件のドライバーをアップグレードしました", + upgradeAllPartial: "{count}件のドライバーをアップグレードしました。スキップ: {failed}", + upgradeAllFailed: "一括アップグレードに失敗しました: {error}", + driverUninstallSuccess: "{label} ドライバーをアンインストールしました", + driverUninstallFailed: "{label} ドライバーのアンインストールに失敗しました: {error}", + chooseOfflineDriverPackage: "オフラインドライバーパッケージを選択", + offlineImportSuccess: "オフラインインポートが完了しました。{count}件のドライバーをインストールしました。", + offlineImportFailed: "オフラインインポートに失敗しました: {error}", + driverImportSuccess: "{label} ドライバーをインポートしました", + driverImportFailed: "{label} ドライバーのインポートに失敗しました: {error}", + chooseDriverJar: "ドライバーJARファイルを選択", + jreReinstallSuccess: "JRE {jre} を再インストールしました", + jreReinstallFailed: "JRE {jre} の再インストールに失敗しました: {error}", + jreUninstallSuccess: "JRE {jre} をアンインストールしました", + chooseJdbcPluginZip: "JDBCプラグインzipファイルを選択", + agentDrivers: "組み込みドライバー", + jdbcDrivers: "JDBCドライバー", + importing: "インポート中...", + importOfflinePackage: "オフラインパッケージをインポート", + refresh: "更新", + javaRuntime: "Javaランタイム", + javaRuntimeManaged: "DBX管理JRE", + javaRuntimeSystem: "システムJava", + javaRuntimeCustom: "カスタムパス", + saving: "保存中...", + customJavaPathPlaceholder: "/path/to/java or /path/to/jdk", + choose: "選択", + systemJavaHint: "現在のPATHからJavaを使用します。", + jreRuntimeTitle: "JRE {jre} ランタイム", + notInstalled: "未インストール", + reinstalling: "再インストール中", + installing: "インストール中", + install: "インストール", + reinstall: "再インストール", + uninstall: "アンインストール", + jreRuntime: "JREランタイム", + jreRuntimeAutoDownloadHint: "初回ドライバーインストール時に自動ダウンロードされます", + driversUpdatable: "{count}件のドライバーを更新できます", + upgradingProgress: "アップグレード中 ({current}/{total})", + upgradeAll: "すべてアップグレード", + queued: "待機中", + importLocalJar: "ローカルJARをインポート", + updating: "更新中", + update: "更新", + localInstall: "ローカルインストール", + runtimeDrivers: "ランタイム", + storageTab: "ストレージ", + runtimeTitle: "ドライバーランタイム", + runtimeHint: "ランタイムメトリクスはこのパネルが開いている間のみ収集されます。", + runtimeRunning: "実行中", + runtimeMemory: "メモリ", + runtimeHealth: "状態", + runtimeHealth_healthy: "正常", + runtimeHealth_warning: "警告", + runtimeHealth_error: "エラー", + runtimeLastError: "最終エラー", + runtimeEmpty: "まだドライバーランタイムがありません。エージェント駆動接続を開いて開始してください。", + runtimeKindAgent: "エージェント", + runtimeKindPlugin: "プラグイン", + runtimeSourceDaemon: "デーモン", + runtimeSourceConnection: "接続", + runtimeStatus_running: "実行中", + runtimeStatus_stopped: "停止", + runtimeStatus_error: "エラー", + runtimeStatus_unknown: "不明", + runtimePid: "PID", + runtimeUptime: "稼働時間", + runtimeActions: "操作", + runtimeStop: "停止", + runtimeRestart: "再起動", + runtimeControlConnectionOwned: "このランタイムを停止するにはデータベース接続を閉じてください。", + runtimeStopSuccess: "{label} ランタイムを停止しました", + runtimeStopFailed: "{label} の停止に失敗しました: {error}", + runtimeRestartSuccess: "{label} ランタイムを再起動しました", + runtimeRestartFailed: "{label} の再起動に失敗しました: {error}", + driverStoreDir: "ドライバーストアパス", + driverStoreDirDescription: "JDBCプラグインとエージェント/JREデータの保存場所を個別に設定します。移行後にアプリは自動的に再起動します。", + pluginStoreDir: "JDBCプラグインディレクトリ", + pluginStoreDirDescription: "JDBCプラグイン、Mavenリゾルバー、JDBCドライバーJARを保存します。", + agentStoreDir: "エージェント / JREディレクトリ", + agentStoreDirDescription: "エージェントドライバーパッケージ、管理対象JRE、ランタイムキャッシュを保存します。", + driverStoreDirDefault: "デフォルト(インストールディレクトリ)", + driverStoreDirChange: "変更", + driverStoreDirReset: "デフォルトにリセット", + driverStoreDirMigrating: "{target}を移行中…", + driverStoreDirConfirm: "{target}を変更すると関連ドライバーデータが新しい場所に移行されます。移行中に関連ドライバー接続が切断される可能性があります。移行後にアプリは自動的に再起動します。続行しますか?", + driverStoreDirMigrationFailed: "ドライバーストアの移行に失敗しました: {error}", + driverStoreDirDialogTitle: "{target}を選択", + driverStoreDirSuccess: "{target}を変更しました。再起動中…", + }, + databaseExport: { + title: "データベースをエクスポート", + includeStructure: "テーブル構造 (DDL)", + dropTableIfExists: "DDLの前にDROP TABLE IF EXISTSを追加", + includeData: "テーブルデータ (INSERT)", + includeObjects: "ビュー / プロシージャ / 関数", + tableSelection: "テーブル", + selectedTables: "{selected}/{total}件選択中", + selectAllTables: "すべて選択", + filterTables: "テーブルを検索...", + clearTables: "クリア", + loadingTables: "テーブルを読み込み中...", + tableLoadError: "テーブルの読み込みに失敗しました: {error}", + noTables: "テーブルが見つかりません", + export: "エクスポート", + exporting: "エクスポート中...", + currentTable: "現在: {table} ({current}/{total})", + rowsExported: "{count}行をエクスポートしました", + exportSuccess: "データベースを正常にエクスポートしました", + exportError: "エクスポートに失敗しました: {error}", + exportCancelled: "エクスポートがキャンセルされました", + }, +}; diff --git a/apps/desktop/src/lib/localeOptions.ts b/apps/desktop/src/lib/localeOptions.ts index 4017f63c6..50bce5426 100644 --- a/apps/desktop/src/lib/localeOptions.ts +++ b/apps/desktop/src/lib/localeOptions.ts @@ -4,6 +4,7 @@ export const LOCALE_OPTIONS: { value: Locale; flag: string; label: string }[] = { value: "en", flag: "🇺🇸", label: "English" }, { value: "es", flag: "🇪🇸", label: "Español" }, { value: "it", flag: "🇮🇹", label: "Italiano" }, + { value: "ja", flag: "🇯🇵", label: "日本語" }, { value: "pt-BR", flag: "🇧🇷", label: "Português" }, { value: "zh-CN", flag: "🇨🇳", label: "简体中文" }, { value: "zh-TW", flag: "繁", label: "繁體中文" },