export default { // Navigation nav: { printers: 'プリンター', archives: 'アーカイブ', queue: 'キュー', stats: '統計', profiles: 'プロファイル', maintenance: 'メンテナンス', projects: 'プロジェクト', inventory: 'フィラメント', files: 'ファイル管理', makerworld: 'MakerWorld', notifications: '通知', settings: '設定', system: 'システム', collapseSidebar: 'サイドバーを閉じる', expandSidebar: 'サイドバーを開く', update: 'アップデート', updateAvailable: 'アップデートあり: v{{version}}', updateAvailableBanner: 'バージョン {{version}} が利用可能です!', viewUpdate: 'アップデートを表示', viewOnGithub: 'GitHubで表示', keyboardShortcuts: 'キーボードショートカット (?)', switchToLight: 'ライトモードに切替', switchToDark: 'ダークモードに切替', smartSwitches: 'スマートスイッチ', logout: 'ログアウト', }, // Common common: { save: '保存', saving: '保存中...', cancel: 'キャンセル', delete: '削除', edit: '編集', add: '追加', close: '閉じる', confirm: '確認', loading: '読み込み中...', error: 'エラー', success: '成功', warning: '警告', enabled: '有効', disabled: '無効', yes: 'はい', no: 'いいえ', on: 'オン', off: 'オフ', all: 'すべて', none: 'なし', search: '検索', filter: 'フィルター', sort: '並べ替え', refresh: '更新', download: 'ダウンロード', upload: 'アップロード', uploading: 'アップロード中...', uploadFailed: 'アップロード失敗', actions: '操作', status: 'ステータス', name: '名前', description: '説明', date: '日付', time: '時間', hours: '時間', minutes: '分', seconds: '秒', days: '日', enable: '有効化', disable: '無効にする', permissions: '権限', noPrinters: 'プリンターが登録されていません', noData: 'データがありません', linkNotFound: 'リンクが見つかりません', required: '必須', optional: 'オプション', dismiss: '閉じる', apply: '適用', reset: 'リセット', export: 'エクスポート', import: 'インポート', clear: 'クリア', selectAll: 'すべて選択', deselectAll: 'すべて選択解除', noChange: '— 変更なし —', unchanged: '変更なし', unassigned: '未割当', unknown: '不明', unknownError: '不明なエラー', today: '今日', tomorrow: '明日', asap: '即時', overdue: '期限超過', now: '今すぐ', collapse: '折りたたむ', expand: '展開', viewArchive: 'アーカイブを表示', viewInFileManager: 'ファイルマネージャーで表示', addedBy: '{{username}}が追加', prints: 'プリント', more: '+{{count}}件', ascending: '昇順', descending: '降順', back: '戻る', copy: 'コピー', copied: 'コピーしました!', printer: 'プリンター', remove: '削除', type: '種類', print: '印刷', rename: '名前変更', move: '移動', create: '作成', duplicate: '複製', left: '左', right: '右', }, // Printers page printers: { title: 'プリンター', addPrinter: 'プリンターを追加', editPrinter: 'プリンターを編集', deletePrinter: 'プリンターを削除', printerName: 'プリンター名', serialNumber: 'シリアル番号', ipAddress: 'IPアドレス / ホスト名', accessCode: 'アクセスコード', model: 'モデル', nozzleCount: 'ノズル数', autoArchive: '自動アーカイブ', status: { available: '利用可能', idle: '待機中', printing: '印刷中', paused: '一時停止', offline: 'オフライン', problem: '問題', error: 'エラー', finished: '完了', unknown: '不明', }, temperatures: { nozzle: 'ノズル', bed: 'ベッド', chamber: 'チャンバー', }, progress: '{{percent}}% 完了', timeRemaining: '残り {{time}}', deleteConfirm: '「{{name}}」を削除しますか?', maintenanceOk: 'メンテナンス正常', maintenanceWarning: '{{count}}件の警告', maintenanceWarning_plural: '{{count}}件の警告', maintenanceDue: '{{count}}件のメンテナンス期限', maintenanceDue_plural: '{{count}}件の期限', // Sort options sort: { name: '名前', status: 'ステータス', model: 'モデル', location: 'ロケーション', ascending: '昇順で並べ替え', descending: '降順で並べ替え', }, // Card size cardSize: { small: '小', medium: '中', large: '大', extraLarge: '特大', }, // Controls hideOffline: 'オフラインを非表示', nextAvailable: '次に完了', powerOn: '電源オン', offlinePrintersWithPlugs: 'スマートプラグ付きオフラインプリンター', noPrintersConfigured: 'プリンターが設定されていません', search: 'プリンターを検索...', noSearchResults: '検索またはフィルターに一致するプリンターがありません', filter: { allStatuses: 'すべてのステータス', allLocations: 'すべての場所', }, // Printer card readyToPrint: '印刷可能', external: '外部', extL: 'Ext-L', extR: 'Ext-R', deleteArchives: '印刷アーカイブを削除', noLabel: 'ラベルなし', printPreview: '印刷プレビュー', width: '幅', height: '高さ', noObjectsFound: 'オブジェクトが見つかりません', objectsLoadedOnPrintStart: 'オブジェクトは印刷開始時に読み込まれます', willBeSkipped: 'スキップされます', name: '名前', serialCannotBeChanged: 'シリアル番号は変更できません', locationHelp: 'プリンターのグループ化とキュージョブのフィルタリングに使用', // WiFi signal strength wifiSignal: { veryWeak: '非常に弱い', weak: '弱い', fair: '注意', good: '良好', excellent: '非常に良い', }, // Maintenance maintenanceUpToDate: 'すべてのメンテナンスが最新です', // Chamber light chamberLightOn: 'チャンバーライトをオンにしました', chamberLightOff: 'チャンバーライトをオフにしました', // Files files: 'ファイル', browseFiles: 'プリンターのファイルを参照', // Smart plug autoOffAfterPrint: '印刷後に自動電源オフ', autoOffExecuted: '自動オフが実行されました - リセットするにはプリンターの電源を入れてください', // HMS errors hmsErrors: 'クリックしてHMSエラーを表示', viewHmsErrors: '{{count}}件のHMSエラーを表示', // Actions resume: '再開', pause: '一時停止', stop: '停止', camera: 'カメラ', skipObject: 'オブジェクトスキップ', reconnect: '再接続', forceRefresh: '強制更新', forceRefreshSuccess: '更新をリクエストしました', mqttDebug: 'MQTTデバッグ', printerInformation: 'プリンター情報', copyToClipboard: 'コピー', copied: 'コピーしました!', state: '状態', wifiSignalLabel: 'WiFi信号', developerMode: '開発者モード', enabled: '有効', disabled: '無効', addedOn: '追加日', sdCard: 'SDカード', inserted: '挿入済み', notInserted: '未挿入', totalPrintHours: '印刷時間', activeNozzle: 'アクティブ: {{nozzle}}ノズル', nozzleRack: 'ノズルラック', nozzleDocked: 'ドッキング中', nozzleMounted: 'マウント中', nozzleActive: 'アクティブ', nozzleIdle: 'アイドル', nozzleDiameter: '直径', nozzleType: 'タイプ', nozzleStatus: 'ステータス', nozzleFilament: 'フィラメント', nozzleWear: '摩耗', nozzleMaxTemp: '最高温度', nozzleSerial: 'シリアル', nozzleHardenedSteel: '焼入れ鋼', nozzleStainlessSteel: 'ステンレス鋼', nozzleTungstenCarbide: 'タングステンカーバイド', nozzleFlow: 'フロー', nozzleHighFlow: 'ハイフロー', nozzleStandardFlow: 'スタンダード', // Firmware firmwareUpdate: 'ファームウェアアップデート', firmwareInstructions: 'プリンターのタッチスクリーンで', firmwareNav: 'に移動', settings: '設定', firmware: 'ファームウェア', // Discovery discoverPrinters: 'プリンターを検出', searching: '検索中...', manualEntry: '手動入力', addFromCloud: 'クラウドから追加', // Toast messages toast: { printerDeleted: 'プリンターを削除しました', missingSpoolAssignment: '{{printer}}で印刷を開始しました。以下のスプール割り当てがありません: {{slots}}', printerAdded: 'プリンターを追加しました', printerUpdated: 'プリンターを更新しました', failedToDelete: 'プリンターの削除に失敗しました', failedToAdd: 'プリンターの追加に失敗しました', failedToUpdate: 'プリンターの更新に失敗しました', commandSent: 'コマンドを送信しました', failedToSendCommand: 'コマンドの送信に失敗しました', turnedOn: '{{name}} の電源をオンにしました', failedToPowerOn: '{{name}} の電源オンに失敗しました', scriptTriggered: 'スクリプトを実行しました', printStopped: '印刷を停止しました', printPaused: '印刷を一時停止しました', printResumed: '印刷を再開しました', referenceDeleted: 'リファレンスを削除しました', detectionAreaSaved: '検出エリアを保存しました', failedToRunScript: 'スクリプトの実行に失敗しました', failedToStopPrint: '印刷の停止に失敗しました', failedToPausePrint: '印刷の一時停止に失敗しました', failedToResumePrint: '印刷の再開に失敗しました', failedToControlChamberLight: 'チャンバーライトの制御に失敗しました', failedToSetSpeed: '印刷速度の設定に失敗しました', failedToUpdateSetting: '設定の更新に失敗しました', failedToSkipObjects: 'オブジェクトのスキップに失敗しました', failedToRereadRfid: 'RFIDの再読み取りに失敗しました', failedToCheckPlate: 'プレートの確認に失敗しました', failedToUpdateLabel: 'ラベルの更新に失敗しました', failedToDeleteReference: 'リファレンスの削除に失敗しました', failedToSaveDetectionArea: '検出エリアの保存に失敗しました', plateCheckEnabled: 'プレートチェックを有効にしました', plateCheckDisabled: 'プレートチェックを無効にしました', calibrationSaved: 'キャリブレーションを保存しました!', calibrationFailed: 'キャリブレーションに失敗しました', rfidRereadInitiated: 'RFID再読み取りを開始しました', loadInitiated: 'Loading filament…', unloadInitiated: 'Unloading filament…', failedToLoad: 'Failed to load filament', failedToUnload: 'Failed to unload filament', }, // Connection status connection: { connected: '接続中', offline: 'オフライン', }, plateStatus: { markCleared: 'プレートをクリア済みにする', cleared: 'プレートクリア済み', notCleared: 'プレート未クリア', inUse: 'プレート使用中', }, // Queue info queue: { inQueue: 'キュー内 {{count}} 件', inQueue_plural: '{{count}}件がキュー内', }, // Controls section controls: 'コントロール', // RFID rfid: { reread: 'RFID再読み取り', }, // AMS load/unload (#891) ams: { load: 'Load', unload: 'Unload', }, bedJog: { title: 'ビルドプレートを移動', bed: 'ベッド', step: 'ステップ (mm)', up: 'プレートを上へ', down: 'プレートを下へ', disabledWhilePrinting: '印刷中は無効', notHomedTitle: 'プリンターがホーミングされていません', notHomedMessage: '前回の印刷以降、プリンターがホーミングされていません。安全な位置決めのためにまずオートホーミングを実行するか(ツールヘッドをパークしてからX・Y・Zをホーミングします)、このまま移動してください — ソフトエンドストップはバイパスされます。', homeZ: 'オートホーミング', moveAnyway: 'このまま移動', homingStarted: 'プリンターをオートホーミング中…', }, // Permissions permission: { noAdd: 'プリンターを追加する権限がありません', noEdit: 'プリンターを編集する権限がありません', noDelete: 'プリンターを削除する権限がありません', noControl: 'プリンターを制御する権限がありません', noFiles: 'このディレクトリにファイルがありません', noAmsRfid: 'AMS RFIDを再読み取りする権限がありません', noSmartPlugControl: 'スマートプラグを制御する権限がありません', noCamera: 'カメラを表示する権限がありません', }, // Add/Edit modal modal: { addTitle: 'プリンターを追加', editTitle: 'プリンターを編集', myPrinter: 'マイプリンター', selectModel: 'モデルを選択...', locationGroup: 'ロケーション / グループ', locationPlaceholder: '例: 工房、オフィス、地下室', autoArchiveLabel: '完了した印刷を自動アーカイブ', fromPrinterSettings: 'プリンターの設定から取得', modelOptional: 'モデル(任意)', saveChanges: '変更を保存', }, // Skip objects skipObjects: { tooltip: 'オブジェクトスキップ', onlyWhilePrinting: 'オブジェクトスキップ(印刷中のみ)', requiresMultiple: 'オブジェクトスキップ(2個以上必要)', title: 'オブジェクトスキップ', matchIdsInfo: 'プリンター画面のIDと照合してください', printerShowsIds: 'プリンター画面にビルドプレート上のオブジェクトIDが表示されます', skipSelected: '選択をスキップ', skipping: 'スキップ中...', noObjectsSelected: 'オブジェクトが選択されていません', selectObjectsToSkip: '現在の印刷からスキップするオブジェクトを選択してください', skipped: 'スキップ済み', objectsSkipped: 'オブジェクトをスキップしました', activeCount: '{{count}}個アクティブ', waitForLayer: 'オブジェクトをスキップするにはレイヤー2以降をお待ちください(現在レイヤー{{layer}})', skip: 'スキップ', confirmTitle: 'オブジェクトをスキップしますか?', confirmMessage: '「{{name}}」をスキップしますか?この操作は元に戻せません。', }, // Confirm modals confirm: { deleteTitle: 'プリンターを削除', deleteMessage: '「{{name}}」を削除しますか?すべての接続設定が削除されます。', deleteArchivesNote: 'このプリンターのすべての印刷履歴が完全に削除されます。', keepArchivesNote: '印刷履歴は保持されますが、このプリンターとの関連は解除されます。', stopTitle: '印刷を停止', stopMessage: '「{{name}}」の現在の印刷を停止しますか?印刷ジョブがキャンセルされます。', stopButton: '印刷を停止', pauseTitle: '印刷を一時停止', pauseMessage: '「{{name}}」の現在の印刷を一時停止しますか?', pauseButton: '印刷を一時停止', resumeTitle: '印刷を再開', resumeMessage: '「{{name}}」の印刷を再開しますか?', resumeButton: '印刷を再開', powerOnTitle: 'プリンターの電源をオン', powerOnMessage: '「{{name}}」の電源をオンにしますか?', powerOnButton: '電源オン', powerOffTitle: 'プリンターの電源をオフ', powerOffMessage: '「{{name}}」の電源をオフにしますか?', powerOffWarning: '警告: 「{{name}}」は現在印刷中です!電源をオフにしますか?印刷が中断され、プリンターが損傷する可能性があります。', powerOffButton: '電源オフ', }, // Bulk actions bulk: { select: '選択', selectAll: 'すべて選択', selectByLocation: '場所で選択', selected: '{{count}}件選択中', actions: { stop: '停止', pause: '一時停止', resume: '再開', clearPlate: 'ベッドをクリア', clearHMS: '通知をクリア', }, confirm: { stopTitle: '{{count}}件の印刷を停止', stopMessage: '{{count}}台のプリンターのアクティブな印刷をキャンセルします。この操作は元に戻せません。', stopButton: 'すべて停止', pauseTitle: '{{count}}件の印刷を一時停止', pauseMessage: '{{count}}台のプリンターのアクティブな印刷を一時停止します。', pauseButton: 'すべて一時停止', clearPlateTitle: '{{count}}台のプリントベッドをクリア', clearPlateMessage: '{{count}}台のプリンターのプリントベッドをクリアし、キュー内のジョブが開始される場合があります。', clearPlateButton: 'すべてクリア', }, success: '{{count}}台のプリンターで{{action}}が完了', partial: '{{succeeded}}件成功、{{failed}}件失敗', noneApplicable: '選択したプリンターにこのアクションに適した状態のものがありません', selectByState: 'ステータスで選択', }, // Discovery discovery: { title: 'プリンター', searching: '検索中...', scanning: 'スキャン中...', scanProgress: 'スキャン中... {{scanned}}/{{total}}', foundPrinters: '{{count}}台のプリンターを検出', noPrintersFound: 'プリンターが見つかりません', noPrintersFoundSubnet: '指定されたサブネットにプリンターが見つかりません。', noPrintersFoundNetwork: 'ネットワーク上にプリンターが見つかりません。', allConfigured: '検出されたすべてのプリンターは既に設定済みです。', alreadyAdded: '追加済み', select: '選択', manualEntry: '手動入力', addFromCloud: 'クラウドから追加', subnetToScan: 'スキャンするサブネット', dockerNote: 'Dockerを検出しました。プリンターのサブネットをCIDR表記で入力してください。docker-compose.ymlでnetwork_mode: hostが必要です。', scanSubnet: 'サブネットをスキャンしてプリンターを検出', discoverNetwork: 'ネットワーク上のプリンターを検出', scanningSubnet: 'サブネットでBambuプリンターをスキャン中...', scanningNetwork: 'ネットワークをスキャン中...', serialRequired: 'シリアル番号が必要です', unknown: '不明', failedToStart: '印刷の開始に失敗しました', }, // AMS Drying drying: { start: '乾燥開始', stop: '乾燥停止', temperature: '温度', duration: '時間', hours: '時間', timeRemaining: '残り {{time}}', active: '乾燥中', notSupported: '乾燥非対応', powerRequired: 'AMS電源アダプターを接続して乾燥を有効にしてください', startingDrying: '乾燥を開始しています...', stoppingDrying: '乾燥を停止しています...', rotateTray: '乾燥中にスプールを回転', }, // Filaments section filaments: 'フィラメント', // Camera openCameraOverlay: 'カメラオーバーレイを開く', openCameraWindow: 'カメラを新しいウィンドウで開く', // Firmware firmwareUpdateAvailable: 'ファームウェアアップデートあり: {{current}} → {{latest}}', firmwareUpToDate: 'ファームウェア {{version}} — 最新', firmwareUpdateButton: 'アップデート', // Plate detection plateDetection: { noPermission: 'このページにアクセスする権限がありません。', enabledClick: 'プレートチェック有効 - クリックして無効化', disabledClick: 'プレートチェック無効 - クリックして有効化', manageCalibration: 'プレート検出キャリブレーションを管理', calibrationRequired: 'キャリブレーションが必要です', calibrationInstructions: 'ビルドプレートが完全に空であることを確認してから、キャリブレーションをクリックしてください。', calibrationDescription: 'キャリブレーションは空のプレートのリファレンス画像を撮影します。以降のチェックではこのリファレンスと比較してオブジェクトを検出します。', calibrationTip: 'ヒント: 異なるプレート用に最大5つのキャリブレーションを保存できます。チェック時に最適なものが自動的に使用されます。', plateEmpty: 'プレートは空のようです', objectsDetected: 'オブジェクトを検出しました', confidence: '信頼度', difference: '差分', analysisPreview: '分析プレビュー:', analysisLegend: '緑の枠 = 検出エリア、赤のオーバーレイ = キャリブレーションとの差分', savedReferences: '保存済みリファレンス ({{count}}/{{max}})', deleteReference: 'リファレンスを削除', labelPlaceholder: 'ラベル...', clickToEdit: '{{label}} - クリックして編集', clickToAddLabel: 'クリックしてラベルを追加', }, // Speed speed: { title: '印刷速度', silent: 'サイレント (50%)', standard: 'スタンダード (100%)', sport: 'スポーツ (124%)', ludicrous: 'ルディクラス (166%)', }, airduct: { title: 'エアダクトモード', cooling: '冷却', heating: '加熱', }, noSdCard: 'SDなし', door: { open: '開', closed: '閉', }, // Fans fans: { partCooling: 'パーツ冷却ファン', auxiliary: '補助ファン', chamber: 'チャンバーファン', }, // HMS errors clickToViewHmsErrors: 'クリックしてHMSエラーを表示', estimatedCompletion: '完了予定時刻', plateNumber: 'プレート {{number}}', slotOptions: 'スロットオプション', // AMS hover popup amsPopup: { friendlyName: 'AMS名', friendlyNamePlaceholder: '例: AMS フレンドリー名', serialNumber: 'シリアル番号', firmwareVersion: 'ファームウェア', save: '保存', clear: 'クリア', noEditPermission: 'AMS ユニットの名前を変更する権限がありません', }, // Firmware modal firmwareModal: { title: 'ファームウェアアップデート', titleUpToDate: 'ファームウェア情報', currentVersion: '現在のバージョン', latestVersion: '最新バージョン', releaseNotes: 'リリースノート', checkingPrereqs: '前提条件を確認中...', sdCardReady: 'SDカード準備完了。下をクリックしてファームウェアをアップロードしてください。', uploadedSuccess: 'ファームウェアをSDカードにアップロードしました!', applyInstructions: 'プリンターでアップデートを適用するには:', step1: 'プリンターのタッチスクリーンで設定に移動', step2: 'ファームウェアに移動', step3: 'SDカードからアップデートを選択', step4: 'アップデートには10〜20分かかります', done: '完了', starting: '開始中...', uploadFirmware: 'ファームウェアをアップロード', uploadFailed: 'アップロード開始に失敗しました: {{error}}', uploadedToast: 'ファームウェアをアップロードしました!プリンター画面からアップデートを実行してください。', availableVersions: '利用可能なバージョン', usable: '利用可', unavailable: '利用不可', installed: 'インストール済み', newerBadge: '新しい', olderBadge: '古い', currentBadge: '現在', }, accessCodePlaceholder: 'プリンター設定から取得', // ROI editor roi: { title: 'プリンター', xStart: 'X開始', yStart: 'Y開始', width: '幅', height: '高さ', instruction: 'ビルドプレートに焦点を合わせるように検出エリアを調整してください。プレビューの緑の枠が現在のエリアを示しています。', }, developerModeWarning: '開発者LANモードが有効になっていません: {{names}}。一部の機能が動作しない可能性があります。', howToEnable: '有効化方法', incompatibleFile: 'このファイルは{{slicedFor}}用にスライスされていますが、このプリンターは{{printerModel}}です', dropNotPrintable: '.gcodeおよび.gcode.3mfファイルのみ印刷できます', dropToPrint: 'ドロップして印刷', cannotPrint: 'プリンター使用中', }, // Archives page archives: { title: '印刷アーカイブ', searchPlaceholder: 'アーカイブを検索...', filterByPrinter: 'プリンターで絞り込み', filterByStatus: 'ステータスで絞り込み', sortBy: '並べ替え', sortNewest: '新しい順', sortOldest: '古い順', sortName: '名前順', sortDuration: '時間順', sortLargest: '大きい順', sortSmallest: '小さい順', sortSize: 'サイズ', noArchives: 'アーカイブが見つかりません', noArchivesSearch: '検索条件に一致するアーカイブがありません', originalPrintNotVisible: '元の印刷が表示されていません - フィルターをクリアしてみてください', noArchivesYet: 'アーカイブはまだありません', prints: '件', pagination: { showing: '表示中', to: '〜', of: '/', show: '表示', page: 'ページ', all: 'すべて', }, loadingArchives: 'アーカイブを読み込み中...', releaseToUpload: 'ドロップしてアップロード', showAll: 'すべて表示', showFavoritesOnly: 'お気に入りのみ表示', gridView: 'グリッド表示', listView: 'リスト表示', calendarView: 'カレンダー表示', logView: '印刷ログ', manageTags: 'タグを管理', showFailedPrints: '失敗した印刷を表示', hideFailedPrints: '失敗した印刷を非表示', hideDuplicates: '重複を非表示', viewOriginalPrint: 'クリックして元の印刷を表示 (#{{id}})', printTime: '印刷時間', filamentUsed: 'フィラメント使用量', cost: 'コスト', reprint: '再印刷', preview: 'プレビュー', deleteArchive: 'アーカイブを削除', deleteConfirm: 'このアーカイブを削除しますか?', favorite: 'お気に入り', unfavorite: 'お気に入りから削除', viewDetails: '詳細を表示', status: { completed: '完了', failed: '失敗', stopped: '中止', }, toast: { source3mfAttached: 'ソース3MFを添付しました: {{filename}}', failedUploadSource3mf: 'ソース3MFのアップロードに失敗しました', source3mfRemoved: 'ソース3MFを削除しました', failedRemoveSource3mf: 'ソース3MFの削除に失敗しました', f3dAttached: 'F3Dを添付しました: {{filename}}', failedUploadF3d: 'F3Dのアップロードに失敗しました', f3dRemoved: 'F3Dを削除しました', failedRemoveF3d: 'F3Dの削除に失敗しました', timelapseAttached: 'タイムラプスを添付しました: {{filename}}', timelapseAlreadyAttached: 'タイムラプスは既に添付されています', noMatchingTimelapse: '一致するタイムラプスが見つかりません', failedScanTimelapse: 'タイムラプスのスキャンに失敗しました', failedAttachTimelapse: 'タイムラプスの添付に失敗しました', timelapseRemoved: 'タイムラプスを削除しました', failedRemoveTimelapse: 'タイムラプスの削除に失敗しました', timelapseUploaded: 'タイムラプスをアップロードしました: {{filename}}', failedUploadTimelapse: 'タイムラプスのアップロードに失敗しました', archiveDeleted: 'アーカイブを削除しました', failedDeleteArchive: 'アーカイブの削除に失敗しました', addedToFavorites: 'お気に入りに追加しました', removedFromFavorites: 'お気に入りから削除しました', projectUpdated: 'プロジェクトを更新しました', failedUpdateProject: 'プロジェクトの更新に失敗しました', linkCopied: 'リンクをクリップボードにコピーしました', failedCopyLink: 'リンクのコピーに失敗しました', photoDeleted: '写真を削除しました', failedDeletePhoto: '写真の削除に失敗しました', failedDeleteArchives: 'アーカイブの削除に失敗しました', failedUpdateFavorites: 'お気に入りの更新に失敗しました', exportDownloaded: 'エクスポートをダウンロードしました', exportFailed: 'エクスポートに失敗しました', }, menu: { print: '印刷', schedule: 'スケジュール', openInBambuStudio: 'スライサーで開く', slice: 'スライス', externalLink: '外部リンク', viewOnMakerWorld: 'MakerWorldで表示', preview3d: '3Dプレビュー', viewTimelapse: 'タイムラプスを表示', scanForTimelapse: 'タイムラプスをスキャン', uploadTimelapse: 'タイムラプスをアップロード', removeTimelapse: 'タイムラプスを削除', downloadSource3mf: 'ソース3MFをダウンロード', uploadSource3mf: 'ソース3MFをアップロード', replaceSource3mf: 'ソース3MFを置換', removeSource3mf: 'ソース3MFを削除', uploadF3d: 'F3Dをアップロード', replaceF3d: 'F3Dを置換', downloadF3d: 'Fusion 360デザインファイルをダウンロード', removeF3d: 'F3Dを削除', download: 'ダウンロード', copyDownloadLink: 'ダウンロードリンクをコピー', qrCode: 'QRコード', viewPhotos: '写真を表示', viewPhotosCount: '写真を表示 ({{count}})', projectPage: 'プロジェクトページ', addToFavorites: 'お気に入りに追加', removeFromFavorites: 'お気に入りから削除', edit: '編集', goToProject: 'プロジェクトへ: {{name}}', addToProject: 'プロジェクトに追加', removeFromProject: 'プロジェクトから削除', loading: 'アーカイブを読み込み中...', noProjectsAvailable: '利用可能なプロジェクトがありません', searchProjects: 'Search projects…', select: '選択', deselect: '選択解除', delete: '削除', }, permission: { noReprint: 'このアーカイブを再印刷する権限がありません', noAddToQueue: 'キューに追加する権限がありません', noUpdateArchives: 'アーカイブを更新する権限がありません', noUploadFiles: 'ファイルをアップロードする権限がありません', noDownload: 'アーカイブをダウンロードする権限がありません', noCopyLink: 'ダウンロードリンクをコピーする権限がありません', noDelete: 'このアーカイブを削除する権限がありません', noCreate: 'アーカイブを作成する権限がありません', }, platePicker: { title: 'プレビューするプレートを選択', hint: 'このアーカイブには複数のプレートがあります。GCodeビューアで開くプレートを選択してください。', plateLabel: 'プレート {{index}}', objectCount: '{{count}} オブジェクト', objectCount_plural: '{{count}} オブジェクト', noGcode: 'このアーカイブにはプレビュー可能なスライス済みGコードがありません。まずBambu Studioで開いてスライスしてください。', }, card: { previousPlate: '前のプレート', nextPlate: '次のプレート', plateNumber: 'プレート {{index}}', moreOptions: 'その他のオプション', addToFavorites: 'お気に入りに追加', removeFromFavorites: 'お気に入りから削除', cancelled: 'キャンセル', failed: '失敗', duplicate: '重複', duplicateTitle: 'このモデルは以前印刷されています', openSource3mf: 'ソース3MFをBambu Studioで開く(右クリックでオプション表示)', downloadF3d: 'Fusion 360デザインファイルをダウンロード', viewTimelapse: 'タイムラプスを表示', viewPhoto: '写真を表示', viewPhotos: '{{count}}枚の写真を表示', openFolder: 'フォルダーを開く: {{name}}', slicedFile: 'スライス済みファイル - 印刷可能', sourceFile: 'ソースファイルのみ - AMSマッピング不可', gcode: 'GCODE', source: 'ソース', project: 'プロジェクト: {{name}}', estimated: '推定: {{time}}', actual: '実際: {{time}}', accuracy: '精度: {{percent}}%', filament: '{{weight}}g', layer: '{{count}} レイヤー', layers: '{{count}} レイヤー', object: '{{count}}オブジェクト', objects: '{{count}}オブジェクト', slicedFor: '{{model}}用にスライス', uploadedBy: 'アップロード者', noPermissionReprint: '再印刷する権限がありません', noFileForReprint: '3MFファイルがありません — 印刷記録時にプリンターからファイルをダウンロードできませんでした', noPermissionEdit: 'プロファイルを編集する権限がありません', noPermissionDelete: 'アーカイブを削除する権限がありません', reprint: '再印刷', schedulePrint: '印刷をスケジュール', schedule: 'スケジュール', openInBambuStudio: 'スライサーで開く', openInBambuStudioToSlice: 'スライサーでスライス', slice: 'スライス', externalLink: '外部リンク', makerWorld: 'MakerWorld: {{designer}}', viewProject: 'プロジェクトを表示', noExternalLink: '外部リンクなし', preview3d: '3Dプレビュー', download: 'ダウンロード', edit: '編集', delete: '削除', }, modal: { deleteArchive: 'アーカイブを削除', deleteConfirm: '"{{name}}" を削除しますか?この操作は取り消せません。', deleteButton: '削除', removeSource3mf: 'ソース3MFを削除', removeSource3mfConfirm: '"{{name}}"からソース3MFファイルを削除してもよろしいですか?元のスライサープロジェクトファイルが削除されます。', removeButton: '削除', removeF3d: 'F3Dを削除', removeF3dConfirm: '"{{name}}"からFusion 360デザインファイルを削除してもよろしいですか?', removeTimelapse: 'タイムラプスを削除', removeTimelapseConfirm: '"{{name}}"からタイムラプス動画を削除してもよろしいですか?', timelapse: '{{name}} - タイムラプス', selectTimelapse: 'タイムラプスを選択', selectTimelapseDesc: '自動一致が見つかりませんでした。この印刷のタイムラプスを選択してください:', deleteArchives: '印刷アーカイブを削除', deleteArchivesConfirm: '{{count}}件のアーカイブを削除しますか?この操作は元に戻せません。', deleteCount: '{{count}}件を削除', }, page: { title: '印刷アーカイブ', printsCount: '{{filtered}} / {{total}} 件のプリント', dropFilesHere: '.3mfファイルをここにドロップ', releaseToUpload: 'ドロップしてアップロード', only3mfSupported: '.3mfファイルのみ対応しています', close: '閉じる', selected: '{{count}}件選択中', selectAll: 'すべて選択', tags: 'タグ', project: 'プロジェクト', favorite: 'お気に入り', delete: '削除', toggledFavorites: '{{count}}件のアーカイブのお気に入りを切替えました', failedUpdateFavorites: 'お気に入りの更新に失敗しました', archivesDeleted: '{{count}}件のアーカイブを削除しました', failedDeleteArchives: 'アーカイブの削除に失敗しました', photoDeleted: '写真を削除しました', failedDeletePhoto: '写真の削除に失敗しました', }, list: { name: '名前', printer: 'プリンター', date: '日付', size: 'サイズ', actions: '操作', hasTimelapse: 'タイムラプスあり', }, log: { date: '日時', printName: '印刷名', printer: 'プリンター', user: 'ユーザー', status: 'ステータス', duration: '所要時間', filament: 'フィラメント', allPrinters: '全プリンター', allUsers: '全ユーザー', allStatuses: '全ステータス', cancelled: 'キャンセル', skipped: 'スキップ', dateFrom: '開始日', dateTo: '終了日', noEntries: '印刷ログが見つかりません', showing: '{{total}}件中{{count}}件を表示', rowsPerPage: '行数', page: 'ページ', prev: '前へ', next: '次へ', clearLog: 'ログをクリア', clearLogTitle: '印刷ログをクリア', clearLogConfirm: 'すべての印刷ログエントリが完全に削除されます。アーカイブとキューアイテムには影響しません。この操作は元に戻せません。よろしいですか?', clearLogButton: 'すべてクリア', cleared: '{{count}}件のログエントリを削除しました', clearFailed: '印刷ログの削除に失敗しました', }, }, // Queue page queue: { title: '印刷キュー', subtitle: '印刷ジョブのスケジュールと管理', addToQueue: 'キューに追加', // Print modal print: '印刷', reprint: '再印刷', schedulePrint: '印刷をスケジュール', editQueueItem: 'キューアイテムを編集', printToPrinters: '{{count}}台のプリンターで印刷', queueToPrinters: '{{count}}台のプリンターでキュー追加', queueSelectedPlates: '{{count}}プレートをキューに追加', selectAllPlates: '全{{count}}プレートを選択', deselectAll: '全て解除', printQueued: 'キューに追加しました', itemsQueued: '{{count}}件をキューに追加しました', sending: '送信中...', sendingProgress: '送信中 {{current}}/{{total}}...', adding: '追加中...', addingProgress: '追加中 {{current}}/{{total}}...', savingProgress: '保存中 {{current}}/{{total}}...', clearQueue: 'キューをクリア', clearHistory: '履歴をクリア', emptyQueue: 'キューは空です', position: '順番', scheduledTime: '予定時刻', moveUp: '上に移動', moveDown: '下に移動', startNow: '今すぐ開始', printingInProgress: '印刷中...', viewArchive: 'アーカイブを表示', viewInFileManager: 'ファイルマネージャーで表示', itemCount: '{{count}}件', itemCount_plural: '{{count}}件のアイテム', dragToReorder: 'ドラッグして並べ替え(ASAPのみ)', reorderHint: '順番はASAPアイテムのみに影響します。スケジュール済みアイテムは設定時刻に実行されます。', sjf: { label: 'SJF', tooltip: '短いジョブ優先 — スケジューラーが短い印刷を優先します', }, addedBy: '{{name}} が追加', nextInQueue: '次のキュー', clearPlateSuccess: 'プレートをクリアしました — 次の印刷の準備完了', plateNumber: 'プレート {{index}}', // Batch / quantity quantity: '数量', quantityHint: '{{count}}件のキューアイテムを作成', activeBatches: 'アクティブなバッチ', batchProgress: '{{total}}件中{{completed}}件完了', cancelBatch: '残りをキャンセル', batchCancelled: '残りのバッチアイテムをキャンセルしました', cancelBatchConfirmTitle: 'バッチをキャンセル', cancelBatchConfirmMessage: 'このバッチの残りの保留中アイテムをすべてキャンセルしますか?', batch: 'バッチ', // Sections sections: { currentlyPrinting: '印刷中', queued: 'キュー中', history: '履歴', }, // Status status: { pending: '待機中', waiting: '待機中', printing: '印刷中', paused: '一時停止', completed: '完了', failed: '失敗', skipped: 'スキップ', cancelled: 'キャンセル済み', }, // Summary cards summary: { printing: '印刷中', queued: 'キュー中', totalTime: 'キュー合計時間', totalWeight: 'キュー合計重量', history: '履歴', }, // Filters filter: { allPrinters: 'すべてのプリンター', unassigned: '未割当', allStatus: 'すべてのステータス', allLocations: 'すべてのロケーション', any: 'すべて', }, // Sort sort: { byPosition: '順番で並べ替え', byName: '名前で並べ替え', byPrinter: 'プリンターで並べ替え', bySchedule: 'スケジュールで並べ替え', byDate: '日付で並べ替え', ascendingOldest: '昇順(古い順)', descendingNewest: '降順(新しい順)', }, // Badges badges: { staged: 'ステージ済み', requiresPrevious: '前の成功が必要', autoPowerOff: '自動電源オフ', gcodeInjection: 'G-code', }, // Empty state empty: { title: 'スケジュールされた印刷はありません', description: 'アーカイブページのコンテキストメニューから「スケジュール」オプションを使用するか、ファイルをドラッグ&ドロップして始めましょう。', }, // Time time: { asap: '即時', overdue: '期限超過', now: '今すぐ', lessThanMinute: '1分以内', inMinutes: '{{count}}分後', inHours: '{{count}}時間後', }, // Actions actions: { stopPrint: '印刷を停止', startPrint: '印刷を開始', requeue: '再キュー', }, // Bulk edit bulkEdit: { title: '{{count}}件のアイテムを編集', title_plural: '{{count}}件のアイテムを編集', description: '変更した設定のみが選択されたアイテムに適用されます。', printer: 'プリンター', noChange: '— 変更なし —', queueOptions: 'キューオプション', staged: 'ステージ済み', autoPowerOff: '印刷後に自動電源オフ', requirePrevious: '前の成功を必要とする', printOptions: '印刷オプション', bedLevelling: 'ベッドレベリング', flowCalibration: 'フローキャリブレーション', vibrationCalibration: '振動キャリブレーション', layerInspection: '第一層検査', timelapse: 'タイムラプス', useAms: 'AMS使用', applyChanges: '変更を適用', selectAll: 'すべて選択', deselectAll: 'すべて選択解除', selected: '{{count}}件選択中', editSelected: '選択を編集', cancelSelected: '選択をキャンセル', }, // Confirmations confirm: { cancelTitle: 'スケジュール済み印刷をキャンセル', cancelMessage: '「{{name}}」をキャンセルしますか?', stopTitle: '印刷を停止', stopMessage: '現在の印刷「{{name}}」を停止しますか?プリンター上の印刷ジョブがキャンセルされます。', removeTitle: '履歴から削除', removeMessage: '「{{name}}」をキュー履歴から削除しますか?', clearHistoryTitle: '履歴をクリア', clearHistoryMessage: '{{count}}件の履歴をすべて削除しますか?', cancelButton: '印刷をキャンセル', stopButton: '印刷を停止', thisPrint: 'この印刷', thisItem: 'このアイテム', }, // Toast messages toast: { cancelled: 'キャンセル済み', cancelFailed: 'アイテムのキャンセルに失敗しました', removed: 'キューアイテムを削除しました', removeFailed: 'プロジェクトからのアーカイブ削除に失敗しました', stopped: '印刷を停止しました', stopFailed: '印刷の停止に失敗しました', released: '印刷をキューにリリースしました', startFailed: '印刷の開始に失敗しました', reorderFailed: 'キューの並べ替えに失敗しました', historyCleared: '{{count}}件の履歴をクリアしました', clearHistoryFailed: '履歴のクリアに失敗しました', updateFailed: 'アイテムの更新に失敗しました', bulkCancelled: '{{count}}件のアイテムをキャンセルしました', bulkCancelFailed: 'アイテムのキャンセルに失敗しました', }, // Timeline view timeline: { listView: 'リスト', timelineView: 'タイムライン', unassigned: '未割当', noData: 'この日の予定された印刷はありません', allDoneBy: 'すべての印刷は {{time}} までに完了予定', staged: 'ステージング', filterAll: 'すべて表示', filterPrinting: '印刷中', filterQueued: '待機中', time: { anyMoment: 'まもなく', minutesLeft: '残り{{minutes}}分', hoursLeft: '残り{{hours}}時間', hoursMinutesLeft: '残り{{hours}}時間{{minutes}}分', }, day: { previous: '前日', next: '翌日', today: '今日', }, }, // Permissions permissions: { noStopPrint: '印刷を停止する権限がありません', noStartPrint: '印刷を開始する権限がありません', noEdit: 'このキューアイテムを編集する権限がありません', noCancel: 'このキューアイテムをキャンセルする権限がありません', noRequeue: 'アイテムを再キューする権限がありません', noRemove: 'このキューアイテムを削除する権限がありません', noClearHistory: 'すべての履歴をクリアする権限がありません', noEditItems: 'キューアイテムを編集する権限がありません', noCancelItems: 'キューアイテムをキャンセルする権限がありません', }, }, backgroundDispatch: { unknownFile: '不明なファイル', unknownPrinter: '不明なプリンター', startingPrints: '印刷開始中', progressSummary: '{{complete}}/{{total}} 完了 • 配信済み: {{dispatched}} • 処理中: {{processing}}', expandDetails: '配信詳細を展開', collapseDetails: '配信詳細を折りたたむ', dismissToast: '配信トーストを閉じる', cancelDispatchJob: '配信ジョブをキャンセル', cancel: 'キャンセル', cancelling: 'キャンセル中…', awaitingPrinter: 'プリンターを待機中…', status: { dispatched: '配信済み', processing: '処理中', completed: '完了', failed: '失敗', cancelled: 'キャンセル済み', }, toast: { cancellingUpload: 'アップロードをキャンセル中...', cancelled: '配信をキャンセルしました', cancelFailed: '配信のキャンセルに失敗しました', completeWithFailures: 'バックグラウンド配信完了: {{completed}} 件成功、{{failed}} 件失敗', completeSuccess: 'バックグラウンド配信完了: {{completed}} 件成功', printStartedRemaining: '{{completed}} 件の印刷を開始、残り {{remaining}} 件送信中...', }, }, // Statistics page stats: { title: '統計', subtitle: 'ウィジェットをドラッグして並べ替え。目のアイコンをクリックして非表示。', overview: '概要', totalPrints: '総印刷数', successRate: '成功率', totalPrintTime: '総印刷時間', printTime: '印刷時間', totalFilament: '総フィラメント使用量', filamentUsed: 'フィラメント使用量', filamentCost: 'フィラメントコスト', totalCost: '総コスト', energyUsed: 'エネルギー使用量', energyCost: 'エネルギーコスト', energyWarmingUpTooltip: 'エネルギー追跡は毎時スナップショットを収集中です。選択範囲の前に少なくとも1つのスナップショットが存在すると、期間合計が正確になります。初期値は過小になる場合があります。', averagePrintTime: '平均印刷時間', printsPerDay: '1日あたりの印刷数', byPrinter: 'プリンター別', printsByPrinter: 'プリンター別印刷数', byMaterial: '素材別', byMonth: '月別', last7Days: '過去7日間', last30Days: '過去30日間', last90Days: '過去90日間', allTime: '全期間', // Widgets quickStats: 'クイック統計', printActivity: '印刷アクティビティ', filamentTypes: 'フィラメントタイプ', filamentTrends: 'フィラメントトレンド', failureAnalysis: '失敗分析', timeAccuracy: '時間精度', successful: '成功', failed: '失敗', perfectEstimate: '100% = 完全な推定', noTimeAccuracyData: '時間精度データがありません', noFilamentData: 'フィラメントデータがありません', noPrinterData: 'プリンターデータがありません', noPrintData: '印刷データがありません', noPrintDataLast30Days: '過去30日間の印刷データがありません', failureReasons: '失敗理由', topFailureReasons: '主な失敗理由', failedPrintsCount: '{{failed}} / {{total}} 件の印刷が失敗', lastWeekRate: '先週: {{rate}}%', // Actions resetLayout: 'レイアウトをリセット', recalculateCosts: 'コストを再計算', recalculateCostsHint: '現在のフィラメント価格ですべてのアーカイブコストを再計算', exportStats: '統計をエクスポート', exportAsCsv: 'CSVでエクスポート', exportAsExcel: 'Excelでエクスポート', hiddenCount: '{{count}}件非表示', // Toast exportDownloaded: 'エクスポートをダウンロードしました', exportFailed: 'エクスポートに失敗しました', layoutReset: 'レイアウトをリセットしました', recalculatedCosts: '{{count}}件のアーカイブのコストを再計算しました', recalculateFailed: 'コストの再計算に失敗しました', // Loading loadingStats: '統計を読み込み中...', // Permissions noPermissionResetLayout: 'レイアウトをリセットする権限がありません', noPermissionRecalculate: 'コストを再計算する権限がありません', noPrintDataInRange: '選択した期間にデータがありません', periodFilament: 'フィラメント使用量', periodCost: 'コスト', avgPerPrint: '1印刷あたりの平均', usageOverTime: '時間推移', filamentByWeight: '重量', printDuration: '印刷時間分布', printerUtilization: 'プリンター稼働率', filamentSuccess: '素材別成功率', printHabits: '印刷習慣', printTimeOfDay: '時間帯別プリント', colorDistribution: 'カラー分布', noColorData: 'カラーデータがありません', records: '記録', longestPrint: '最長プリント', heaviestPrint: '最重プリント', mostExpensivePrint: '最高額', busiestDay: '最多プリント日', successStreak: '連続成功', streakPrint: '連続プリント', streakPrints: '{{count}}連続プリント', printerStats: 'プリンター統計', hours: '時間', avgPrints: '平均印刷数', noArchiveData: '印刷データがありません', filamentByTime: '推移', avgWeight: '平均重量', avgTime: '平均時間', filamentByPrints: '印刷数', timeframe: { today: '今日', 'this-week': '今週', 'this-month': '今月', 'last-7': '過去7日間', 'last-30': '過去30日間', 'last-90': '過去90日間', 'this-year': '今年', 'all-time': '全期間', custom: 'カスタム', from: '開始', to: '終了', }, allUsers: '全ユーザー', noUser: 'ユーザーなし(システム)', filterByUser: 'ユーザーでフィルター', }, // Maintenance page maintenance: { title: 'メンテナンス', overview: '概要', allOk: 'すべてのメンテナンスは最新です', dueCount: '{{count}}件の期限到来', dueCount_plural: '{{count}}件の期限到来', warningCount: '{{count}}件の警告', warningCount_plural: '{{count}}件の警告', totalPrintTime: '総印刷時間', nextMaintenance: '次回メンテナンス', nothingDue: '予定なし', tasks: 'タスク', lastPerformed: '前回実施日', interval: '間隔', hoursRemaining: '残り{{hours}}時間', hoursOverdue: '{{hours}}時間超過', markDone: '完了にする', performMaintenance: 'メンテナンスを実施', history: '履歴', noHistory: 'メンテナンス履歴がありません', editPrintHours: '印刷時間を編集', currentHours: '現在の時間', // Tabs statusTab: 'ステータス', settingsTab: '設定', // Status overdueCount: '{{count}}件超過', dueSoonCount: '{{count}}件まもなく期限', dueSoon: 'まもなく期限', allGood: '問題なし', overdueBy: '{{duration}}超過', dueIn: 'あと{{duration}}', timeLeft: '残り{{duration}}', // Duration formats day: '1日', days: '{{count}} 日', week: '1週間', weeks: '{{count}}週間', month: '1ヶ月', months: '{{count}}ヶ月', year: '1年', // Settings maintenanceTypes: 'メンテナンスタイプ', maintenanceTypesDescription: 'システムタイプとカスタムメンテナンスタスク', addCustomType: 'カスタムタイプを追加', restoreDefaults: 'デフォルトタスクを復元', intervalType: 'インターバルタイプ', intervalValue: '間隔 ({{type}})', icon: 'アイコン', documentationLink: 'ドキュメントリンク(任意)', assignToPrinters: 'プリンターに割り当て', selectAtLeastOnePrinter: 'プリンターを1台以上選択してください', addType: 'タイプを追加', custom: 'カスタム', printHours: '印刷時間', calendarDays: 'カレンダー日数', exampleName: '例: HEPAフィルター交換', viewDocumentation: 'ドキュメントを表示', timeBasedInterval: '時間ベースのインターバル', // Interval overrides intervalOverrides: 'インターバルのオーバーライド', intervalOverridesDescription: '特定のプリンターの間隔をカスタマイズ', // Printer assignment assignedToPrinters: '割り当て済みプリンター:', noPrintersAssigned: 'プリンター未割り当て', addPrinterShort: '追加:', printersAssignedClick: '{{count}}台のプリンターを割り当て済み - クリックして管理', removeFromPrinter: 'このプリンターから削除', // Types types: { lubricateCarbonRods: 'カーボンロッドの潤滑', lubricateRails: 'リニアレールの潤滑', cleanNozzle: 'ノズル/ホットエンドの清掃', checkBelts: 'ベルト張力の確認', cleanBuildPlate: 'ビルドプレートの清掃', checkExtruder: 'エクストルーダーギアの確認', checkCooling: '冷却ファンの確認', generalInspection: '総合点検', cleanCarbonRods: 'カーボンロッドの清掃', lubricateSteelRods: 'スチールロッドの潤滑', cleanSteelRods: 'スチールロッドの清掃', cleanLinearRails: 'リニアレールの清掃', checkPtfeTube: 'PTFEチューブの確認', replaceHepaFilter: 'HEPAフィルター交換', replaceCarbonFilter: 'カーボンフィルター交換', lubricateLeftNozzleRail: '左ノズルレールの潤滑', }, // Toast maintenanceComplete: 'メンテナンスを完了としてマークしました', typeUpdated: 'メンテナンスタイプを更新しました', typeDeleted: 'メンテナンスタイプを削除しました', defaultsRestored: 'デフォルトタスクを{{count}}件復元しました', printHoursUpdated: '印刷時間を更新しました', printerAssigned: 'プリンターを割り当てました', printerRemoved: 'プリンターを削除しました', // Confirmation deleteTypeConfirm: '「{{name}}」を削除しますか?', deleteSystemTypeTitle: 'デフォルトのメンテナンスタスクを削除しますか?', deleteSystemTypeMessage: 'デフォルトのメンテナンスタスク「{{name}}」を削除してもよろしいですか?', // Permissions noPermissionUpdate: 'メンテナンス記録を更新する権限がありません', noPermissionPerform: 'メンテナンスを実行する権限がありません', noPermissionEditTypes: 'メンテナンスタイプを編集する権限がありません', noPermissionDeleteTypes: 'メンテナンスタイプを削除する権限がありません', noPermissionEditHours: 'メンテナンス時間を編集する権限がありません', noPermissionRemovePrinter: 'プリンターの割り当てを解除する権限がありません', noPermissionAssignPrinter: 'プリンターを割り当てる権限がありません', noPermissionEditIntervals: 'メンテナンス間隔を編集する権限がありません', // Configure link configureSettings: 'メンテナンスタイプと間隔を設定', }, // Settings page settings: { title: '設定', general: '一般', // Tab names tabs: { general: '一般', smartPlugs: 'スマートプラグ', notifications: '通知', queue: 'ワークフロー', filament: 'フィラメント', network: 'ネットワーク', apiKeys: 'APIキー', virtualPrinter: '仮想プリンター', spoolbuddy: 'SpoolBuddy', failureDetection: '失敗検出', users: '認証', backup: 'バックアップ', emailAuth: 'メール認証', ldap: 'LDAP', twoFa: '二段階認証', oidc: 'SSO / OIDC', }, spoolbuddy: { infoTitle: 'SpoolBuddy デバイス', infoBody: 'SpoolBuddy キオスクはハートビートにより自動的に登録されます。使用されなくなった場合や、デーモンのクラッシュにより古い重複が残った場合は、ここでデバイスの登録を解除してください。', duplicatesTitle: '{{count}} 台のデバイスが登録されています', duplicatesBody: 'キオスク UI は最初に登録されたデバイスのみを使用します。クラッシュによる古い重複がある場合は登録解除してください。オンラインのデバイスは次回のハートビートで自動的に再登録されます。', empty: 'SpoolBuddy デバイスはまだ登録されていません。', online: 'オンライン', offline: 'オフライン', unregister: '登録解除', unregisterSuccess: 'デバイスの登録を解除しました', unregisterError: 'デバイスの登録解除に失敗しました', confirmTitle: 'SpoolBuddy デバイスの登録を解除しますか?', confirmBody: '「{{hostname}}」({{deviceId}})をデータベースから削除します。デバイスがオンラインの場合、次回のハートビートで自動的に再登録されます。', ipAddress: 'IPアドレス', firmware: 'ファームウェア', lastSeen: '最終接続', daemonUptime: 'デーモン稼働時間', systemUptime: 'システム稼働時間', never: 'なし', nfc: 'NFC', scale: '計量器', cpuTemp: 'CPU 温度', memory: 'メモリ', disk: 'ディスク', update: 'アップデート', updateConfirmTitle: 'Spoolbuddyデーモンを更新しますか?', updateConfirmBody: '"{{hostname}}"のソフトウェア更新を実行しますか?更新後にデーモンが再起動されます。', restartBrowser: 'ブラウザを再起動', restartBrowserConfirmTitle: 'キオスクブラウザを再起動しますか?', restartBrowserConfirmBody: '"{{hostname}}"のキオスクブラウザを再起動しますか?画面が一時的に消えます。', restartDaemon: 'デーモンを再起動', restartDaemonConfirmTitle: 'Spoolbuddyデーモンを再起動しますか?', restartDaemonConfirmBody: '"{{hostname}}"のSpoolbuddyデーモンを再起動しますか?デバイスが数秒間オフラインになります。', reboot: '再起動', rebootConfirmTitle: 'デバイスを再起動しますか?', rebootConfirmBody: '"{{hostname}}"を再起動しますか?デバイスは約1分間オフラインになります。', shutdown: 'シャットダウン', shutdownConfirmTitle: 'デバイスをシャットダウンしますか?', shutdownConfirmBody: '"{{hostname}}"をシャットダウンしますか?再起動には物理的なアクセスが必要です。', commandConfirm: '確認', commandQueued: 'コマンドをキューに追加しました', commandError: 'コマンドの送信に失敗しました', }, ldap: { title: 'LDAP認証', enabledDesc: 'LDAP認証が有効です', disabledDesc: 'LDAP認証が無効です', disabledHint: '以下のLDAP設定を構成して保存し、有効にしてください。', enabled: 'LDAP認証を有効にしました', disabled: 'LDAP認証を無効にしました', feature1: 'LDAP資格情報でログインできます', feature2: 'ローカル管理者アカウントはフォールバックとして残ります', feature3: 'ログイン時にLDAPグループがBamBuddyグループにマッピングされます', serverConfig: 'LDAPサーバー設定', serverUrl: 'サーバーURL', serverUrlHint: '標準はldap://、SSL接続はldaps://を使用', security: 'セキュリティ', securityHint: 'StartTLSはプレーン接続をTLSにアップグレードします。LDAPSは最初からTLSを使用します。', bindDn: 'バインドDN(サービスアカウント)', bindPassword: 'バインドパスワード', searchBase: '検索ベースDN', userFilter: 'ユーザー検索フィルター', userFilterHint: '{username}はログインユーザー名に置き換えられます。OpenLDAPの場合は(uid={username})を使用。', autoProvision: 'ユーザー自動作成', autoProvisionHint: '初回LDAPログイン時にBamBuddyアカウントを自動作成', defaultGroup: 'デフォルトグループ', defaultGroupNone: '— なし(フォールバックなし)—', defaultGroupHint: 'LDAPユーザーが認証されたがマッピングされたLDAPグループに属していない場合に割り当てられるフォールバックグループ。空欄の場合、マッピングされていないユーザーは権限なしのままになります。', groupMapping: 'グループマッピング(JSON)', groupMappingHint: 'LDAPグループDNをBamBuddyグループにマッピング。利用可能なグループ: ', testConnection: '接続テスト', settingsSaved: 'LDAP設定を保存しました', errors: { serverRequired: 'LDAPサーバーURLは必須です', searchBaseRequired: '検索ベースDNは必須です', enableAuthFirst: '先に認証を有効にしてください', configureLdapFirst: '先にLDAP設定を保存してください', }, }, // Email settings email: { smtpSettings: 'SMTP設定', smtpHost: 'SMTPサーバー', smtpPort: 'SMTPポート', security: 'セキュリティ', authentication: '認証', username: 'ユーザー名', password: 'パスワード', fromEmail: '送信元メールアドレス', fromName: '送信者名', testConnection: 'SMTP接続テスト', testRecipient: 'テスト受信者メール', sendTest: 'テストメール送信', sending: '送信中...', save: '設定を保存', saving: '保存中...', advancedAuth: '高度な認証', advancedAuthEnabled: '高度な認証が有効です', advancedAuthEnabledDesc: 'メールベースのユーザー管理機能が有効になっています。新規ユーザーには自動生成されたパスワードがメールで送信され、ユーザーはパスワード忘れ機能でパスワードをリセットできます。', advancedAuthDisabled: '高度な認証が無効です', advancedAuthDisabledDesc: '高度な認証を有効にして、ユーザー管理のメールベース機能を有効化してください。', enable: '有効にする', disable: '無効にする', feature1: 'パスワードは自動生成され、新規ユーザーにメールで送信されます', feature2: 'ユーザーはユーザー名またはメールでログインできます', feature3: 'パスワード忘れ機能が利用可能です', feature4: '管理者はメールでユーザーパスワードをリセットできます', // Error messages errors: { requiredFields: 'すべての必須フィールドに入力してください', usernameRequired: '認証が有効な場合、ユーザー名は必須です', enterTestEmail: 'テストメールアドレスを入力してください', smtpServerAndEmail: 'テストする前にSMTPサーバーと送信元メールを入力してください', usernamePasswordRequired: '認証が有効な場合、ユーザー名とパスワードは必須です', configureSmtpFirst: '最初にSMTP設定を構成してテストしてください', enableAuthFirst: 'メール関連機能をご利用いただくには、まず認証を有効にしてください。', }, // Success messages success: { settingsSaved: 'SMTP設定を保存しました', }, // Security options securityOptions: { starttls: 'STARTTLS (ポート 587)', ssl: 'SSL/TLS (ポート 465)', none: 'なし (ポート 25)', }, // Authentication options authOptions: { enabled: '有効', disabled: '無効', }, }, appearance: '外観', notifications: '通知', smartPlugs: 'スマートプラグ', spoolman: 'Spoolman', updates: 'アップデート', language: '言語', languageDescription: '表示言語を選択してください', theme: 'テーマ', themeLight: 'ライト', themeDark: 'ダーク', themeSystem: 'システム設定に従う', defaultView: 'デフォルト画面', defaultViewDescription: 'アプリ起動時に表示するページ', checkForUpdates: 'アップデートを確認', autoUpdate: '自動アップデート', currentVersion: '現在のバージョン', latestVersion: '最新バージョン', upToDate: '最新です', updateAvailable: 'アップデートあり', // Notifications notificationLanguage: '通知の言語', notificationLanguageDescription: 'プッシュ通知の言語', bedCooledThreshold: 'ベッド冷却しきい値', bedCooledThresholdDescription: '印刷後にベッドが冷却されたと見なす温度', userNotificationsEnabled: 'ユーザー通知', userNotificationsEnabledDescription: 'ユーザー通知メニューと印刷ジョブイベントのメール通知を有効にします。高度な認証が必要です。', userNotificationsDisabledHint: 'ユーザー通知を使用するには高度な認証を有効にしてください。', notificationProviders: '通知プロバイダー', addProvider: 'プロバイダーを追加', editProvider: 'プロバイダーを編集', providerType: 'プロバイダーの種類', testNotification: 'テスト通知', testSuccess: 'テスト通知を送信しました', testFailed: 'テスト通知の送信に失敗しました', quietHours: 'おやすみ時間', quietHoursDescription: 'この時間帯は通知を送信しません', quietHoursStart: '開始', quietHoursEnd: '終了', events: { title: '通知イベント', printStart: '印刷開始', printComplete: '印刷完了', printFailed: '印刷失敗', printStopped: '印刷中止', printProgress: '進捗マイルストーン', printProgressDescription: '25%, 50%, 75%で通知', printerOffline: 'プリンターオフライン', printerError: 'プリンターエラー', filamentLow: 'フィラメント残量低下', maintenanceDue: 'メンテナンス期限', maintenanceDueDescription: 'メンテナンスが必要なときに通知', }, // Smart Plugs smartPlug: { title: 'スマートプラグ', add: 'スマートプラグを追加', edit: 'スマートプラグを編集', name: '名前', ipAddress: 'IPアドレス', linkedPrinter: '連携プリンター', autoOn: '自動電源オン', autoOnDescription: '印刷開始時に電源を入れる', autoOff: '自動電源オフ', autoOffDescription: '印刷完了後に電源を切る', offDelay: 'オフ遅延', offDelayMinutes: '印刷後の待機時間(分)', offDelayTemp: 'ノズル温度が下回ったとき', currentState: '現在の状態', turnOn: '電源オン', turnOff: '電源オフ', }, // Filament Tracking Mode filamentTracking: 'フィラメント追跡', filamentTrackingDesc: 'フィラメントスプールの追跡方法を選択してください。内蔵インベントリまたは外部Spoolmanサーバーを使用できます。', filamentChecks: 'フィラメントチェック', disableFilamentWarnings: 'フィラメント警告を無効化', disableFilamentWarningsDesc: '印刷またはキュー追加時にフィラメント不足の警告を表示しない', preferLowestFilament: '残量が少ないフィラメントを優先', preferLowestFilamentDesc: '複数のスプールが一致する場合、残量が最も少ないものを使用します', trackingModeBuiltIn: '内蔵インベントリ', trackingModeBuiltInDesc: 'RFID自動検出と使用量追跡を含む', trackingModeSpoolmanDesc: '外部フィラメント管理サーバー', builtInFeatureRfid: 'AMS内のBambu Lab RFIDスプールを自動検出', builtInFeatureUsage: 'プリントごとのフィラメント消費量を追跡', builtInFeatureCatalog: 'スプール、カラー、K値プロファイルを管理', builtInFeatureThirdParty: 'サードパーティ製スプールをインベントリスプールに割り当て可能', amsSyncButton: 'AMSから重量を同期', amsSyncTitle: 'AMSからスプール重量を同期', amsSyncMessage: '接続されたプリンターの現在のAMS残量値で、すべてのインベントリスプール重量を上書きします。破損した重量データの復旧に使用してください。プリンターがオンラインである必要があります。', amsSyncing: '同期中...', amsSyncSuccess: '{{synced}}個のスプールを同期、{{skipped}}個をスキップ', amsSyncError: 'AMSからの重量同期に失敗しました', // Spoolman settings spoolmanUrl: 'Spoolman URL', spoolmanUrlHint: 'Spoolmanサーバーのurl(例:http://localhost:7912)', spoolmanConnected: '接続中', spoolmanDisconnected: '未接続', status: 'ステータス', connect: '接続', disconnect: '切断', howSyncWorks: '同期の仕組み', syncInfoRfidOnly: 'RFIDを搭載した公式Bambu Labスプールのみ同期されます', syncInfoAutoCreate: '新しいスプールは初回同期時にSpoolmanに自動作成されます', syncInfoThirdPartySkipped: 'Bambu Lab以外のスプール(サードパーティ、リフィル)はスキップされます', linkingExistingSpools: '既存スプールのリンク', linkingExistingSpoolsDesc: '既存のSpoolmanスプールをAMSにリンクするには、AMSスロットにカーソルを合わせて「Spoolmanにリンク」をクリックしてください。', syncMode: '同期モード', syncModeAuto: '自動', syncModeManual: '手動のみ', syncModeAutoDesc: '変更が検出されるとAMSデータが自動的に同期されます', syncModeManualDesc: '手動でトリガーした場合のみ同期', syncAmsData: 'AMSデータを同期', syncAmsDataDesc: 'プリンターのAMSデータをSpoolmanに手動同期', allPrinters: '全プリンター', // Default printer noDefaultPrinter: 'デフォルトなし(毎回選択)', // Sidebar sidebarOrder: 'サイドバーの順序', // Camera saveThumbnails: 'サムネイルを保存', captureFinishPhoto: '完了写真を撮影', noPrintersConfigured: 'プリンターが設定されていません', // Archive settings archiveMode: { always: '常にアーカイブを作成', never: 'アーカイブを作成しない', ask: '毎回確認', }, // Updates checkForUpdatesLabel: 'アップデートを確認', checkPrinterFirmware: 'プリンターファームウェアの確認', includeBetaUpdates: 'ベータ版を含める', includeBetaUpdatesDesc: 'アップデート確認時にベータ版およびプレリリース版を通知する', // Queue enableRetry: 'リトライを有効化', // Home Assistant homeAssistantDescription: 'Home Assistantに接続してHA REST APIでスマートプラグを制御します。switch、light、input_booleanエンティティに対応しています。', environmentManagedLabel: '(環境変数で管理)', autoEnabledViaEnv: '環境変数により自動的に有効化されました', urlFromEnvReadOnly: 'HA_URL環境変数で設定された値(読み取り専用)', tokenFromEnvReadOnly: 'HA_TOKEN環境変数で設定された値(読み取り専用)', // MQTT mqttConnectedTo: '接続先:', // Prometheus prometheusDescription: 'プリンターデータをPrometheus形式で公開', // Smart plugs empty state noSmartPlugsTitle: 'スマートプラグが設定されていません', noSmartPlugsDescription: 'Tasmotaベースのスマートプラグを追加して、エネルギー消費を追跡し、電源制御を自動化します。', // Notifications empty state noProvidersTitle: 'プロバイダーが設定されていません', noProvidersDescription: 'アラートを受信するにはプロバイダーを追加してください。', noTemplatesAvailable: 'テンプレートがありません。バックエンドを再起動してデフォルトテンプレートを生成してください。', // API permissions apiPermissionView: 'プリンターステータスとキューを表示', apiPermissionEdit: '印刷キューにアイテムを追加・削除', // API keys apiKeysEmptyTitle: 'APIキーがありません', apiKeysEmptyDescription: '外部サービスと連携するためのAPIキーを作成してください。', // Users noUsersFound: 'ユーザーが見つかりません', noGroupsFound: 'グループが見つかりません', noGroupsAvailable: '利用可能なグループがありません', passwordsDoNotMatch: 'パスワードが一致しません', systemGroupWarning: 'システムグループ名は変更できません', // Auth disabled authDisabledTitle: '認証が無効です', authDisabledFeature1: 'システムへのアクセスにログインを要求', authDisabledFeature2: 'グループベースの権限で複数ユーザーを作成', authDisabledFeature3: '50以上のきめ細かな権限でアクセスを制御', // User deletion userHasCreated: 'このユーザーは以下を作成しています:', userItemsQuestion: 'これらのアイテムをどうしますか?', deleteUserConfirm: 'このユーザーを削除してもよろしいですか?この操作は元に戻せません。', actionCannotBeUndone: 'この操作は元に戻せません', // Smart plugs addFirstSmartPlug: '最初のスマートプラグを追加', // Notifications providers: 'プロバイダー', log: 'ログ', testAll: 'すべてテスト', testResults: 'テスト結果', testPassedCount: '{{count}}件成功', testFailedCount: '{{count}}件失敗', messageTemplates: 'メッセージテンプレート', messageTemplatesDescription: '各イベントの通知メッセージをカスタマイズ。', // API Keys section apiKeys: 'APIキー', apiKeysDescription: '外部連携やWebhook用のAPIキーを作成します。', createKey: 'キーを作成', apiKeyCreated: 'APIキーを作成しました', apiKeyCopyWarning: '今すぐこのキーをコピーしてください - 再表示されません!', useInApiBrowser: 'APIブラウザーで使用', createNewApiKey: '新しいAPIキーを作成', keyName: 'キー名', keyNamePlaceholder: '例: Home Assistant, OctoPrint', readStatus: 'ステータスの読み取り', readStatusDescription: 'プリンターのステータスとキューを表示', manageQueue: 'キューの管理', manageQueueDescription: '印刷キューへのアイテムの追加と削除', controlPrinter: 'プリンターの制御', controlPrinterDescription: '印刷の一時停止、再開、停止', cloudAccess: 'Allow cloud access', cloudAccessDescription: 'Read Bambu Cloud presets and filaments on your behalf. Requires you to be signed into Bambu Cloud.', cloudBadge: 'Cloud', legacyKey: 'Legacy', legacyKeyTooltip: 'Created before per-user ownership; recreate to use cloud access', unnamedKey: '名前なしキー', lastUsed: '最終使用:', read: '読み取り', control: '制御', createFirstKey: '最初のキーを作成', webhookEndpoints: 'Webhookエンドポイント', webhookApiKeyHint: 'X-API-KeyヘッダーでAPIキーを使用してください。', webhook: { getAllStatus: '全プリンターステータスを取得', getSpecificStatus: '特定のプリンターステータスを取得', addToQueue: '印刷キューに追加', pausePrint: '印刷を一時停止', resumePrint: '印刷を再開', stopPrint: '印刷を停止', }, apiBrowser: 'APIブラウザ', apiBrowserDescription: 'すべての利用可能なAPIエンドポイントを探索してテストします。', apiKeyForTesting: 'テスト用APIキー', apiKeyPlaceholder: 'CallMeBot APIキー', apiKeyHint: 'このキーはX-API-Keyヘッダーとしてリクエストに送信されます。', deleteApiKeyTitle: 'APIキーを削除', deleteApiKeyMessage: 'このAPIキーを削除してもよろしいですか?このキーを使用しているすべての連携が動作しなくなります。', deleteKey: 'キーを削除', // Filament tab amsDisplayThresholds: 'AMS表示しきい値', amsThresholdsDescription: 'AMS湿度と温度インジケーターの色しきい値を設定します。', humidity: '湿度', goodGreen: '良好(緑)≤', fairOrange: '普通(オレンジ)≤', aboveFairBad: '普通のしきい値以上は赤(悪い)で表示', fairAlsoDryingThreshold: 'このしきい値は自動乾燥のトリガーにも使用されます', temperature: '温度', goodBlue: '良好(青)≤', aboveFairHot: '普通のしきい値以上は赤(高温)で表示', historyRetention: '履歴の保持', keepSensorHistory: 'センサー履歴の保持期間', historyRetentionDescription: '古い湿度と温度データは自動的に削除されます', defaultPrintOptions: 'デフォルト印刷オプション', defaultPrintOptionsDescription: '新しい印刷のデフォルト値を設定します。印刷ダイアログで個別に変更できます。', defaultBedLevelling: 'ベッドレベリング', defaultBedLevellingDesc: '印刷前にベッドを自動レベリング', defaultFlowCali: 'フローキャリブレーション', defaultFlowCaliDesc: '押出フローのキャリブレーション', defaultVibrationCali: '振動キャリブレーション', defaultVibrationCaliDesc: 'リンギングアーティファクトを低減', defaultLayerInspect: '第1層検査', defaultLayerInspectDesc: 'AIによる第1層の検査', defaultTimelapse: 'タイムラプス', defaultTimelapseDesc: 'タイムラプス動画を記録', staggeredStart: 'Staggered Start', staggeredStartDescription: 'Default group size and interval when staggering multi-printer batch starts. Can be overridden per batch in the print modal.', plateClear: 'プレートクリア確認', requirePlateClear: 'プレートクリア確認を必須にする', requirePlateClearDescription: '有効にすると、スケジューラーは完了したプリンターでキューの印刷を開始する前に、プリンターごとのプレートクリア確認を待ちます。無効にすると、プリンターカード上のプレート状態バッジと「プレートをクリア済みにする」ボタンも非表示になります。', gcodeInjection: 'G-codeインジェクション', gcodeInjectionDescription: 'Farmloop、SwapMod、AutoClear、Printflow 3Dなどの自動印刷システム用に、印刷の開始と終了時にカスタムG-codeを挿入します。スニペットはプリンターモデルごとに設定し、キューアイテム��「G-codeを挿入」を有効にすると適用されます。', gcodeInjectionNoPrinters: 'プリンターが見つかりません。G-codeスニペットを設定するにはプリンターを追加してください。', gcodeStartLabel: '開始G-code', gcodeEndLabel: '終了G-code', gcodeStartPlaceholder: '印刷開始前に挿入されるG-code...', gcodeEndPlaceholder: '印刷終了後に追加されるG-code...', staggerGroupSize: 'Group size', staggerGroupSizeHelp: 'Printers to start simultaneously per group', staggerInterval: 'Interval (minutes)', staggerIntervalHelp: 'Delay between each group starting', queueDrying: '自動乾燥', queueDryingDescription: 'キュー印刷の合間にプリンターがアイドル状態の時、AMSフィラメントを自動的に乾燥します。上記の湿度しきい値を使用します。', queueDryingEnabled: '自動乾燥を有効にする', queueDryingEnabledDescription: 'プリンターがアイドル状態で湿度がしきい値を超えた場合、AMS乾燥を自動的に開始', queueDryingBlock: '乾燥完了まで待機', queueDryingBlockDescription: '乾燥が完了するまで印刷キューをブロックします。オフの場合、印刷が優先されます。', ambientDryingEnabled: '常時乾燥', ambientDryingEnabledDescription: 'キューに関係なく、アイドル状態のプリンターで湿度がしきい値を超えた場合に自動的にフィラメントを乾燥。', dryingPresets: '乾燥プリセット', dryingPresetsDescription: 'フィラメントタイプごとの温度と時間。AMS 2 Proは低温、AMS-HTは高温に対応。', dryingFilament: 'フィラメント', printModal: '印刷ダイアログ', expandCustomMapping: 'カスタムマッピングをデフォルトで展開', expandCustomMappingDescription: '複数プリンターに印刷する際、プリンターごとのAMSマッピングを展開表示', // User management authentication: '認証', authEnabledDescription: 'ユーザー認証でインスタンスが保護されています', authDisabledDescription: '認証を有効にして、ユーザーアカウントの作成、権限の管理、Bambuddyインスタンスのセキュリティを確保しましょう。', authDisabledMessage: '認証を有効にして、ユーザーアカウントの作成、権限の管理、Bambuddyインスタンスのセキュリティを確保しましょう。', enableAuthentication: '認証を有効にする', currentUser: '現在のユーザー', changePassword: 'パスワードを変更', admin: '管理者', users: 'ユーザー', addUser: 'ユーザーを追加', groups: 'グループ', addGroup: 'グループを追加', system: 'システム', noDescription: '説明なし', userCount: '{{count}}人のユーザー', permissionCount: '{{count}}件の権限', createUser: 'ユーザーを作成', username: 'ユーザー名', enterUsername: 'ユーザー名を入力', password: 'パスワード', enterPassword: 'パスワードを入力(6文字以上)', confirmPassword: 'パスワードの確認', confirmPasswordPlaceholder: 'パスワードを確認', // Title tooltips viewReleaseOnGitHub: 'GitHubでリリースを表示', turnAllPlugsOn: 'すべてのプラグをオン', turnAllPlugsOff: 'すべてのプラグをオフ', // Modal: Clear logs clearNotificationLogs: '通知ログをクリア', clearLogsMessage: '30日以上前のすべての通知ログを完全に削除します。この操作は元に戻せません。', clearLogs: '通知ログを削除', // Modal: Reset UI resetUiPreferences: 'UI設定をリセット', resetUiPreferencesMessage: 'すべてのUI設定をデフォルトにリセットします:サイドバー順序、テーマ、ダッシュボードレイアウト、表示モード、ソート設定。プリンター、アーカイブ、サーバー設定は影響を受けません。クリア後にページがリロードされます。', resetPreferences: '設定をリセット', // Modal: Delete group deleteGroupTitle: 'グループを削除', deleteGroupMessage: 'このグループを削除しますか?このグループのユーザーはこれらの権限を失います。', deleteGroup: 'グループを削除', // Modal: Disable auth disableAuthenticationTitle: '認証を無効化', disableAuthenticationMessage: '認証を無効にしますか?Bambuddyインスタンスにログインなしでアクセスできるようになります。ユーザーはデータベースに残りますが、認証は無効になります。', disableAuthentication: '認証を無効化', // Additional settings configureBambuddy: 'Bambuddyを設定', systemDefault: 'システムデフォルト', archiveSettings: 'アーカイブ設定', newWindow: '新しいウィンドウ', embeddedOverlay: '埋め込みオーバーレイ', preferredSlicer: '優先スライサー', preferredSlicerDescription: 'ファイルを開くスライサーアプリケーションを選択', orcaslicerKnownIssuesWarning: 'OrcaSlicer 2.3.2 / 2.4.0-dev have known CLI bugs that block slicing many Bambu-authored 3MFs — see upstream issues #12426 (segfault on painted multi-extruder files) and #13386 (parameter-range strict-validation reject). Bambu Studio is recommended until the upstream fixes land.', useSlicerApi: 'Use Slicer API', useSlicerApiDescription: 'When on, "Slice" actions open the in-app slicer modal and call the slicer-API sidecar. When off (default), they hand off to the desktop slicer via URI scheme.', slicerCard: 'Slicer', orcaslicerApiUrl: 'OrcaSlicer sidecar URL', bambuStudioApiUrl: 'Bambu Studio sidecar URL', slicerApiUrlDescription: 'URL of the slicer-API sidecar container. Leave blank to use the SLICER_API_URL / BAMBU_STUDIO_API_URL env var defaults.', externalCameras: '外部カメラ', costTracking: 'コスト追跡', printsOnly: '印刷のみ', totalConsumption: '総消費量', dataManagement: 'データ管理', storageUsage: 'ストレージ使用量', storageUsageDescription: 'カテゴリ別のデータ使用量の内訳', storageUsageTotal: '合計', storageUsageErrors: 'エラー', storageUsageOtherBreakdown: 'その他(静的アセット、スクリプト、設定ファイルを含む)', storageUsageSystem: 'システム', storageUsageData: 'データ', storageUsageUnavailable: 'ストレージ使用量情報は利用できません', clearNotificationLogsDescription: '30日以上前の通知ログを削除', resetUiPreferencesDescription: 'サイドバー順序、テーマ、表示モード、レイアウト設定をリセット。プリンター、アーカイブ、設定は影響を受けません。', enableHomeAssistant: 'Home Assistantを有効化', enableMqtt: 'MQTTを有効化', useTls: 'TLSを使用', enableMetricsEndpoint: 'メトリクスエンドポイントを有効化', availableMetrics: '利用可能なメトリクス', editUser: 'ユーザーを編集', deleteUserTitle: 'ユーザーを削除', groupName: 'グループ名', // Placeholders leaveEmptyForAnonymous: '匿名の場合は空のまま', leaveEmptyForNoAuth: '認証なしの場合は空のまま', enterNewPassword: '新しいパスワードを入力', confirmNewPassword: '新しいパスワードを確認', enterGroupName: 'グループ名を入力', enterDescriptionOptional: '説明を入力(任意)', enterCurrentPassword: '現在のパスワードを入力', enterNewPasswordMin6: '新しいパスワードを入力(6文字以上)', toast: { keyCopied: 'キーをクリップボードにコピーしました', copyFailed: 'キーのコピーに失敗しました', keyAddedToBrowser: 'キーをAPIブラウザに追加しました', clearLogsFailed: 'ログの削除に失敗しました', uiPreferencesReset: 'UI設定をリセットしました。更新中...', authDisabled: '認証を無効にしました', authDisableFailed: '認証の無効化に失敗しました', apiKeyCreated: 'APIキーを作成しました', apiKeyDeleted: 'APIキーを削除しました', userCreated: 'ユーザーが正常に作成されました', userUpdated: 'ユーザーが正常に更新されました', userDeleted: 'ユーザーが正常に削除されました', groupCreated: 'グループを作成しました', groupUpdated: 'グループを更新しました', groupDeleted: 'グループを削除しました', fillRequiredFields: '必須項目をすべて入力してください', passwordsDoNotMatch: 'パスワードが一致しません', passwordTooShort: 'パスワードは6文字以上必要です', enterGroupName: 'グループ名を入力', settingsSaved: '設定を保存しました', noPermissionUpdate: '設定を変更する権限がありません', cameraSettingsSaved: 'カメラ設定を保存しました', enterCameraUrl: 'カメラURLを入力してください', passwordChanged: 'パスワードが正常に変更されました', connectionFailed: '接続失敗', testFailed: 'テスト通知の送信に失敗しました', cameraConnected: 'カメラ接続{{resolution}}', }, testConnection: '接続テスト', catalog: { spoolCatalog: 'スプールカタログ', spoolCatalogDescription: 'ブランド/タイプ別の空スプール重量。スプール追加時の自動重量検索に使用されます。', searchCatalog: 'カタログを検索...', addNewEntry: '新しいエントリを追加', namePlaceholder: '名前(例:Bambu Lab - プラスチック)', weight: '重量', type: 'タイプ', default: 'デフォルト', custom: 'カスタム', noMatch: '検索に一致するエントリがありません', empty: 'カタログにエントリがありません', deleteEntry: 'エントリを削除', deleteConfirm: '「{{name}}」を削除してもよろしいですか?', resetCatalog: 'カタログをリセット', resetConfirm: 'カタログをデフォルトにリセットしますか?カスタムエントリはすべて削除されます。', loadFailed: 'スプールカタログの読み込みに失敗しました', nameWeightRequired: '名前と重量は必須です', entryAdded: 'エントリを追加しました', addFailed: 'エントリの追加に失敗しました', entryUpdated: 'エントリを更新しました', updateFailed: 'エントリの更新に失敗しました', entryDeleted: 'エントリを削除しました', deleteFailed: 'エントリの削除に失敗しました', resetSuccess: 'カタログをデフォルトにリセットしました', resetFailed: 'カタログのリセットに失敗しました', exported: '{{count}}件のエントリをエクスポートしました', imported: '{{added}}件のエントリをインポートしました({{skipped}}件スキップ)', importFailed: 'インポートに失敗しました:無効なJSON形式', exportTooltip: 'カタログをJSONにエクスポート', importTooltip: 'JSONからカタログをインポート', resetTooltip: 'デフォルトにリセット', selectedCount: '{{count}}件選択中', deleteSelected: '選択を削除', bulkDeleteConfirm: '{{count}}件のエントリーを削除してもよろしいですか?', bulkDeleted: '{{count}}件のエントリーを削除しました', bulkDeleteFailed: 'エントリーの削除に失敗しました', }, colorCatalog: { title: 'カラーカタログ', description: 'メーカー/素材別のフィラメントカラー。スプール追加時の自動カラー検索に使用されます。', searchColors: 'カラーを検索...', allManufacturers: 'すべてのメーカー', addNewColor: '新しいカラーを追加', manufacturer: 'メーカー', colorName: 'カラー名', hex: 'Hex', materialOptional: '素材(任意)', showing: '{{total}}件中{{filtered}}件を表示', noMatch: '検索に一致するカラーがありません', empty: 'カタログにカラーがありません', deleteColor: 'カラーを削除', deleteConfirm: '「{{name}}」を削除してもよろしいですか?', resetCatalog: 'カラーカタログをリセット', resetConfirm: 'カタログをデフォルトにリセットしますか?カスタムカラーはすべて削除されます。', sync: '同期', starting: '開始中...', syncTooltip: 'FilamentColors.xyzから同期(2000+カラー)', loadFailed: 'カラーカタログの読み込みに失敗しました', fieldsRequired: 'メーカー、カラー名、Hexカラーは必須です', colorAdded: 'カラーを追加しました', addFailed: 'カラーの追加に失敗しました', colorUpdated: 'カラーを更新しました', updateFailed: 'カラーの更新に失敗しました', colorDeleted: 'カラーを削除しました', deleteFailed: 'カラーの削除に失敗しました', resetSuccess: 'カラーカタログをデフォルトにリセットしました', resetFailed: 'カタログのリセットに失敗しました', syncUpToDate: '最新の状態です({{count}}件のカラーを確認)', syncComplete: '{{added}}件の新しいカラーを追加しました({{skipped}}件は既に存在)', syncError: '同期エラー', syncFailed: 'FilamentColors.xyzからの同期に失敗しました', exported: '{{count}}件のカラーをエクスポートしました', imported: '{{added}}件のカラーをインポートしました({{skipped}}件スキップ)', importFailed: 'インポートに失敗しました:無効なJSON形式', selectedCount: '{{count}}件選択中', deleteSelected: '選択を削除', bulkDeleteConfirm: '{{count}}件のカラーを削除してもよろしいですか?', bulkDeleted: '{{count}}件のカラーを削除しました', bulkDeleteFailed: 'カラーの削除に失敗しました', }, // General tab dateFormat: '日付形式', dateFormatUs: 'US (MM/DD/YYYY)', dateFormatEu: 'EU (DD/MM/YYYY)', dateFormatIso: 'ISO (YYYY-MM-DD)', timeFormat: '時刻形式', timeFormat12: '12時間制 (3:30 PM)', timeFormat24: '24時間制 (15:30)', defaultPrinter: 'デフォルトプリンター', defaultPrinterDescription: 'アップロード、再印刷、その他の操作でこのプリンターを事前選択します。', slicerBambuStudio: 'Bambu Studio', slicerOrcaSlicer: 'OrcaSlicer', sidebarOrderDescription: 'サイドバーの項目をドラッグして並べ替え。ここでデフォルトの順序にリセット。', setDefault: 'デフォルト設定', sidebarOrderSetDefaultHint: 'デフォルト設定は、まだカスタマイズしていないユーザーに現在のメニュー順序を適用します。', sidebarDefaultSet: 'デフォルトメニュー順序を設定しました。', sidebarDefaultCleared: 'デフォルトメニュー順序をクリアしました。', sidebarDefaultFailed: 'デフォルトメニュー順序の設定に失敗しました。', reset: 'リセット', // Appearance darkMode: 'ダークモード', lightMode: 'ライトモード', active: '(アクティブ)', background: '背景', accent: 'アクセント', style: 'スタイル', bgNeutral: 'ニュートラル', bgWarm: 'ウォーム', bgCool: 'クール', bgOled: 'OLEDブラック', bgSlate: 'スレートブルー', bgForest: 'フォレストグリーン', accentGreen: 'グリーン', accentTeal: 'ティール', accentBlue: 'ブルー', accentOrange: 'オレンジ', accentPurple: 'パープル', accentRed: 'レッド', styleClassic: 'クラシック', styleGlow: 'グロー', styleVibrant: 'ビビッド', themeToggleHint: 'サイドバーの太陽/月アイコンでダークモードとライトモードを切り替えます。', // Archive autoArchivePrints: '印刷を自動アーカイブ', autoArchiveDescription: '印刷完了時に3MFファイルを自動保存', saveThumbnailsDescription: '3MFファイルからプレビュー画像を抽出して保存', captureFinishPhotoDescription: '印刷完了時にプリンターカメラから写真を撮影', ffmpegNotInstalled: 'ffmpegがインストールされていません', ffmpegRequired: 'カメラ撮影にはffmpegが必要です。brew install ffmpeg(macOS)またはapt install ffmpeg(Linux)でインストールしてください。', // Camera camera: 'カメラ', cameraViewMode: 'カメラ表示モード', cameraOverlayDescription: 'メイン画面上にリサイズ可能なオーバーレイでカメラを表示', cameraWindowDescription: '別のブラウザウィンドウでカメラを表示', externalCamerasDescription: '内蔵プリンターカメラの代わりに外部カメラを設定。MJPEGストリーム、RTSP、HTTPスナップショット、USBカメラ(V4L2)をサポート。有効にすると、ライブビューと完了写真に外部カメラが使用されます。', cameraPlaceholderUsb: 'デバイスパス (/dev/video0)', cameraPlaceholderUrl: 'カメラURL (rtsp://... または http://...)', cameraTypeMjpeg: 'MJPEGストリーム', cameraTypeRtsp: 'RTSPストリーム', cameraTypeSnapshot: 'HTTPスナップショット', cameraTypeUsb: 'USBカメラ (V4L2)', cameraSnapshotUrl: 'Snapshot URL (optional)', cameraSnapshotUrlPlaceholder: 'http://192.168.1.61:1984/api/frame.jpeg?src=printer', cameraSnapshotUrlHelp: 'Single-frame URL used for notification thumbnails, finish photos, timelapse and plate detection. Leave blank to capture from the live stream above. Useful for go2rtc (/api/frame.jpeg) and IP cameras with a dedicated snapshot endpoint.', cameraRotation: '回転', test: 'テスト', connected: '接続済み', disconnected: '未接続', // Cost tracking currency: '通貨', defaultFilamentCost: 'デフォルトフィラメントコスト(kg単価)', electricityCost: '電気料金(kWh単価)', energyDisplayMode: 'エネルギー表示モード', energyModePrintDescription: 'ダッシュボードに印刷中の消費エネルギーの合計を表示', energyModeTotalDescription: 'ダッシュボードにスマートプラグの累計エネルギーを表示', // File Manager fileManager: 'ファイルマネージャー', createArchiveEntry: '印刷時にアーカイブエントリを作成', createArchiveEntryDescription: 'ファイルマネージャーから印刷時に、オプションでアーカイブエントリを作成', lowDiskSpaceWarning: 'ディスク容量不足の警告', lowDiskSpaceDescription: '空きディスク容量がこのしきい値を下回った場合に警告を表示', // Updates printerFirmware: 'プリンターファームウェア', checkFirmwareDescription: 'Bambu Labのプリンターファームウェア更新を確認', bambuddySoftware: 'Bambuddyソフトウェア', autoCheckDescription: '起動時に自動的に新しいバージョンを確認', checkNow: '今すぐ確認', updateAvailableVersion: 'アップデート利用可能: v{{version}}', releaseNotes: 'リリースノート', updateViaDocker: 'Docker Composeでアップデート:', updateViaHomeAssistant: 'アップデートはHome Assistant Supervisorによって管理されます。Home Assistantの設定→アドオン→Bambuddyを開いて新しいバージョンをインストールしてください。', installUpdate: 'アップデートをインストール', latestVersionRunning: '最新バージョンを使用しています', failedToCheckUpdates: 'アップデートの確認に失敗しました: {{error}}', // Data Management backupRestore: 'バックアップと復元', backupRestoreDescription: '設定のエクスポート/インポートとGitHubバックアップの設定', goToBackup: 'バックアップへ', // Network tab externalUrl: '外部URL', externalUrlDescription: 'Bambuddyがアクセス可能な外部URL。通知画像や外部連携に使用されます。', bambuddyUrl: 'Bambuddy URL', externalUrlHint: 'プロトコルとポートを含めてください(例: http://192.168.1.100:8000)', ftpRetry: 'FTPリトライ', ftpRetryDescription: 'プリンターのWi-Fiが不安定な場合にFTP操作をリトライ。3MFダウンロード、印刷アップロード、タイムラプスダウンロード、ファームウェア更新に適用。', autoRetryDescription: '失敗したFTP操作を自動的にリトライ', retryAttempts: 'リトライ回数', retryDelay: 'リトライ遅延', connectionTimeout: '接続タイムアウト', time_one: '{{count}}回', time_other: '{{count}}回', second_one: '{{count}}秒', second_other: '{{count}}秒', nSeconds: '{{count}}秒', increaseForWeakWifi: 'Wi-Fiが弱いプリンター用に増やしてください', // Home Assistant homeAssistant: 'Home Assistant', homeAssistantFullDescription: 'Home Assistantに接続してHA REST API経由でスマートプラグを制御。switch、light、input_boolean、scriptエンティティをサポート。', homeAssistantUrl: 'Home Assistant URL', longLivedAccessToken: '長期アクセストークン', haTokenHint: 'HAでトークンを作成: プロフィール → 長期アクセストークン → トークンを作成', connectionSuccessful: '接続成功', connectionFailed: '接続失敗', haConnectionSuccess: 'Home Assistantへの接続に成功しました。', haConnectionFailed: 'Home Assistantへの接続に失敗しました。', // MQTT mqttPublishing: 'MQTTパブリッシュ', mqttDescription: 'Node-RED、Home Assistant、その他の自動化システムとの統合のため、外部MQTTブローカーにBamBuddyイベントをパブリッシュ。', mqttEnableDescription: '外部MQTTブローカーにイベントをパブリッシュ', brokerHostname: 'ブローカーホスト名', port: 'ポート', usernameOptional: 'ユーザー名(オプション)', passwordOptional: 'パスワード(オプション)', topicPrefix: 'トピックプレフィックス', topicPrefixHint: 'トピック形式: {{prefix}}/printers//status 等', // Prometheus prometheusMetrics: 'Prometheusメトリクス', prometheusEndpointDescription: 'Prometheus/Grafanaモニタリング用に/api/v1/metricsでプリンターメトリクスを公開。', bearerTokenOptional: 'Bearerトークン(オプション)', bearerTokenHint: '設定時、リクエストにAuthorization: Bearer が必要', metricsConnectionStatus: '接続状態', metricsPrinterState: 'プリンター状態(idle/printing等)', metricsPrintProgress: '印刷進捗 0-100%', metricsBedTemp: 'ベッド温度', metricsNozzleTemp: 'ノズル温度', metricsPrintsTotal: '結果別の総印刷数', metricsMore: '...その他(レイヤー、ファン、キュー、フィラメント使用量)', // Smart Plugs smartPlugsDescription: 'スマートプラグ(TasmotaまたはHome Assistant)を接続して、電源制御の自動化とプリンターのエネルギー使用量を追跡。', allOn: 'すべてオン', allOff: 'すべてオフ', addSmartPlug: 'スマートプラグを追加', energySummary: 'エネルギー概要', currentPower: '現在の消費電力', plugsOnline: '{{reachable}}/{{total}}プラグオンライン', today: '今日', yesterday: '昨日', total: '合計', enablePlugsForSummary: 'プラグを有効にしてエネルギー概要を表示', addNotificationProvider: '追加', // Users systemBadge: '(システム)', creating: '作成中...', changing: '変更中...', deleteUserAndItems: 'ユーザーとそのアイテムを削除', deleteUserKeepItems: 'ユーザーを削除、アイテムは保持(オーナーなしになります)', ok: 'OK', // 2FA settings twoFa: { totpTitle: '認証アプリ (TOTP)', totpDesc: 'Google Authenticator、Aegis、Authyなどのアプリを使用します。', emailOtpTitle: 'メールOTP', emailOtpDesc: 'ログイン時に{{email}}にワンタイムコードを送信します。', emailOtpNoEmail: 'この方法を有効にするには、アカウントにメールアドレスを追加してください。', addEmailFirst: 'アカウントにメールアドレスがありません。管理者に追加を依頼してください。', setupTotp: '認証アプリを設定', setupAuthApp: '認証アプリを設定', setupInstructions: '認証アプリでQRコードをスキャンし、コードで確認してください。', manualEntry: 'スキャンできない場合は、このシークレットを手動で入力してください:', scannedContinue: 'コードをスキャンしました — 続ける', enterCodeToConfirm: '認証アプリの6桁のコードを入力して設定を確認してください。', activate: '有効化', disableTotp: '認証アプリを無効化', disableConfirmHint: '認証アプリを無効にするには、有効なTOTPコードまたはバックアップコードを入力してください。', totpDisabled: '認証アプリが無効化されました。', emailOtpEnabled: 'メールOTPが有効化されました。', emailOtpDisabled: 'メールOTPが無効化されました。', smtpRequired: '先にSMTP設定を構成してテストしてください。', invalidCode: '無効なコードです。もう一度お試しください。', enableEmailOtp: 'メールOTPを有効化', disableEmailOtp: 'メールOTPを無効化', emailSetupEnterCode: '確認コードがメールアドレスに送信されました。このメールボックスを所有していることを確認するために、以下に入力してください。', verifyAndEnable: '確認して有効化', emailDisablePasswordHint: 'メールOTPの無効化を確認するには、アカウントのパスワードを入力してください。', passwordPlaceholder: 'パスワードを入力してください', backupCodesTitle: 'バックアップコードを保存', backupCodesWarning: 'これらのコードを安全な場所に保存してください。各コードは一度しか使用できません。', backupCodesRemaining: 'バックアップコード残り{{count}}個', savedCodes: 'コードを保存しました', regenBackup: 'バックアップコードを再生成', regenBackupHint: '現在のTOTPコードを入力して10個の新しいバックアップコードを生成します。', newBackupCodes: '新しいバックアップコード', linkedAccounts: 'リンクされたSSOアカウント', linkedAccountsDesc: 'これらの外部IDプロバイダーがあなたのアカウントにリンクされています。', oidcUnlinked: 'アカウントのリンクを解除しました。', }, // OIDC provider settings oidc: { title: 'SSO / OIDCプロバイダー', desc: 'シングルサインオン用のOpenID Connectプロバイダーを設定します。', addProvider: 'プロバイダーを追加', newProvider: '新しいプロバイダー', empty: 'OIDCプロバイダーがまだ設定されていません。', created: 'プロバイダーが作成されました。', updated: 'プロバイダーが更新されました。', deleted: 'プロバイダーが削除されました。', deleteTitle: 'プロバイダーを削除', deleteMessage: '"{{name}}"を削除しますか?リンクされたすべてのユーザーアカウントが切断されます。', form: { name: '表示名', issuerUrl: '発行者URL', clientId: 'クライアントID', clientSecret: 'クライアントシークレット', scopes: 'スコープ', iconUrl: 'アイコンURL (任意)', enabled: '有効', autoCreate: 'ユーザーを自動作成', autoCreateDesc: '初回ログイン時にローカルアカウントを自動的に作成します。', autoLink: '既存アカウントを自動リンク', autoLinkDesc: '初回ログイン時にメールアドレスで既存のローカルアカウントにリンクします。', secretHint: '空白のままで現在のものを維持', secretPlaceholder: '新しいシークレット', emailClaim: 'メールクレーム', emailClaimDesc: "メールIDとして使用するJWTクレーム。Azure Entra IDには'preferred_username'または'upn'を使用(email_verifiedを送信しない)。信頼できるクレーム名のみ使用してください。", emailClaimPlaceholder: 'email', emailClaimCustomClaimAutoLinkWarning: "Custom claims are safe for auto-link only when the value is tenant-administered (e.g. Azure Entra ID upn / preferred_username). Do not enable auto-link if your IdP allows users to self-assert this claim.", requireEmailVerified: 'メール確認を要求', requireEmailVerifiedDesc: 'プロバイダーが確認済みとしてマークした場合にのみメールクレームを受け入れます。', requireEmailVerifiedWarning: '警告:確認なしでメールが受け入れられます。信頼できるプロバイダーのみで使用してください。', requireEmailVerifiedAutoLink: 'この設定を変更するには、まず自動リンクを無効にしてください。', defaultGroup: 'デフォルトグループ', defaultGroupDesc: '自動作成ユーザーに割り当てられるグループ。未設定の場合はViewersにフォールバックします。', defaultGroupViewersFallback: 'Viewers(デフォルト)', }, }, }, // Notifications (for push notifications) notification: { printStarted: { title: '印刷開始', body: '{{printer}}: {{filename}} の印刷を開始しました', }, printCompleted: { title: '印刷完了', body: '{{printer}}: {{filename}} が正常に完了しました', }, printFailed: { title: '印刷失敗', body: '{{printer}}: {{filename}} が失敗しました', }, printStopped: { title: '印刷中止', body: '{{printer}}: {{filename}} が中止されました', }, printProgress: { title: '印刷進捗', body: '{{printer}}: {{filename}} は {{percent}}% 完了', }, printerOffline: { title: 'プリンターオフライン', body: '{{printer}} がオフラインです', }, printerError: { title: 'プリンターエラー', body: '{{printer}}: {{error}}', }, filamentLow: { title: 'フィラメント残量低下', body: '{{printer}}: フィラメントが残りわずかです', }, maintenanceDue: { title: 'メンテナンス期限', body: '{{printer}}: {{items}} の対応が必要です', }, }, // Errors errors: { generic: '問題が発生しました', networkError: 'ネットワークエラーです。接続を確認してください。', notFound: '見つかりません', unauthorized: '認証エラー', serverError: 'サーバーエラー', validationError: '入力内容を確認してください', printerConnectionFailed: 'プリンターへの接続に失敗しました', saveFailed: '保存に失敗しました', deleteFailed: '削除に失敗しました', loadFailed: 'データの読み込みに失敗しました', }, // HMS Errors modal hmsErrors: { title: 'エラー - {{name}}', noErrors: 'エラーなし', viewOnWiki: 'Bambu Lab Wikiで表示', clearInstructions: 'プリンターでエラーをクリアするとここからも消えます。', clearErrors: 'エラーをクリア', clearSuccess: 'HMSエラーをクリアしました', clearFailed: 'HMSエラーのクリアに失敗しました', }, // MQTT Debug modal mqttDebug: { title: 'MQTTデバッグログ', searchPlaceholder: 'トピックまたはペイロードで検索...', noMessages: 'まだメッセージが記録されていません', startLoggingHint: '「ログ開始」をクリックしてMQTTメッセージのキャプチャを開始', noMessagesMatch: 'フィルターに一致するメッセージがありません', adjustFilterHint: '検索条件やフィルター条件を調整してみてください', incoming: '受信', outgoing: '送信', loggingStopped: 'ログ記録停止', loggingActive: 'ログ記録中 - メッセージは自動更新されます', startLogging: 'ログ記録を開始', stopLogging: 'ログ停止', clearLog: 'ログをクリア', topic: 'トピック', timestamp: 'タイムスタンプ', direction: '方向', all: 'すべて', }, // Printer File Manager modal (printer internal storage) printerFiles: { title: 'ファイル管理', storageUsed: '使用中:', storageFree: '空き:', filterPlaceholder: 'ファイルを検索...', deleteButton: '削除', deleteFiles: '{{count}}件のファイルを削除', deleteFileConfirm: '"{{name}}" を削除しますか?この操作は取り消せません。', deleteFilesConfirm: '選択した{{count}}件のファイルを削除しますか?元に戻せません。', noFiles: 'このディレクトリにファイルがありません', loadingFiles: 'ファイルを読み込み中...', failedToLoad: 'ファイルの読み込みに失敗しました', toast: { filesDeleted: '{{count}}件のファイルを削除しました', deleteFailed: '削除に失敗: {{error}}', }, }, // Confirmations confirm: { delete: '削除しますか?', unsavedChanges: '保存されていない変更があります。このページを離れますか?', clearQueue: 'キューをクリアしますか?', }, // Login page login: { title: 'Bambuddy ログイン', subtitle: 'アカウントにサインイン', username: 'ユーザー名', usernamePlaceholder: 'ユーザー名を入力', usernameOrEmail: 'ユーザー名またはメール', usernameOrEmailPlaceholder: 'ユーザー名または @ メール', password: 'パスワード', passwordPlaceholder: 'パスワードを入力', signIn: 'サインイン', signingIn: 'ログイン中...', rememberMe: 'ログイン状態を保持する', forgotPassword: 'パスワードをお忘れですか?', loginSuccess: 'ログインしました', loginFailed: 'ログインに失敗しました', enterCredentials: 'ユーザー名とパスワードを入力してください', enterEmail: 'メールアドレスを入力してください', oidcLoginFailed: 'OIDCログインに失敗しました', oidcErrors: { providerError: 'IDプロバイダーがエラーを返しました', missingParameters: 'OIDCコールバックに必須パラメーターがありません', invalidState: 'OIDCの状態が無効か、すでに使用されています', stateExpired: 'OIDCログインセッションが期限切れです。もう一度お試しください', providerNotFound: 'OIDCプロバイダーが見つかりません', discoveryFailed: 'OIDCディスカバリードキュメントの取得に失敗しました', invalidDiscovery: 'OIDCディスカバリードキュメントが無効です', networkError: 'OIDCトークン交換中にネットワークエラーが発生しました', badResponse: 'OIDCトークン交換中に予期しない応答を受信しました', noIdToken: 'OIDCプロバイダーがIDトークンを返しませんでした', validationFailed: 'OIDCトークンの検証に失敗しました', nonceMismatch: 'OIDCノンスが一致しません。リプレイ攻撃の可能性があります', missingSubClaim: 'OIDCトークンにsubクレームがありません', noLinkedAccount: 'このOIDCアイデンティティに関連付けられたローカルアカウントがありません', accountInactive: 'あなたのアカウントは無効です', userResolutionFailed: 'アカウントを解決できませんでした', internalError: 'OIDCログイン中に内部エラーが発生しました', tokenExchangeFailed: 'OIDCトークン交換に失敗しました', }, forgotPasswordTitle: 'パスワードを忘れた場合', forgotPasswordMessage: 'パスワードを忘れた場合は、システム管理者に連絡してリセットしてもらってください。', forgotPasswordEmailMessage: 'メールアドレスを入力すると、新しいパスワードを送信します。', emailAddress: 'メールアドレス', emailPlaceholder: 'your.email@example.com', cancel: 'キャンセル', sending: '送信中...', sendResetEmail: 'リセットメールを送信', howToReset: 'パスワードのリセット方法:', resetStep1: 'Bambuddy管理者に連絡', resetStep2: 'ユーザー管理でパスワードリセットを依頼', resetStep3: '管理者が新しい仮パスワードを設定', resetStep4: '新しいパスワードでログインし、設定で変更', gotIt: '了解', twoFA: { title: '二段階認証', subtitle: 'アカウントは二段階認証で保護されています。確認コードを入力してください。', methodAuthenticator: '認証アプリ', methodEmail: 'メール認証', methodBackup: 'バックアップコード', instructionsTotp: '認証アプリを開いて、Bambuddy用の6桁のコードを入力してください。', instructionsEmail: '6桁の確認コードをメールアドレスに送信しました。有効期限は10分です。', instructionsEmailNotSent: '下のボタンをクリックして、メールで確認コードを受け取ってください。', instructionsBackup: '8文字のバックアップコードをいずれか1つ入力してください。各コードは1回のみ使用可能です。', sendCodeButton: 'メールでコードを送信する', sendingCode: '送信中...', resendCode: 'コードを再送する', codeLabel: '確認コード', backupCodeLabel: 'バックアップコード', codePlaceholder: '000000', backupCodePlaceholder: 'XXXXXXXX', verifyButton: '確認する', verifyingButton: '確認中...', backToLogin: '← ログイン画面に戻る', orContinueWith: 'または以下でログイン', signInWith: '{{provider}}でログイン', enterCode: '確認コードを入力してください', sendCodeFailed: '確認コードの送信に失敗しました', invalidCode: '無効なコードです。もう一度お試しください。', }, resetPassword: { title: '新しいパスワードを設定', subtitle: '下のフィールドに新しいパスワードを入力して確認してください。', newPassword: '新しいパスワード', newPasswordPlaceholder: '8文字以上', confirmPassword: 'パスワードの確認', confirmPasswordPlaceholder: '新しいパスワードを再入力', saving: '保存中…', submit: '新しいパスワードを設定', backToLogin: 'ログインに戻る', passwordsDoNotMatch: 'パスワードが一致しません', passwordTooShort: 'パスワードは8文字以上で入力してください', resetFailed: 'パスワードのリセットに失敗しました。リンクが期限切れの可能性があります。', }, }, // Setup page setup: { title: 'Bambuddy セットアップ', subtitle: 'Bambuddyインスタンスの認証を設定', enableAuth: '認証を有効化', adminAccount: '管理者アカウント', adminAccountDesc: '既に管理者ユーザーが存在する場合、既存の管理者アカウントを使用して認証が有効化されます。既存の管理者を使用する場合は下のフィールドを空のままにするか、新しい認証情報を入力して新しい管理者ユーザーを作成してください。', adminUsername: '管理者ユーザー名', adminPassword: '管理者パスワード', optionalIfAdminExists: '(管理者ユーザーが存在する場合は任意)', adminUsernamePlaceholder: '管理者ユーザー名を入力(任意)', adminPasswordPlaceholder: '管理者パスワードを入力(任意)', confirmPassword: 'パスワードの確認', confirmPasswordPlaceholder: 'パスワードを確認', settingUp: 'セットアップ中...', completeSetup: 'セットアップを完了', toast: { authEnabledAdminCreated: '認証が有効になり、管理者ユーザーが作成されました', authEnabledExistingAdmins: '既存の管理者ユーザーを使用して認証が有効になりました', setupCompleted: 'セットアップが完了しました', enterBothCredentials: '管理者のユーザー名とパスワードの両方を入力するか、既存の管理者を使用する場合は両方を空にしてください', passwordsDoNotMatch: 'パスワードが一致しません', passwordTooShort: 'パスワードは6文字以上必要です', }, }, // Password change changePassword: { title: 'パスワードを変更', currentPassword: '現在のパスワード', currentPasswordPlaceholder: '現在のパスワードを入力', newPassword: '新しいパスワード', newPasswordPlaceholder: '新しいパスワードを入力(6文字以上)', confirmPassword: '新しいパスワード確認', confirmPasswordPlaceholder: 'パスワードを確認', passwordsDoNotMatch: 'パスワードが一致しません', passwordTooShort: 'パスワードは6文字以上必要です', changing: '変更中...', success: 'パスワードを変更しました', failed: 'パスワードの変更に失敗しました', }, // Plate detection alert plateAlert: { title: '印刷が一時停止されました!', message: 'ビルドプレート上にオブジェクトが検出されました。印刷が自動的に一時停止されました。プレートをクリアして印刷を再開してください。', understand: '了解', }, // Camera page camera: { title: 'カメラビュー', invalidPrinterId: '無効なプリンターID', live: 'ライブ', snapshot: 'スナップショット', restartStream: 'ストリームを再開', refreshSnapshot: 'スナップショットを更新', fullscreen: 'フルスクリーン', exitFullscreen: 'フルスクリーンを終了', connectingToCamera: 'カメラに接続中...', capturingSnapshot: 'スナップショットを撮影中...', connectionLost: '接続が切断されました', connectionFailed: 'カメラ接続に失敗しました', reconnecting: '{{countdown}}秒後に再接続... (試行 {{attempt}}/{{max}})', reconnectNow: '今すぐ再接続', cameraUnavailable: 'カメラが利用できません', cameraUnavailableDesc: 'プリンターの電源がオンで接続されていることを確認してください。', noCamera: 'カメラがありません', retry: '再試行', cameraStream: 'カメラストリーム', zoomOut: 'ズームアウト', zoomIn: 'ズームイン', resetZoom: 'ズームをリセット', recording: '録画中', startRecording: '録画開始', stopRecording: '録画停止', chamberLight: 'チャンバーライト切替', }, // Groups management groups: { title: 'グループ管理', subtitle: 'アクセス制御の権限グループを管理', backToSettings: '設定に戻る', createGroup: 'グループを作成', noPermission: 'このページにアクセスする権限がありません。', system: 'システム', noDescription: '説明なし', usersCount: '{{count}}人のユーザー', permissionsCount: '{{count}}個の権限', edit: '編集', delete: '削除', toast: { created: 'グループを作成しました', updated: 'グループを更新しました', deleted: 'アーカイブを削除しました', enterGroupName: 'グループ名を入力', }, modal: { editGroup: 'グループを編集', createGroup: 'グループを作成', cancel: 'キャンセル', saving: '保存中...', creating: '作成中...', saveChanges: '変更を保存', }, form: { groupName: 'グループ名', groupNamePlaceholder: 'グループ名を入力', systemGroupWarning: 'システムグループ名は変更できません', description: '説明', descriptionPlaceholder: '説明を入力(任意)', permissions: '権限 ({{count}} 選択中)', }, deleteModal: { title: 'グループを削除', message: 'このグループを削除しますか?このグループのユーザーはこれらの権限を失います。', confirm: '確認', }, editor: { title: 'グループを編集', createTitle: 'グループを作成', search: '権限を検索...', selectAll: 'すべて選択', clearAll: 'すべて解除', permissionsSelected: '{{count}}件選択', noResults: '検索に一致する権限がありません', }, }, // Users management users: { title: 'ユーザー管理', subtitle: 'ユーザーとBambuddyインスタンスへのアクセスを管理', backToSettings: '設定に戻る', createUser: 'ユーザーを作成', noPermission: 'このページにアクセスする権限がありません。', admin: '管理者', noGroups: 'グループなし', active: 'アクティブ', inactive: '非アクティブ', edit: '編集', delete: '削除', system: 'システム', noGroupsAvailable: '利用可能なグループがありません', table: { username: 'ユーザー名', groups: 'グループ', status: 'ステータス', actions: 'アクション', }, toast: { created: 'ユーザーを作成しました', updated: 'ユーザーを更新しました', deleted: 'アーカイブを削除しました', fillRequired: '必須項目をすべて入力してください', passwordsDoNotMatch: 'パスワードが一致しません', passwordTooShort: 'パスワードは6文字以上必要です', }, modal: { createUser: 'ユーザーを作成', editUser: 'ユーザーを編集', cancel: 'キャンセル', creating: '作成中...', saving: '保存中...', saveChanges: '変更を保存', advancedAuthSubtitle: '高度な認証を使用', }, form: { username: 'ユーザー名', usernamePlaceholder: 'ユーザー名を入力', email: 'メール', emailPlaceholder: 'user@example.com', password: 'パスワード', passwordPlaceholder: 'パスワードを入力', confirmPassword: 'パスワードの確認', confirmPasswordPlaceholder: 'パスワードを確認', newPasswordPlaceholder: '新しいパスワードを入力', confirmNewPasswordPlaceholder: '新しいパスワードを確認', leaveBlankToKeep: '(現在のパスワードを維持する場合は空白)', groups: 'グループ', optional: 'オプション', autoGeneratedPassword: '安全なパスワードが自動的に生成され、ユーザーにメールで送信されます。', passwordManagedByAdvancedAuth: 'パスワードは高度な認証によって管理されています。「パスワードのリセット」を使用して、メールで新しいパスワードをユーザーに送信してください。', resetPassword: 'パスワードのリセット', resettingPassword: 'パスワードをリセット中...', }, deleteModal: { title: 'ユーザーを削除', message: 'このユーザーを削除してもよろしいですか?この操作は元に戻せません。', confirm: 'ユーザーを削除', }, }, // Stream overlay streamOverlay: { title: 'ストリームオーバーレイ', invalidPrinterId: '無効なプリンターID', cameraStream: 'カメラストリーム', progress: '進捗', eta: '残り時間', printerIdle: 'プリンター待機中', printerOffline: 'プリンターオフライン', status: { printing: '印刷中', paused: '一時停止', finished: '完了', failed: '失敗', idle: '待機中', unknown: '不明', }, }, // Profiles profiles: { title: 'フィラメントプロファイル', subtitle: 'スライサープリセットと圧力キャリブレーションの管理', tabs: { cloud: 'クラウドプロファイル', local: 'ローカルプロファイル', kprofiles: 'Kプロファイル', }, localProfiles: { title: 'ローカルプロファイル', subtitle: 'OrcaSlicerからスライサープリセットをインポート・管理', import: 'プロファイルをインポート', importDesc: '.bbscfg、.bbsflmt、.orca_filament、.zip、.jsonファイルをここにドロップ', importing: 'インポート中...', search: 'ローカルプリセットを検索...', noPresets: 'ローカルプリセットがまだありません', badge: 'ローカル', edit: '編集', delete: '削除', cancel: 'キャンセル', deleteConfirmTitle: 'プリセットを削除', deleteConfirm: 'このプリセットを削除してもよろしいですか?元に戻せません。', source: 'ソース', inheritsFrom: '継承元', filamentType: 'タイプ', vendor: 'メーカー', compatiblePrinters: 'プリンター', nozzleTemp: 'ノズル温度', cost: 'コスト', density: '密度', pressureAdvance: 'プレッシャーアドバンス', filament: 'フィラメント', process: 'プロセス', printer: 'プリンター', toast: { importSuccess: '{{count}}件のプリセットをインポートしました', importSkipped: '{{count}}件のプリセットをスキップしました(重複)', importError: 'インポート中に{{count}}件のエラーが発生しました', deleted: 'プリセットを削除しました', updated: 'プリセットを更新しました', }, }, connectedAs: '接続中:', logout: 'ログアウト', noLogoutPermission: 'ログアウトする権限がありません', failedToLoad: 'ファイルの読み込みに失敗しました', retry: 'リトライ', time: { justNow: 'たった今', minsAgo: '{{count}}分前', hoursAgo: '{{count}}時間前', daysAgo: '{{count}}日前', }, toast: { loggedOut: 'ログアウトしました', }, login: { title: 'Bambuddy ログイン', subtitle: 'アカウントにサインイン', email: 'メールアドレス', password: 'パスワード', region: 'リージョン', regionGlobal: 'グローバル', regionChina: '中国', verificationCode: '認証コード', totpCode: '認証アプリコード', checkEmail: 'メール ({{email}}) に届いた6桁のコードを入力してください', enterTotpHint: '認証アプリの6桁のコードを入力してください', accessToken: 'アクセストークン', accessTokenHint: 'Bambu Labのアクセストークンを貼り付け(Bambu Studioから取得)', back: '戻る', loginButton: 'ログイン', verifyButton: '認証', setTokenButton: 'トークンを設定', useToken: 'アクセストークンを使用', useEmail: 'メールでログイン', toast: { loggedIn: 'ログインしました', codeSent: 'メールに認証コードを送信しました', enterTotp: '認証アプリのコードを入力してください', tokenSet: 'トークンを設定しました', }, }, presets: { myPreset: 'マイプリセット(編集可能)', duplicate: '複製', editable: '編集可能', failedToLoadDetails: 'プリセットの詳細を読み込めませんでした', deleteConfirm: 'このプロファイルを削除しますか?', deleteWarning: '「{{name}}」をBambu Cloudから完全に削除します。元に戻せません。', noDuplicatePermission: 'プリセットを複製する権限がありません', noEditPermission: 'プリセットを編集する権限がありません', noDeletePermission: 'プロジェクトを削除する権限がありません', types: { filament: 'フィラメント', printer: 'プリンター', process: 'プロセス', }, toast: { deleted: 'アーカイブを削除しました', created: 'プリセットを作成しました', updated: 'プリセットを更新しました', duplicated: 'プリセットを複製しました', fieldAdded: 'フィールド "{{key}}" を追加しました', exported: 'プリセットをエクスポートしました', }, baseLabel: 'ベース: {{name}}', currentLabel: '現在: {{name}}', newPreset: '新規プリセット', editPreset: 'プリセットを編集', duplicatePreset: 'プリセットを複製', createNewPreset: '新しいプリセットを作成', customizeSettings: '新しいプリセットの設定をカスタマイズ', compareWithBase: 'ベースプリセットと比較', compare: '比較', // CreatePresetModal - Basic Info basePreset: 'ベースプリセット', selectBasePreset: 'ベースプリセットを選択...', presetName: 'プリセット名', myCustomPreset: 'カスタムプリセット', inheritsFrom: '継承元:', dropJsonToImport: 'JSONファイルをドロップしてインポート', // CreatePresetModal - Tabs tabs: { common: '一般', allFields: 'すべてのフィールド', }, // CreatePresetModal - All Fields Tab availableFields: '利用可能なフィールド', searchFieldsPlaceholder: 'フィールドを検索...', noMatchingFields: '一致するフィールドがありません', allFieldsAdded: 'すべてのフィールドが追加済みです', addCustomField: 'カスタムフィールドを追加', yourOverrides: 'オーバーライド一覧', noOverridesYet: 'オーバーライドはまだありません', clickFieldsToAdd: '左のフィールドをクリックして追加', saveAsTemplate: 'テンプレートとして保存', jsonTip: 'ヒント: .jsonファイルをこのモーダルにドラッグ&ドロップして設定をインポート', }, cloudView: { searchPlaceholder: 'プリセットを検索...', templates: 'テンプレート', refresh: '更新', newPreset: '新規プリセット', clearFilters: 'フィルターをクリア', // Compare mode compareMode: '比較モード', selectAnotherPreset: '同じタイプ({{type}})の別のプリセットを選択', clickTwoPresets: '同じタイプのプリセットを2つクリックして比較', selectFirst: '1. 最初を選択', selectSecond: '2. 2番目を選択', compareNow: '比較を実行', // Status row lastSynced: '最終同期:', showingCount: '{{total}} 件中 {{showing}} 件のプリセットを表示', noPresetsFound: 'プリセットが見つかりません', // Column headers columns: { filament: 'フィラメント', process: 'プロセス', printer: 'プリンター', }, noFilamentPresets: 'フィラメントプリセットなし', noProcessPresets: 'プロセスプリセットなし', noPrinterPresets: 'プリンタープリセットなし', // Filters filters: { type: '種類', owner: '所有者', printer: 'プリンター', nozzle: 'ノズル', filament: 'フィラメント', layer: 'レイヤー', all: 'すべて', myPresets: 'マイプリセット', builtIn: 'ビルトイン', process: 'プロセス', }, // Permissions noTemplatesPermission: 'テンプレートを管理する権限がありません', noRefreshPermission: 'プロファイルを更新する権限がありません', noCreatePermission: 'プロジェクトを作成する権限がありません', }, templates: { title: 'フィラメントプロファイル', noTemplates: 'テンプレートがありません。バックエンドを再起動してデフォルトテンプレートを作成してください。', createFirst: 'プリセットエディタからテンプレートを作成', typeFilter: 'タイプ:', deleteTitle: 'テンプレートを削除', deleteWarning: 'この操作は元に戻せません', deleteConfirm: '"{{name}}" を削除しますか?', namePlaceholder: 'テンプレート名', descriptionPlaceholder: '説明', settingsJson: '設定 (JSON)', fieldsCount: '{{count}}フィールド', shownInModals: 'モーダルに表示', hiddenInModals: 'モーダルで非表示', apply: '適用', toast: { deleted: 'アーカイブを削除しました', updated: 'テンプレートを更新しました', created: 'テンプレートを作成しました', applied: 'テンプレートを適用しました', }, }, }, // Support/Debug support: { debugLoggingActive: 'デバッグログが有効です', manageLogs: '管理', collectItem7: 'プリンター接続状態とファームウェアバージョン', collectItem8: '連携状態(Spoolman、MQTT、HA)', collectItem9: 'ネットワークインターフェース(サブネットのみ)', collectItem10: 'Pythonパッケージバージョン', collectItem11: 'データベース健全性チェック', collectItem12: 'Docker環境の詳細', }, // File manager fileManager: { title: 'ファイル管理', subtitle: '印刷ファイルの整理と管理', uploadFiles: 'ファイルをアップロード', newFolder: '新しいフォルダ', folderName: 'フォルダ名', folderNamePlaceholder: '例: 機能パーツ', renameFile: 'ファイル名を変更', renameFolder: 'フォルダ名を変更', moveFiles: '{{count}}件のファイルを移動', rootNoFolder: 'ルート(フォルダなし)', current: '(現在)', linkFolder: 'フォルダをリンク', linkFolderDescription: '「{{name}}」をプロジェクトまたはアーカイブにリンクしてすばやくアクセス。', project: 'プロジェクト', archive: 'アーカイブ', noProjectsFound: 'プロジェクトが見つかりません', noArchivesFound: 'アーカイブが見つかりません', unlink: 'リンク解除', link: 'リンク', dragDropFiles: 'ファイルをここにドラッグ&ドロップ', dropFilesHere: 'ここにファイルをドロップ', orClickToBrowse: 'またはクリックして選択', allFileTypesSupported: 'すべてのファイルタイプに対応。ZIPファイルは展開されます。', zipFilesDetected: 'ZIPファイルを検出', zipExtractOptions: 'ZIPファイルは展開されます。フォルダー構造の処理方法を選択:', preserveZipStructure: 'ZIPのフォルダ構造を保持', createFolderFromZip: 'ZIPファイル名からフォルダーを作成', stlThumbnailGeneration: 'STLサムネイル生成', zipMayContainStl: 'ZIPファイルにSTLファイルが含まれている場合があります。展開時にサムネイルを生成できます。', thumbnailsCanBeGenerated: 'STLファイルのサムネイルを生成できます。大きなモデルは処理に時間がかかる場合があります。', generateThumbnailsForStl: 'STLファイルのサムネイルを生成', threemfDetected: '3MFファイルを検出', threemfExtractionInfo: 'プリンターモデル、素材、色、印刷設定は3MFファイルから自動的に抽出されます。', willBeExtracted: '• 展開予定', filesExtracted: '• {{count}}個のファイルを展開済み', uploadComplete: 'アップロード完了: {{succeeded}} 件成功', uploadFailed: 'アップロード失敗', zipFilesFailed: '{{count}}個のファイルが失敗', uploading: 'アップロード中...', changeLink: 'リンクを変更...', linkTo: 'リンク先...', linkToProjectOrArchive: 'プロジェクトまたはアーカイブにリンク', addToQueue: 'キューに追加', schedulePrint: '印刷をスケジュール', generateThumbnail: 'サムネイルを生成', generateThumbnails: 'サムネイルを生成', generateThumbnailsForMissing: 'サムネイルのないSTLファイルのサムネイルを生成', gridView: 'グリッド表示', listView: 'リスト表示', lowDiskSpaceWarning: 'ディスク容量不足の警告', lowDiskSpaceDetails: '{{total}}中{{free}}の空き容量のみ。しきい値は設定で{{threshold}}GBに設定されています。', files: 'ファイル', folders: 'フォルダ', size: 'サイズ', free: '空き:', allFiles: 'すべてのファイル', wrap: '折り返し', enableTextWrapping: 'テキスト折り返しを有効化', disableTextWrapping: 'テキスト折り返しを無効化', collapse: '折りたたむ', collapseFoldersByDefault: 'フォルダをデフォルトで折りたたむ', expandFoldersByDefault: 'フォルダをデフォルトで展開する', dragToResizeTooltip: 'ドラッグしてリサイズ、ダブルクリックでリセット', searchFiles: 'ファイルを検索...', allTypes: 'すべての種類', prints: '印刷回数', ascending: '昇順', descending: '降順', resultsCount: '{{total}}件中{{showing}}件', selectAll: 'すべて選択', deselectAll: 'すべて選択解除', selected: '{{count}}件選択中', adding: '追加中...', loadingFiles: 'ファイルを読み込み中...', folderIsEmpty: 'フォルダーは空です', noFilesYet: 'ファイルはまだありません', folderEmptyDescription: 'ファイルをアップロードするか、このフォルダーにファイルを移動して開始しましょう。', noFilesDescription: '印刷関連ファイルの整理を始めるにはファイルをアップロードしてください。', noMatchingFiles: '一致するファイルがありません', noMatchingFilesDescription: '現在の検索またはフィルター条件に一致するファイルがありません。', clearFilters: 'フィルターをクリア', printedCount: '{{count}}回印刷済み', uploadedBy: 'アップロード者', deleteFolder: 'フォルダを削除', deleteFile: 'ファイルを削除', deleteFilesCount: '{{count}}件のファイルを削除', deleteFolderConfirm: 'このフォルダを削除しますか?中のファイルもすべて削除されます。', deleteFileConfirm: 'このファイルを削除しますか?', deleteFilesConfirm: '選択した{{count}}件のファイルを削除しますか?この操作は元に戻せません。', deleting: '削除中...', noPermissionRenameFolder: 'フォルダー名を変更する権限がありません', noPermissionLinkFolder: 'フォルダーをリンクする権限がありません', noPermissionDeleteFolder: 'フォルダーを削除する権限がありません', noPermissionPrint: '印刷する権限がありません', noPermissionSlice: 'You do not have permission to slice files', noPermissionAddToQueue: 'キューに追加する権限がありません', noPermissionDownload: 'ファイルをダウンロードする権限がありません', noPermissionRenameFile: 'このファイル名を変更する権限がありません', noPermissionGenerateThumbnail: 'サムネイルを生成する権限がありません', noPermissionDeleteFile: 'このファイルを削除する権限がありません', noPermissionCreateFolder: 'フォルダーを作成する権限がありません', noPermissionUpload: 'ファイルをアップロードする権限がありません', noPermissionMoveFiles: 'ファイルを移動する権限がありません', noPermissionDeleteFiles: 'ファイルを削除する権限がありません', // External folder linkExternal: '外部リンク', linkExternalFolder: '外部フォルダをリンク', linkExternalFolderDescription: 'ホストディレクトリ(NAS、USB、ネットワーク共有)をファイルマネージャにマウントします。ファイルはコピーされず、元のパスから直接アクセスされます。', externalFolderNamePlaceholder: '例:NASプリント', externalPath: 'ホストパス', externalPathHelp: 'Dockerホスト上のディレクトリの絶対パス。コンテナにバインドマウントされている必要があります。', readOnly: '読み取り専用', readOnlyHelp: 'アップロードと削除を防止', showHiddenFiles: '隠しファイルを表示(ドットファイル)', externalFolder: '外部フォルダ', scanFolder: 'スキャン', toast: { folderCreated: 'フォルダを作成しました', folderDeleted: 'フォルダを削除しました', fileDeleted: 'ファイルを削除しました', filesDeleted: '{{count}}件のファイルを削除しました', filesMoved: 'ファイルを移動しました', folderLinked: 'フォルダをリンクしました', folderUnlinked: 'フォルダのリンクを解除しました', externalFolderLinked: '外部フォルダがリンクされスキャンされました', folderScanned: 'スキャン完了:{{added}}件追加、{{removed}}件削除', addedToQueue: '{{count}}個のファイルをキューに追加しました', addedToQueuePartial: '{{added}}件追加、{{failed}}件失敗', failedToAddToQueue: 'ファイルの追加に失敗: {{error}}', fileRenamed: 'ファイル名を変更しました', folderRenamed: 'フォルダ名を変更しました', thumbnailsGenerated: '{{count}}件のサムネイルを生成しました', thumbnailsGeneratedPartial: '{{succeeded}}件生成、{{failed}}件失敗', noStlMissingThumbnails: 'サムネイルのないSTLファイルはありません', failedToGenerateThumbnails: 'サムネイルの生成に失敗: {{error}}', thumbnailGenerated: 'サムネイルを生成しました', failedToGenerateThumbnail: 'サムネイルの生成に失敗: {{error}}', }, }, // Projects projects: { title: 'プロジェクト', subtitle: '印刷プロジェクトを管理', newProject: '新規プロジェクト', editProject: 'プロジェクトを編集', deleteProject: 'プロジェクトを削除', projectName: 'プロジェクト名', description: '説明', noProjects: 'プロジェクトはまだありません', noProjectsFiltered: '{{status}}のプロジェクトはありません', noProjectsFilteredHelp: '{{status}}のプロジェクトがありません。ステータスが変更されるとここに表示されます。', createFirst: '最初のプロジェクトを作成して、関連する印刷の整理、進捗管理、ビルドの管理を始めましょう。', createFirstButton: '最初のプロジェクトを作成', create: '作成', files: 'ファイル', prints: '印刷', plates: 'プレート', parts: 'パーツ', lastModified: '最終更新日', deleteConfirm: 'このプロジェクトを削除しますか?アーカイブとキューアイテムはリンク解除されますが、削除されません。', addFiles: 'ファイルを追加', removeFile: 'ファイルを削除', viewDetails: '詳細を表示', // Modal fields namePlaceholder: 'プロジェクト名', descriptionPlaceholder: 'プロジェクトの説明(任意)', urlLabel: 'URL', urlPlaceholder: 'https://makerworld.com/...', urlInvalid: 'URLはhttp://またはhttps://で始まる必要があります', openExternalUrl: 'プロジェクトのURLを開く', coverImageLabel: 'カバー画像', coverImageAlt: 'プロジェクトのカバー画像', coverImageUpload: 'アップロード', coverImageReplace: '置き換える', coverImageRemove: '削除', color: '色', targetPlates: '目標プレート数', targetPlatesPlaceholder: '例: 10', targetPlatesHelp: '印刷ジョブの数', targetParts: '目標パーツ数', targetPartsPlaceholder: '例: 50', targetPartsHelp: '必要なオブジェクトの総数', tagsLabel: 'タグ(カンマ区切り)', tagsPlaceholder: 'カンマ区切りのタグ', dueDate: '期限', priority: '優先度', priorityLow: '低', priorityNormal: '通常', priorityHigh: '高', priorityUrgent: '緊急', // Status statusActive: '進行中', statusCompleted: '完了', statusArchived: 'アーカイブ済み', done: '完了', completed: '完了', failed: '失敗', inQueue: 'キュー内', noPrintsYet: '印刷履歴なし', // Footer stats printJobs: '印刷ジョブ', partsPrinted: '印刷済みパーツ', failedParts: '失敗パーツ', // Actions import: 'インポート', export: 'エクスポート', importProject: 'プロジェクトをインポート', exportAll: 'すべてのプロジェクトをエクスポート', loading: 'プロジェクトを読み込み中...', // Permissions noEditPermission: 'プロジェクトを編集する権限がありません', noDeletePermission: 'プロジェクトを削除する権限がありません', noCreatePermission: 'プロジェクトを作成する権限がありません', noImportPermission: 'プロジェクトをインポートする権限がありません', noExportPermission: 'プロジェクトをエクスポートする権限がありません', // Toast toast: { created: 'プロジェクトを作成しました', updated: 'プロジェクトを更新しました', deleted: 'アーカイブを削除しました', imported: 'プロジェクトをインポートしました', multipleImported: '{{count}}件のプロジェクトをインポートしました', importFailed: 'インポートに失敗しました', exported: 'プロジェクトをエクスポートしました(メタデータのみ)', }, }, // Project detail page projectDetail: { notFound: '見つかりません', backToProjects: 'プロジェクト一覧に戻る', export: 'エクスポート', exportProject: 'プロジェクトをエクスポート', noExportPermission: 'プロジェクトをエクスポートする権限がありません', noEditPermission: 'このプロジェクトを編集する権限がありません', partOf: '所属先', priorityLabel: '優先度', noPrints: 'このプロジェクトにはまだ印刷がありません', status: { active: '進行中', completed: '完了', archived: 'アーカイブ済み', }, priority: { low: '低', normal: '通常', high: '高', urgent: '緊急', }, dueDate: { overdue: '期限超過', today: '今日が期限', daysLeft: '残り{{count}}日', }, progress: { platesProgress: 'プレート進捗', partsProgress: 'パーツ進捗', printJobs: '印刷ジョブ', parts: 'パーツ', percentComplete: '{{percent}}% 完了', remaining: '残り {{count}} 件', }, stats: { printJobs: '印刷ジョブ', total: '合計', failed: '失敗 {{count}} 件', partsPrinted: '印刷済みパーツ {{count}} 件', printTime: '印刷時間', filamentUsed: 'フィラメント使用量', }, cost: { title: 'コスト追跡', filamentCost: 'フィラメント', energy: 'エネルギー', totalCost: '合計コスト', total: '合計', includesBom: 'BOM含む', budget: '予算', remaining: '残り', }, subProjects: { title: 'サブプロジェクト ({{count}})', }, notes: { title: 'メモ', noEditPermission: 'このプロジェクトを編集する権限がありません', placeholder: 'このプロジェクトについてメモを追加...', empty: '<空>', }, files: { title: 'ファイル', linkFolders: 'ファイルマネージャーからフォルダーをリンク', forQuickAccess: 'してクイックアクセスできるようにします。', fileCount: '{{count}}ファイル', empty: '<空>', noFiles: 'このフォルダにファイルはありません。', print: '今すぐ印刷', addToQueue: 'キューに追加', }, bom: { title: '部品表', acquired: '{{completed}}/{{total}} 取得済み', showAll: 'すべて表示', hideDone: '完了を非表示', addPart: 'パーツを追加', noAddPermission: 'パーツを追加する権限がありません', partNamePlaceholder: 'パーツ名', partName: 'パーツ名', qty: '数量', price: '価格 ({{currency}})', sourcingUrlPlaceholder: 'URL(任意)', remarksPlaceholder: '備考', deletePart: 'パーツを削除', deleteConfirm: '「{{name}}」を削除しますか?', noUpdatePermission: 'パーツを更新する権限がありません', noEditPermission: 'このプロジェクトを編集する権限がありません', noDeletePermission: 'プロジェクトを削除する権限がありません', totalCost: '合計コスト', empty: '<空>', }, timeline: { title: 'アクティビティタイムライン', empty: '<空>', }, template: { saveAsTemplate: 'テンプレートとして保存', noCreatePermission: 'プロジェクトを作成する権限がありません', }, queue: { title: '印刷キュー', viewAll: 'すべて表示', printing: '印刷中 {{count}} 件', queued: 'キュー内 {{count}} 件', }, prints: { title: '印刷 ({{count}})', }, toast: { projectUpdated: 'プロジェクトを更新しました', partAdded: 'パーツを追加しました', partRemoved: 'パーツを削除しました', exportFailed: 'エクスポートに失敗しました', projectExported: 'プロジェクトがエクスポートされました', templateCreated: 'プロジェクトからテンプレートを作成しました', }, }, // System info system: { title: 'システム情報', version: 'バージョン', uptime: '稼働時間', cpuUsage: 'CPU使用率', memoryUsage: 'メモリ使用量', diskUsage: 'ディスク使用量', networkInfo: 'ネットワーク情報', logs: 'ログ', debugMode: 'デバッグモード', enableDebug: 'デバッグログを有効化', disableDebug: 'デバッグログを無効化', downloadLogs: 'ログをダウンロード', clearLogs: '通知ログを削除', dockerInfo: 'Docker情報', containerName: 'コンテナ名', imageName: 'イメージ名', platform: 'プラットフォーム', architecture: 'アーキテクチャ', }, // Library (K Profiles) library: { title: 'フィラメントライブラリ', addFilament: 'フィラメントを追加', editFilament: 'フィラメントを編集', deleteFilament: 'フィラメントを削除', vendor: 'メーカー', material: '素材', color: '色', kFactor: 'K値', temperature: '温度', noFilaments: 'ライブラリにフィラメントがありません', deleteConfirm: 'このフィラメントを削除しますか?', importFromPrinter: 'プリンターからインポート', exportToFile: 'ファイルにエクスポート', }, // Slice (slicer-API integration via SliceModal) slice: { title: 'Slice model', action: 'Slice', slicing: 'Slicing…', printer: 'Printer profile', process: 'Process profile', filament: 'Filament profile', filamentSlot: 'Filament {{index}} ({{type}})', selectPreset: '— Select a preset —', loadingPresets: 'Loading presets…', analyzingPlateFilaments: 'Analyzing plate filaments…', analyzingPlateFilamentsHint: 'Running a preview slice to discover which AMS slots this plate uses. Cached after — re-opening is instant.', previewToast: 'Analyzing {{name}} — {{elapsed}}', previewWithProgress: 'Analyzing {{name}} — {{stage}} ({{percent}}%) — {{elapsed}}', notUsedByPlate: '— not used by this plate', printerMismatch: 'This 3MF was sliced for {{source}}, but you picked {{target}}. The slicer CLI cannot re-slice a 3MF for a different printer — open the source in Bambu Studio, change the printer, and re-export.', noPresetsForSlot: 'No presets available', presetsLoadFailed: 'Failed to load presets. Open Settings → Profiles to import them first.', allPresetsRequired: 'All presets must be selected', enqueuing: 'Submitting slice job…', queued: 'Queued…', failed: 'Slicing failed. Check the slicer sidecar logs.', startedToast: 'Slicing {{name}} in the background…', queuedToast: 'Queued: {{name}} — {{elapsed}}', runningToast: 'Slicing {{name}} — {{elapsed}}', runningWithProgress: '{{name}} — {{stage}} ({{percent}}%) — {{elapsed}}', completedToast: 'Sliced {{name}}', failedToast: 'Slicing {{name}} failed: {{detail}}', tier: { local: 'Imported', cloud: 'Cloud', standard: 'Standard', }, cloud: { notAuthenticated: 'Sign in to Bambu Cloud (Settings → Profiles → Cloud) to see your cloud presets.', expired: 'Bambu Cloud session expired — sign in again to refresh your cloud presets.', unreachable: 'Bambu Cloud is unreachable right now. Local and standard presets still work.', }, }, // Spoolman spoolman: { title: 'Spoolman連携', enabled: 'Spoolman有効', url: 'Spoolman URL', connected: '接続中', disconnected: '未接続', testConnection: '接続テスト', sync: '同期', syncing: '同期中...', lastSync: '最終同期', linkToSpoolman: 'Spoolmanに連携', openInSpoolman: 'Spoolmanで開く', unlinkSpool: 'スプールのリンクを解除', unlinkConfirmTitle: 'スプールのリンクを解除しますか?', unlinkConfirmMessage: 'これにより、スプールがSpoolmanから切断されます。Spoolman内のスプールデータは変更されません。', selectSpool: 'スプールを選択', noUnlinkedSpools: 'Spoolmanに未連携のスプールが見つかりません。', linkSuccess: 'スプールをSpoolmanにリンクしました', linkFailed: 'スプールのリンクに失敗しました', unlinkSuccess: 'スプールをSpoolmanから解除しました', unlinkFailed: 'スプールのリンク解除に失敗しました', spoolId: 'スプールID', fillSourceLabel: '(Spoolman)', weight: '重量', remaining: '残り', disableWeightSync: 'AMS推定重量同期を無効化', disableWeightSyncDesc: 'AMS推定値から残量を更新しません。AMSの割合ベースの推定よりもSpoolmanの使用量追跡を優先する場合に使用してください。新しいスプールは引き続きAMS推定値を初期重量として使用します。', reportPartialUsage: '失敗した印刷の部分使用量を報告', reportPartialUsageDesc: '印刷が失敗またはキャンセルされた場合、レイヤー進捗に基づいてその時点までの推定フィラメント使用量を報告します。', }, // Inventory inventory: { title: 'スプール在庫管理', spoolmanMixedContentTitle: 'Spoolman を HTTPS で読み込めません — ブラウザが混在コンテンツをブロックしています', spoolmanMixedContentBody: 'Bambuddy はリバースプロキシ経由で HTTPS 配信されていますが、Spoolman の URL は HTTP のままです。ブラウザはセキュリティ上の理由で混在コンテンツをブロックするため、埋め込みの Spoolman UI を表示できません。Spoolman も HTTPS でアクセスできる必要があります。', spoolmanMixedContentFixReverseProxy: 'Spoolman を Bambuddy と同じリバースプロキシ(Traefik / Nginx / Caddy)の後ろに HTTPS で配置し、設定で Spoolman URL を新しい HTTPS アドレスに更新してください。', spoolmanMixedContentFixOpenNewTab: '回避策として Spoolman を新しいタブで HTTP として開くことができます — 混在コンテンツのルールは埋め込みフレームのみに適用され、独立したタブは問題なく動作します。', spoolmanOpenInNewTab: 'Spoolman を新しいタブで開く', addSpool: 'スプールを追加', editSpool: 'スプールを編集', material: '素材', selectMaterial: '素材を選択...', subtype: 'サブタイプ', brand: 'ブランド', searchBrand: 'ブランドを検索...', useCustomBrand: '「{{brand}}」を使用', useCustomMaterial: 'カスタム素材を使用: {{material}}', colorName: '色名', colorNamePlaceholder: 'Jade White, Fire Red...', color: '色', hexColor: 'HEXカラー', pickColor: 'カスタムカラーを選択', labelWeight: '表示重量', coreWeight: '空スプール重量', searchSpoolWeight: 'スプール重量を検索...', weightUsed: '使用量', currentWeight: '残量', measuredWeight: '計測重量', spoolName: 'スプール', costPerKg: 'kgあたりのコスト', measuredWeightError: '計測重量は{{min}}gから{{max}}gの間で入力してください。', slicerFilament: 'スライサーフィラメント', slicerFilamentName: 'スライサープリセット名', slicerPreset: 'スライサープリセット', searchPresets: 'フィラメントプリセットを検索...', selectedPreset: '選択済み', noPresetsFound: 'プリセットが見つかりません', tempOverrides: '温度オーバーライド', note: 'メモ', notePlaceholder: 'このスプールに関する追加メモ...', // Per-spool category + low-stock threshold override (#729) category: 'カテゴリ', categoryPlaceholder: '例:本番、試作、クライアントA', categoryNone: 'カテゴリなし', lowStockThresholdOverride: '在庫低下のしきい値(このスプール)', lowStockThresholdOverrideHelp: '空欄の場合、グローバル設定({{global}}%)を使用します。', clearRfid: 'RFIDタグをクリア', rfidCleared: 'RFIDタグをクリアしました', archive: 'アーカイブ', restore: '復元', noSpools: 'スプールがありません。最初のスプールを追加してください。', noAvailableSpools: '利用可能なスプールがありません。インベントリにスプールを追加するか、別のスロットからスプールの割り当てを解除してください。', kProfiles: 'Kプロファイル', addKProfile: 'Kプロファイルを追加', assignSpool: 'スプールを割り当て', unassignSpool: '割り当て解除', assignSuccess: 'スプールを割り当て、AMSスロットを設定しました', assignFailed: 'スプールの割り当てに失敗しました', selectSpool: 'このスロットに割り当てるスプールを選択', assigned: '割り当て済み', assigning: '割り当て中...', searchSpools: 'スプールを検索...', showAllSpools: 'すべてのスプールを表示', allMaterials: 'すべての素材', filterByBrand: 'ブランドで絞り込み...', showArchived: 'アーカイブ済みを表示', quickAdd: 'クイック追加(在庫)', quantity: '数量', stock: '在庫', configured: '設定済み', spoolsCreated: '{{count}}本のスプールを作成しました', spoolCreated: 'スプールを作成しました', spoolUpdated: 'スプールを更新しました', spoolDeleted: 'スプールを削除しました', spoolArchived: 'スプールをアーカイブしました', spoolRestored: 'スプールを復元しました', deleteConfirm: 'このスプールを削除しますか?この操作は元に戻せません。', archiveConfirm: 'このスプールをアーカイブしますか?', advancedSettings: '詳細設定', // Tabs filamentInfoTab: 'フィラメント情報', paProfileTab: 'PAプロファイル', filamentInfo: 'フィラメント', additional: '追加情報', // Cloud loadingPresets: 'クラウドプリセットを読み込み中...', cloudConnected: 'クラウド接続済み', cloudNotConnected: 'クラウド未接続(デフォルト使用)', // Colors recentColors: '最近', searchColors: '色を検索...', searchResults: '検索結果', allColors: 'すべての色', commonColors: '一般的な色', showLess: '少なく表示', showAll: 'すべて表示', noColorsFound: '一致する色がありません', noResults: '結果なし', // Multi-colour gradient + visual effect (#1154) — English fallback. extraColorsLabel: 'Extra colours', extraColorsPlaceholder: 'EC984C,#6CD4BC,A66EB9,D87694', extraColorsHint: 'Paste 2 to 8 hex stops, separated by commas. Renders as a gradient.', extraColorsInvalid: 'Ignored invalid hex: {{tokens}}', colorEffectLabel: 'Effect', colorEffect: { none: 'None', sparkle: 'Sparkle', wood: 'Wood', marble: 'Marble', glow: 'Glow', matte: 'Matte', silk: 'Silk', galaxy: 'Galaxy', rainbow: 'Rainbow', metal: 'Metal', translucent: 'Translucent', gradient: 'Gradient', dualColor: 'Dual Color', triColor: 'Tri Color', multicolor: 'Multicolor', }, // PA Profiles selectMaterialFirst: 'フィラメント情報タブで素材を選択してください。', noPrintersConfigured: 'プリンターが設定されていません。プリンターを追加してください。', matchingFilter: 'フィルター', anyBrand: 'すべてのブランド', anyVariant: 'すべてのバリアント', autoSelect: '自動選択', matches: '件一致', match: '件一致', noMatches: '一致なし', connected: '接続済み', offline: 'オフライン', printerOffline: 'プリンターがオフラインです。接続してキャリブレーションプロファイルを表示してください。', noKProfilesMatch: '選択したフィラメントに一致するKプロファイルがありません。', leftNozzle: '左ノズル', rightNozzle: '右ノズル', profilesSelected: 'キャリブレーションプロファイル選択済み', // Stats & enhanced table totalInventory: '在庫合計', totalConsumed: '総消費量', byMaterial: '素材別', inPrinter: 'プリンター内', lowStock: '残量少', sinceTracking: '追跡開始以降', loadedInAms: 'AMS/Extに装填中', remaining: '残り', weightCheck: '重量チェック', lastWeighed: '最終計量', neverWeighed: '未計量', search: 'スプールを検索...', showing: '表示', to: '〜', of: '/', show: '表示', spools: 'スプール', spool: 'スプール', page: 'ページ', noSpoolsMatch: '結果なし', noSpoolsMatchDesc: '検索やフィルターを調整してみてください。', active: 'アクティブ', archived: 'アーカイブ済み', all: 'すべて', used: '使用済み', new: '新規', clearFilters: 'フィルターをクリア', table: 'テーブル', cards: 'カード', net: '正味', // Grouping groupSimilar: 'グループ化', groupedSpools: '{{count}}本の同一スプール', groupedRows: '行', // Column config columns: '列', configureColumns: '列の設定', configureColumnsDesc: 'ドラッグして並べ替えるか、矢印を使用してください。目のアイコンで表示/非表示を切り替えます。', visible: '表示中', reset: 'リセット', cancel: 'キャンセル', applyChanges: '変更を適用', moveUp: '上へ移動', moveDown: '下へ移動', hideColumn: '列を非表示', showColumn: '列を表示', // Tag linking linkToSpool: 'スプールにリンク', tagLinked: 'タグがスプールにリンクされました', tagLinkFailed: 'タグのリンクに失敗しました', tagAlreadyLinked: 'タグは既に別のスプールにリンクされています', unknownTag: '不明なRFIDタグが検出されました', // Usage history usageHistory: '使用履歴', noUsageHistory: 'まだ使用記録がありません', printName: 'プリント名', weightConsumed: '消費重量', clearHistory: 'クリア', historyCleared: '使用履歴がクリアされました', fillSourceLabel: '(Inv)', lowStockThresholdError: 'しきい値は0.1から99.9の間でなければなりません', assignMismatchTitle: '材料の不一致', assignMismatchMessage: '選択したスプールの材料「{{spoolMaterial}}」は、{{location}} のトレイ材料「{{trayMaterial}}」と一致しません。割り当てますか?', assignMismatchConfirm: '強制的に割り当て', assignPartialMismatchMessage: 'スプールの材料「{{spoolMaterial}}」は「{{trayMaterial}}」に似ていますが、{{location}} と完全には一致しません。続行しますか?', assignProfileMismatchMessage: 'スプールのプロファイル「{{spoolProfile}}」は {{location}} のトレイプロファイル「{{trayProfile}}」と一致しません。続行しますか?', }, // Timelapse timelapse: { title: 'タイムラプス', create: 'タイムラプスを作成', download: 'ダウンロード', delete: '削除', preview: 'プレビュー', frameRate: 'フレームレート', quality: '品質', processing: 'バックアップファイルを処理中...', noTimelapses: '利用可能なタイムラプスがありません', }, // AMS ams: { title: 'AMS', slot: 'スロット', empty: '<空>', emptySlot: '空のスロット', unknown: '不明', humidity: '湿度', temperature: '温度', filamentType: 'フィラメントタイプ', filamentColor: '色', remaining: '残り', history: 'AMS履歴', noHistory: 'メンテナンス履歴がありません', configureSlot: 'フィラメントプロファイルとK値でスロットを設定', externalSpool: '外部スプール', profile: 'プロファイル', kFactor: 'K値', fill: '充填率', configure: '設定', used: '使用済み', remainingUnit: '残り', }, // Print modal printModal: { title: '印刷を開始', selectPrinter: 'プリンターを選択', selectPlate: 'プレートを選択', filamentMapping: 'フィラメントマッピング', totalCost: '合計コスト:', slotRemainingShort: ' - 残{{grams}}g', printSettings: '印刷設定', bedLeveling: 'ベッドレベリング', flowCalibration: 'フローキャリブレーション', vibrationCalibration: '振動キャリブレーション', layerInspection: '第一層検査', timelapse: 'タイムラプス', startPrint: '印刷を開始', addToQueue: 'キューに追加', cancel: 'キャンセル', noPrintersAvailable: '利用可能なプリンターがありません', printerBusy: 'プリンターは使用中です', printerOffline: 'プリンターはオフラインです', sameTypeDifferentColor: '同じ種類、異なる色', filamentTypeNotLoaded: 'フィラメントタイプが未読み込み', openCalendar: 'カレンダーを開く', leftNozzle: 'L', rightNozzle: 'R', leftNozzleTooltip: '左ノズル', rightNozzleTooltip: '右ノズル', filamentOverride: 'フィラメントオーバーライド', filamentOverrideHint: 'モデルベースの割り当てに使用するフィラメントをオプションで上書きします。スケジューラは元の3MF値ではなく、選択したフィラメントに基づいてマッチングします。', originalFilament: 'オリジナル', overrideWith: '変更先', resetToOriginal: 'オリジナルに戻す', insufficientFilamentTitle: 'フィラメントが不足しています', insufficientFilamentMessage: '割り当てられたスプールの一部は、この印刷に必要な量より残量が少ないです:', insufficientFilamentLine: '{{printer}} - {{slot}}: 必要 {{required}}g、残り {{remaining}}g', printAnyway: 'それでも印刷', forceColorMatch: 'カラーマッチを強制', staggerPrinterStarts: 'Stagger printer starts', staggerGroupSize: 'Group size', staggerInterval: 'Interval (min)', staggerPreview: '{{printers}} printers → {{groups}} groups of {{size}}, starting every {{interval}} min', staggerLastGroup: 'last group: {{count}}', staggerTotal: 'total: {{minutes}} min', staggerToPrinters: '{{count}}台のプリンターに段階的に送信', gcodeInjection: '自動印刷G-codeを挿入', }, // Backup backup: { title: 'バックアップと復元', createBackup: 'バックアップを作成', restoreBackup: 'バックアップの復元', restoreDescription: 'バックアップファイルからすべてのデータを置き換える', downloadBackup: 'バックアップをダウンロード', uploadBackup: 'バックアップをアップロード', lastBackup: '最終バックアップ', autoBackup: '自動バックアップ', backupNow: '今すぐバックアップ', restoreWarning: '警告: バックアップの復元は現在のすべてのデータを上書きします。', includeArchives: 'アーカイブを含む', includeSettings: '設定を含む', includeProfiles: 'プロファイルを含む', backupSuccess: 'バックアップを作成しました', restoreSuccess: 'バックアップを復元しました', backupFailed: 'バックアップに失敗しました', restoreFailed: '復元に失敗しました', restoreNote: '復元中、仮想プリンターは停止されます', // GitHub Backup githubBackup: 'GitHubバックアップ', enabled: '有効', cloudLoginRequired: 'Bambu Cloudログインが必要です。GitHubバックアップを有効にするには、プロファイル → クラウドプロファイルからサインインしてください。', cloudLoginRequiredShort: 'Cloudログインが必要', githubDescription: 'プロファイルをプライベートGitHubリポジトリに自動的に同期し、バックアップとバージョン履歴を保持します。', repositoryUrl: 'リポジトリURL', repoUrlPlaceholderGitHub: 'https://github.com/username/repo-name', repoUrlPlaceholderGitea: 'https://gitea.example.com/username/repo-name', repoUrlPlaceholderForgejo: 'https://forgejo.example.com/username/repo-name', repoUrlPlaceholderGitLab: 'https://gitlab.com/username/repo-name', allowInsecureHttp: '安全でないHTTPを許可', allowInsecureHttpHint: 'TLSなしのプライベートネットワーク上のセルフホストインスタンスに対して有効化', personalAccessToken: '個人アクセストークン', tokenSaved: '(保存済み)', enterNewToken: '新しいトークンを入力して更新', tokenHint: 'Contents読み書き権限を持つきめ細かいトークン', branch: 'ブランチ', provider: 'Git Provider', providerGitHub: 'GitHub', providerGitLab: 'GitLab', providerGitea: 'Gitea', providerForgejo: 'Forgejo', manualOnly: '手動のみ', hourly: '毎時', daily: '毎日', weekly: '毎週', includeInBackup: 'バックアップに含める', kProfiles: 'Kプロファイル', kProfilesDescription: '接続されたプリンターからの圧力キャリブレーション', noPrintersConnected: 'プリンターが接続されていません', printersConnected: '{{connected}}/{{total}} 接続済み', cloudProfiles: 'クラウドプロファイル', cloudProfilesDescription: 'Bambu Cloudからのフィラメント、プリンター、プロセスプリセット', appSettings: 'アプリ設定', appSettingsDescription: 'Bambuddy設定(データベース全体)', spoolInventory: 'スプール在庫', spoolInventoryDescription: 'フィラメントスプール、使用履歴、コスト追跡', printArchives: '印刷アーカイブ', printArchivesDescription: '印刷履歴メタデータ(gcode/3MFファイルなし)', lastBackupAt: '最終バックアップ:', noBackupsYet: 'バックアップはまだありません', next: '次回:', startingBackup: 'バックアップを開始しています...', test: 'テスト', enableBackup: 'バックアップを有効化', testConnection: '接続テスト', enterRepoUrl: 'リポジトリURLを入力してください', enterRepoAndToken: 'リポジトリURLとアクセストークンを入力してください', repoRequired: 'リポジトリURLは必須です', tokenRequired: 'アクセストークンは必須です', githubBackupEnabled: 'GitHubバックアップが有効になりました', tokenUpdated: 'トークンが更新されました', settingsSaved: '設定が保存されました', failedToSave: '保存に失敗しました: {{message}}', backupCompleteFiles: 'バックアップ完了 - {{count}}ファイルが更新されました', backupSkippedNoChanges: 'バックアップをスキップ - 変更なし', backupFailed2: 'バックアップに失敗しました: {{message}}', clearedLogs: '{{count}}件のログを削除しました', failedToClearLogs: 'ログの削除に失敗しました: {{message}}', // History history: '履歴', clear: 'クリア', date: '日付', status: 'ステータス', commit: 'コミット', // Local Backup localBackup: 'ローカルバックアップ', localBackupDescription: 'データベース、アーカイブ、アップロード、すべてのファイルを含むBambuddyデータの完全なバックアップを作成します。', downloadBackupLabel: 'バックアップをダウンロード', completeBackupZip: '完全バックアップ: データベース + 全ファイル (ZIP)', download: 'ダウンロード', preparingBackup: 'バックアップを準備しています...', creatingArchive: 'バックアップアーカイブを作成しています...大きなアーカイブの場合、時間がかかることがあります。', downloadingFile: 'バックアップファイルをダウンロードしています...', backupDownloaded: 'バックアップのダウンロードが成功しました', failedToCreateBackup: 'バックアップの作成に失敗しました: {{message}}', restore: '復元', restoreReplacesAll: '復元はすべてのデータを置き換えます。', restoreReplacesAllDetail: '現在のデータベースとファイルは完全に置き換えられます。復元後に再起動が必要です。', restoreConfirmTitle: 'バックアップを復元', restoreConfirmMessage: '"{{filename}}"から復元してもよろしいですか?現在のデータベースとすべてのファイルが完全に置き換えられます。復元後にアプリケーションの再起動が必要です。', restoreConfirmButton: 'バックアップを復元', uploadingFile: 'バックアップファイルをアップロードしています...', backupRestoredRestart: 'バックアップが復元されました。Bambuddyを再起動してください。', failedToRestore: 'バックアップの復元に失敗しました。ファイル形式を確認してください。', reloadNow: '今すぐリロード', creatingBackup: 'バックアップを作成中', restoringBackup: 'バックアップを復元中', preparing: '準備中...', processing: '処理中...', doNotClosePage: 'このページを閉じたり、移動しないでください。大きなバックアップの場合、この操作には数分かかることがあります。', // RestoreModal restoring: '復元中...', restoreComplete: '復元完了', restoreFailed2: '復元失敗', importSettings: 'バックアップファイルから設定をインポート', pleaseWaitRestoring: 'データの復元中です。お待ちください', selectBackupFile: 'クリックしてバックアップファイルを選択 (.jsonまたは.zip)', duplicateHandling: '重複処理の仕組み:', matchPrinters: 'プリンター', matchPrintersBy: 'シリアル番号で照合', matchSmartPlugs: 'スマートプラグ', matchSmartPlugsBy: 'IPアドレスで照合', matchNotificationProviders: '通知プロバイダー', matchNotificationProvidersBy: '名前で照合', matchFilaments: 'フィラメント', matchFilamentsBy: '名前 + タイプ + ブランドで照合', matchArchives: 'アーカイブ', matchArchivesBy: 'コンテンツハッシュで照合(常にスキップ)', matchPendingUploads: '保留中のアップロード', matchPendingUploadsBy: 'ファイル名で照合', matchSettingsTemplates: '設定とテンプレート', matchSettingsTemplatesBy: '常に上書き', replaceExisting: '既存のデータを置き換え', keepExisting: '既存のデータを保持', overwriteDescription: '既に存在する項目をバックアップデータで上書き', keepDescription: 'まだ存在しない項目のみ復元', overwriteCaution: '注意:', overwriteWarning: '上書きすると、現在の設定がバックアップのデータで置き換えられます。プリンターのアクセスコードはセキュリティのため上書きされません。', cancel: 'キャンセル', processingBackup: 'バックアップファイルを処理しています...', itemsRestored: '復元済み', itemsSkipped: 'スキップ済み', restored: '復元済み', skippedAlreadyExist: 'スキップ(既に存在)', filesCategory: 'ファイル(3MF、サムネイルなど)', andMore: '...他{{count}}件', newApiKeysGenerated: '新しいAPIキーが生成されました', keysShownOnce: 'これらのキーは一度だけ表示されます。今すぐコピーしてください!', copy: 'コピー', noDataFound: 'バックアップファイルに復元するデータが見つかりませんでした。', close: '閉じる', // Scheduled local backups (#884) scheduledBackup: 'Scheduled Backups', scheduledBackupDescription: 'Automatically create backup snapshots on a schedule. Output directory can be mounted to a NAS or external storage.', frequency: 'Frequency', backupTime: 'Time', retention: 'Retention', retentionDescription: 'Number of backups to keep', outputPath: 'Output Path', outputPathPlaceholder: 'Default: {{path}}', outputPathDescription: 'Leave empty for default location', runNow: 'Run Now', backupFiles: 'Backup Files', noScheduledBackups: 'No backups yet', deleteBackup: 'Delete', deleteBackupConfirm: 'Delete this backup file?', backupRunning: 'Backup in progress...', scheduledBackupComplete: 'Backup completed successfully', scheduledBackupFailed: 'Backup failed', nextBackup: 'Next backup', backupSize: 'Size', utc: 'UTC', defaultPathLabel: 'Default:', // Category labels categories: { settings: '設定', notification_providers: '通知プロバイダー', notification_templates: '通知テンプレート', smart_plugs: 'スマートプラグ', printers: 'プリンター', filaments: 'フィラメント', maintenance_types: 'メンテナンスタイプ', archives: 'アーカイブ', projects: 'プロジェクト', pending_uploads: '保留中のアップロード', external_links: '外部リンク', api_keys: 'APIキー', }, }, // Tags tags: { title: 'タグ', addTag: 'タグを追加', editTag: 'タグを編集', deleteTag: 'タグを削除', tagName: 'タグ名', tagColor: 'タグの色', noTags: 'タグがありません', deleteConfirm: 'このタグを削除しますか?', manageTags: 'タグを管理', }, // Upload modal (archives) uploadModal: { title: '3MFファイルのアップロード', dragDrop: '.3mfファイルをここにドラッグ&ドロップ', or: 'または', browseFiles: 'ファイルを参照', extractionInfo: 'プリンターモデルは3MFファイルのメタデータから自動的に抽出されます。', uploaded: 'アップロード済み', failed: 'アップロードに失敗しました', uploading: 'アップロード中...', upload: 'アップロード', uploadFailed: 'アップロード失敗', }, // Edit archive modal // Edit Archive Modal editArchive: { title: 'アーカイブを編集', name: '名前', namePlaceholder: '印刷名', printer: 'プリンター', noPrinter: 'プリンターなし', project: 'プロジェクト', noProject: 'プロジェクトなし', itemsPrinted: '印刷数', itemsPrintedHelp: 'この印刷ジョブで製造したアイテム数', notes: 'メモ', notesPlaceholder: 'この印刷についてメモを追加...', externalLink: '外部リンク', externalLinkPlaceholder: 'https://...', externalLinkHelp: 'Printables、Thingiverse、その他のソースへのリンク', tags: 'タグ', tagsPlaceholder: 'タグを追加...', addMoreTags: 'タグをさらに追加...', matchingTags: '"{{query}}" に一致', existingTags: '既存のタグ', clickToAdd: '(クリックして追加)', status: 'ステータス', failureReason: '失敗理由', selectReason: '理由を選択...', photos: '印刷結果の写真', photosHelp: '+ をクリックして印刷結果の写真を追加', printResult: '印刷結果', saving: '保存中...', // Failure reasons failureReasons: { adhesionFailure: '定着不良', spaghettiDetached: 'スパゲッティ / 剥離', layerShift: 'レイヤーシフト', cloggedNozzle: 'ノズル詰まり', filamentRunout: 'フィラメント切れ', warping: '反り', stringing: '糸引き', underExtrusion: '押出不足', powerFailure: '電源障害', userCancelled: 'ユーザーによるキャンセル', other: 'その他', }, // Archive statuses statuses: { completed: '完了', failed: '失敗', aborted: 'キャンセル', printing: '印刷中', }, }, // K-Profiles kProfiles: { title: 'Kプロファイル', noPrintersConfigured: 'プリンターが設定されていません', addPrinterInSettings: 'Kプロファイルを管理するには設定でプリンターを追加してください', noActivePrinters: 'アクティブなプリンターがありません', enablePrinterConnection: 'Kプロファイルを表示するにはプリンター接続を有効にしてください', loadingProfiles: 'Kプロファイルを読み込み中...', printerOffline: 'プリンターオフライン', printerOfflineDesc: '選択したプリンターは接続されていません。電源を入れてKプロファイルを表示してください。', noMatchingProfiles: '一致するプロファイルなし', noMatchingProfilesDesc: '検索条件に一致するプロファイルがありません', noKProfiles: 'Kプロファイルなし', noKProfilesDesc: '{{diameter}}mmノズル用の圧力キャリブレーションプロファイルが見つかりません', createFirstProfile: '最初のプロファイルを作成', // Controls printer: 'プリンター', nozzle: 'ノズル', refresh: '更新', addProfile: 'K-プロファイルを追加', export: 'エクスポート', import: 'インポート', select: '選択', selectAll: 'すべて選択', delete: '削除', // Filters searchPlaceholder: '名前またはフィラメントで検索...', allExtruders: 'すべてのエクストルーダー', leftOnly: '左のみ', rightOnly: '右のみ', allFlow: 'すべてのフロー', hfOnly: 'HFのみ', sOnly: 'Sのみ', sortName: 'ソート: 名前', sortKValue: 'ソート: K値', sortFilament: 'ソート: フィラメント', // Dual extruder labels leftExtruder: '左エクストルーダー', rightExtruder: '右エクストルーダー', // Modal modal: { addTitle: 'Kプロファイルを追加', editTitle: 'Kプロファイルを編集', profileName: 'プロファイル名', profileNamePlaceholder: 'マイPLAプロファイル', kValue: 'K値', kValuePlaceholder: '0.020', kValueHelp: '一般的な範囲: PLA 0.01〜0.06、PETG 0.02〜0.10', filament: 'フィラメント', selectFilament: 'フィラメントを選択...', noFilamentsHelp: 'フィラメントが見つかりません。Bambu Studioでまずプロファイルを作成してください。', flowType: 'フロータイプ', highFlow: 'ハイフロー', standard: 'スタンダード', nozzleSize: 'ノズルサイズ', extruder: 'エクストルーダー', extruders: 'エクストルーダー', left: '左', right: '右', notes: 'メモ(ローカル保存)', notesPlaceholder: 'このプロファイルのメモを追加...', notesHelp: 'メモはBambuddyに保存され、プリンターには保存されません', syncing: 'プリンターと同期中...', savingExtruder: 'エクストルーダーに保存中 {{current}}/{{total}}...', pleaseWait: 'お待ちください', }, // Delete confirmation deleteConfirm: { title: 'プロファイルを削除', cannotUndo: '元に戻せません', message: '「{{name}}」をプリンターから削除しますか?', }, // Bulk delete bulkDelete: { title: 'プロファイルを削除', cannotUndo: '元に戻せません', message: '選択した{{count}}件のプロファイルをプリンターから削除しますか?', }, // Toast toast: { profileSaved: 'Kプロファイルを保存しました', profilesSaved: 'Kプロファイルを{{count}}台のエクストルーダーに保存しました', selectAtLeastOneExtruder: 'エクストルーダーを1つ以上選択してください', profileDeleted: 'Kプロファイルを削除しました', profilesDeleted: '{{count}}件のプロファイルを削除しました', exportedProfiles: '{{count}}件のプロファイルをエクスポートしました', importedProfiles: '{{total}} 件中 {{count}} 件のプロファイルをインポートしました', noProfilesToExport: 'エクスポートするプロファイルがありません', invalidFileFormat: '無効なファイル形式', failedToParseImport: 'インポートファイルの解析に失敗しました', failedToSaveBatch: 'Kプロファイルの保存に失敗しました', noteSaved: 'メモを保存しました', failedToSaveNote: 'メモの保存に失敗しました', }, // Permissions permission: { noRead: 'プロファイルを更新する権限がありません', noCreate: 'プロファイルを追加する権限がありません', noUpdate: 'Kプロファイルを更新する権限がありません', noDelete: 'Kプロファイルを削除する権限がありません', noExport: 'プロファイルをエクスポートする権限がありません', noImport: 'プロファイルをインポートする権限がありません', }, }, // Virtual Printer virtualPrinter: { title: '仮想プリンター', running: '稼働中', stopped: '停止', description: { default: 'Bambu StudioとOrcaSlicerに表示される仮想プリンターを有効化。このプリンターに送信されたファイルは印刷せずに直接アーカイブされます。', proxy: 'スライサーのトラフィックを実際のプリンターに転送するプロキシを有効化。任意のネットワーク経由でリモート印刷が可能です。', }, enable: { title: '仮想プリンターを有効化', visibleInSlicer: 'スライサーの検出リストに「Bambuddy」として表示', proxyingTo: '{{name}}にプロキシ中', notActive: '非アクティブ', }, model: { title: 'プリンターモデル', description: 'エミュレートするプリンターモデルを選択。', restartWarning: 'モデルを変更すると仮想プリンターが再起動されます', }, accessCode: { title: 'アクセスコード', isSet: 'アクセスコードが設定されています', notSet: 'アクセスコード未設定 - 有効化に必要です', placeholder: '8文字のコードを入力', placeholderChange: '新しいコードを入力して変更', hint: '正確に8文字必要です。スライサーの認証に使用されます。', charCount: '({{count}}/8)', }, targetPrinter: { title: 'ターゲットプリンター', configured: 'プロキシターゲット設定済み', notConfigured: 'ターゲットプリンター未選択 - プロキシモードに必要です', placeholder: 'プリンターを選択...', hint: 'スライサートラフィックの転送先プリンターを選択。プリンターはLANモードである必要があります。', noPrinters: 'プリンターが設定されていません。プロキシモードを使用するにはまずプリンターを追加してください。', }, remoteInterface: { title: 'ネットワークインターフェース上書き', configured: 'インターフェース上書き有効', optional: 'オプション — 自動検出IPが間違っている場合に使用(複数NIC、Docker、VPNなど)', placeholder: '自動検出(デフォルト)...', hint: 'SSDPで広告され、TLS証明書に使用されるIPアドレスを上書きします。Bambuddyに複数のネットワークインターフェースがある場合に便利です。', }, mode: { title: 'モード', archive: 'アーカイブ', archiveDesc: 'ファイルを即座にアーカイブ', review: 'レビュー', reviewDesc: 'アーカイブ前にレビュー', queue: 'キュー', queueDesc: 'アーカイブしてキューに追加', proxy: 'プロキシ', proxyDesc: '実際のプリンターに転送', }, autoDispatch: { title: '自動ディスパッチ', description: 'キューに追加されたときに自動的に印刷を開始します。オフの場合、手動ディスパッチを待ちます。', }, queueForceColorMatch: { title: 'Force color match', description: 'Refuse to dispatch onto a printer that does not have the exact filament type and color loaded. Off by default — without this, the queue uses model-only matching and may pick a printer with the wrong colour loaded.', }, tailscaleDisabled: { title: 'Tailscale統合', description: '有効にすると、Tailscaleを使用して信頼できるTLS証明書を使用します。自己署名証明書のみを使用する場合は無効にします。', }, setupRequired: { title: 'セットアップが必要です', description: '仮想プリンター機能を使用するには追加のシステム設定が必要です。ポートフォワーディング、ファイアウォールルール、プラットフォーム固有の設定が含まれます。', readGuide: '有効にする前にセットアップガイドをお読みください', }, howItWorks: { title: '仕組み', step1: '同じLAN上では、仮想プリンターはスライサー(Bambu Studio / OrcaSlicer)に自動的に表示されます。他のネットワークからは、IPアドレスとアクセスコードで手動で追加してください。', step2: 'アーカイブ、レビュー、キューモードでは、スライサーの「送信」ボタンを使用して3MFファイルをBambuddyにアップロードします。スライサーは「印刷成功」と表示しますが、ファイルは保存され、印刷はされません。', step3: 'プロキシモードでは、仮想プリンターはすべてのトラフィックを実際のプリンターに転送します。直接接続されているかのように印刷がすぐに開始されます。', }, status: { title: 'ステータス詳細', printerName: 'プリンター名', model: 'モデル', serialNumber: 'シリアル番号', mode: 'モード', pendingFiles: '保留中のファイル', targetPrinter: 'ターゲットプリンター', ftpPort: 'FTPポート', mqttPort: 'MQTTポート', ftpConnections: 'FTP接続数', mqttConnections: 'MQTT接続数', }, toast: { updated: '仮想プリンター設定を更新しました', failedToUpdate: '設定の更新に失敗しました', tailscaleNotAvailable: 'このホストにTailscaleがインストールされていません。先にTailscaleをインストールしてから再試行してください。', copyFailed: 'コピーに失敗しました — テキストを手動で選択してください', accessCodeRequired: '先にアクセスコードを設定してください', targetPrinterRequired: '先にターゲットプリンターを選択してください', bindIpRequired: '先にバインドIPを設定してください', accessCodeEmpty: 'アクセスコードは空にできません', accessCodeLength: 'アクセスコードは8文字である必要があります', created: '仮想プリンターを作成しました', failedToCreate: '仮想プリンターの作成に失敗しました', deleted: '仮想プリンターを削除しました', failedToDelete: '仮想プリンターの削除に失敗しました', }, list: { title: '仮想プリンター', add: '追加', addFirst: '仮想プリンターを追加', empty: '仮想プリンターが設定されていません。追加して始めましょう。', }, bindIp: { title: 'バインドインターフェース', placeholder: 'インターフェースを選択...', hint: 'この仮想プリンターがバインドするネットワークインターフェース。プリンターごとに一意である必要があります。', }, proxy: { accessCodeHint: 'プロキシモードでは、スライサーにターゲットプリンターのアクセスコードを使用してください。接続は実際のプリンターに透過的に転送されます。', }, addDialog: { title: '仮想プリンターを追加', name: '名前', hint: 'アクセスコード、ターゲットプリンター、その他の設定は作成後に設定できます。', create: '作成', }, deleteConfirm: { title: '仮想プリンターを削除', message: '「{{name}}」を削除してもよろしいですか?このプリンターのすべてのサービスが停止されます。', }, archiveNameSource: { title: 'アーカイブ名のソース', description: '仮想プリンター経由でファイルが到着したときに、新しいアーカイブをどのように命名するかを選択します。「メタデータ」は3MFに埋め込まれたスライサータイトル(デフォルト)を使用します。「ファイル名」はBambu StudioがFTPで送信したファイル名を使用します — 「プリンターに送信」ダイアログでジョブ名を変更した場合に便利です。', metadata: 'メタデータ', filename: 'ファイル名', }, }, // Model Viewer modelViewer: { openInSlicer: 'スライサーで開く', tabs: { model: '3Dモデル', gcode: 'G-codeプレビュー', }, notAvailable: '利用不可', notSliced: '未スライス', plates: 'プレート', allPlates: '全プレート', plateNumber: 'プレート {{number}}', plateCount: '{{count}} プレート', plateCount_other: '{{count}} プレート', objectCount: '{{count}} オブジェクト', objectCount_other: '{{count}} オブジェクト', filamentCount: '{{count}} フィラメント', filamentCount_other: '{{count}} フィラメント', eta: '予想時間 {{minutes}} 分', noPreview: 'このファイルのプレビューは利用できません', pagination: { pageOf: 'ページ {{current}} / {{total}}', prev: '前へ', next: '次へ', }, errors: { failedToLoad: 'ファイルの読み込みに失敗しました', noMeshes: '3MFファイルにメッシュが見つかりません', unsupportedFormat: 'サポートされていないファイル形式です', }, }, // Maintenance type descriptions (built-in) maintenanceDescriptions: { lubricateCarbonRods: 'カーボンロッドに潤滑剤を塗布してスムーズな動きを確保', lubricateRails: 'リニアレールの潤滑', cleanNozzle: 'ノズル/ホットエンドの清掃', checkBelts: 'ベルト張力の確認', cleanBuildPlate: 'ビルドプレートの清掃', checkExtruder: 'エクストルーダーギアの確認', checkCooling: '冷却ファンの確認', generalInspection: '総合点検', cleanCarbonRods: 'カーボンロッドの清掃', lubricateSteelRods: 'スチールロッドに潤滑剤を塗布してスムーズな動きを確保', cleanSteelRods: 'スチールロッドの清掃', cleanLinearRails: 'リニアレールを拭いてほこりや汚れを除去', checkPtfeTube: 'PTFEチューブの確認', replaceHepaFilter: 'HEPAフィルター交換', replaceCarbonFilter: 'カーボンフィルター交換', lubricateLeftNozzleRail: '左ノズルレールの潤滑', }, // Smart Plugs smartPlugs: { offline: 'オフライン', admin: '管理', openPlugAdminPage: 'プラグ管理ページを開く', deleteSmartPlug: 'スマートプラグを削除', turnOnSmartPlug: 'スマートプラグをオンにする', turnOffSmartPlug: 'スマートプラグをオフにする', turnOn: 'オンにする', turnOff: 'オフにする', addSmartPlug: { scanningNetwork: 'ネットワークをスキャン中...', chooseEntity: 'エンティティを選択...', connectionFailed: '接続失敗', searchEntities: 'エンティティを検索...', searchPowerSensors: '電力センサーを検索...', searchEnergySensors: 'エネルギーセンサーを検索...', placeholders: { plugName: 'リビングルームプラグ', mqttStateOnValue: 'ON, true, 1', mqttSameAsPower: '電力トピックと同じ、または異なる', }, }, // SmartPlugCard linkedTo: 'リンク先:', monitorOnly: '監視のみ', alerts: 'アラート', scheduleOn: 'オン {{time}}', scheduleOff: 'オフ {{time}}', on: 'オン', off: 'オフ', power: '電力', kwhToday: '本日のkWh', settings: '設定', automationSettings: '自動化設定', showInSwitchbar: 'スイッチバーに表示', quickAccessSidebar: 'サイドバーからクイックアクセス', enabled: '有効', enableAutomation: 'このプラグの自動化を有効にする', autoOn: '自動オン', autoOnDescription: '印刷開始時にオンにする', autoOff: '自動オフ', autoOffDescription: '印刷完了時にオフにする(ワンショット)', autoOffPersistent: '有効のまま維持', autoOffPersistentDescription: 'ワンショットではなく印刷間で有効のまま維持', turnOffDelayMode: 'オフ遅延モード', time: '時間', temp: '温度', delayMinutes: '遅延(分)', tempThreshold: '温度しきい値(°C)', tempThresholdDescription: 'ノズルがこの温度以下に冷却されるとオフになります', edit: '編集', deleteConfirm: '"{{name}}"を削除してもよろしいですか?この操作は取り消せません。', turnOnConfirm: '"{{name}}"をオンにしてもよろしいですか?', turnOffConfirm: '"{{name}}"をオフにしてもよろしいですか?接続されたデバイスの電源が切れます。', failedToTurn: '"{{name}}"を{{action}}できませんでした', unknown: '不明', // AddSmartPlugModal addTitle: 'スマートプラグを追加', editTitle: 'スマートプラグを編集', stopScanning: 'スキャン停止', discoverTasmota: 'Tasmotaデバイスを検出', foundDevices: '{{count}}台のデバイスが見つかりました - クリックして選択:', noDevicesFound: 'ネットワーク上にTasmotaデバイスが見つかりません', haNotConfigured: 'Home Assistantが設定されていません。設定場所:', haSettingsPath: '設定 → ネットワーク → Home Assistant', selectEntity: 'エンティティを選択 *', ipAddress: 'IPアドレス *', nameLabel: '名前 *', username: 'ユーザー名', password: 'パスワード', authHint: 'Tasmotaデバイスが認証を必要としない場合は空のままにしてください', linkToPrinter: 'プリンターにリンク', noPrinter: 'プリンターなし(手動制御のみ)', linkingDescription: 'リンクすると印刷開始/完了時に自動でオン/オフできます', powerAlerts: '電力アラート', alertAbove: '上限アラート(W)', alertBelow: '下限アラート(W)', alertDescription: '電力消費がこれらのしきい値を超えた場合に通知します。無効にするには空のままにしてください。', dailySchedule: 'デイリースケジュール', turnOnAt: 'オンにする時刻', turnOffAt: 'オフにする時刻', scheduleDescription: '毎日これらの時刻にプラグを自動的にオン/オフします。スキップするには空のままにしてください。', showOnPrinterCard: 'プリンターカードに表示', displayOnPrinterCard: 'プリンターカードにボタンを表示', connectedResult: '接続成功!', deviceLabel: 'デバイス: {{name}} - ', stateLabel: '状態: {{state}}', test: 'テスト', delete: '削除', save: '保存', add: '追加', cancel: 'キャンセル', failedToStartScan: 'スキャンを開始できませんでした', nameRequired: '名前は必須です', entityRequired: 'Home AssistantプラグにはエンティティIDが必要です', mqttTopicRequired: '電力、エネルギー、または状態監視用に少なくとも1つのMQTTトピックを設定する必要があります', loadingEntities: 'エンティティを読み込み中...', loading: '読み込み中...', failedToLoadEntities: 'エンティティの読み込みに失敗しました: {{error}}', noEntitiesMatching: '"{{search}}"に一致するエンティティが見つかりません', noEntitiesAvailable: '利用可能なエンティティがありません', searchingEntities: 'すべてのエンティティを検索中({{count}}件見つかりました)', showingEntities: 'switch、light、input_booleanを表示({{count}}件利用可能)', energyMonitoringOptional: 'エネルギー監視(オプション)', energyMonitoringHint: '電力/エネルギーデータを提供するセンサーを検索して選択します。', powerSensorW: '電力センサー(W)', energyTodayKwh: '本日のエネルギー(kWh)', totalEnergyKwh: '総エネルギー(kWh)', noMatchingSensors: '一致するセンサーがありません', none: 'なし', mqttNotConfigured: 'MQTTブローカーが設定されていません。ブローカーアドレスを設定してください:', mqttSettingsPath: '設定 → ネットワーク → MQTT配信', mqttNotConfiguredSuffix: '(配信を有効にする必要はありません。ブローカーの詳細を入力するだけです)。', mqttMonitorOnlyDescription: 'MQTTプラグはMQTTサブスクリプション経由で電力/エネルギーデータを受信します。オン/オフ制御は利用できません - MQTTブローカーまたはホームオートメーションシステムを使用してください。', powerMonitoring: '電力監視', energyMonitoring: 'エネルギー監視', stateMonitoring: '状態監視', optional: 'オプション', topic: 'トピック', jsonPath: 'JSONパス', multiplier: '乗数', onValue: 'ON値', mqttPowerHint: 'JSONパスはJSONペイロードから値を抽出します(例: "power_l1")。トピックが生の数値を送信する場合は空のままにしてください。\n乗数: mW→Wは0.001、kW→Wは1000を使用。', mqttEnergyHint: 'JSONパスはJSONペイロードから値を抽出します。生の値の場合は空のままにしてください。\n乗数: Wh→kWhは0.001、MWh→kWhは1000を使用。', mqttStateHint: 'JSONパスはJSONペイロードから値を抽出します。生の値の場合は空のままにしてください。\nON値: "ON"を意味する正確な文字列。自動検出(ON、true、1)の場合は空のままにしてください。', // REST smart plug restControl: 'Control', restOnUrl: 'Turn ON URL', restOffUrl: 'Turn OFF URL', restOnBody: 'ON Request Body', restOffBody: 'OFF Request Body', restMethod: 'HTTP Method', restHeaders: 'Custom Headers (JSON)', restStatusUrl: 'Status URL', restStatusPath: 'State JSON Path', restStatusOnValue: 'ON Value', restPowerUrl: '電力URL', restPowerPath: 'Power JSON Path', restPowerMultiplier: '電力乗数', restEnergyUrl: 'エネルギーURL', restEnergyPath: 'Energy JSON Path', restEnergyMultiplier: 'エネルギー乗数', restUrlRequired: 'At least one URL (ON or OFF) is required for REST plugs', restHeadersHint: 'e.g. {"Authorization": "Bearer your-token"}', restBodyHint: 'e.g. ON, {"state": "on"}', restStatusHint: 'URL to poll for current state', restPathHint: 'e.g. state or data.power.status', restPowerUrlHint: '電力データ用の個別URL(空欄の場合はステータスURLを使用)', restEnergyUrlHint: 'エネルギーデータ用の個別URL(空欄の場合はステータスURLを使用)', restEnergyHint: '各値は個別のURLを使用するか、ステータスURLにフォールバックできます。乗数で単位変換が可能です(例:WhからkWhへの変換は0.001)。', testConnection: 'Test Connection', connectionSuccess: 'Connection successful', noSwitchesInSwitchbar: 'スイッチバーにスイッチがありません', enableSwitchbarHint: '設定 > スマートプラグで「スイッチバーに表示」を有効にしてください', }, // Notifications notifications: { // Provider types providerTypes: { callmebot: 'CallMeBot/WhatsApp', ntfy: 'ntfy', pushover: 'Pushover', telegram: 'Telegram', email: 'メール', discord: 'Discord', webhook: 'Webhook', homeassistant: 'Home Assistant', }, // Provider descriptions providerDescriptions: { email: 'SMTPメール通知', telegram: 'Telegramボット経由の通知', discord: 'Webhook経由でDiscordチャンネルに送信', ntfy: '無料のセルフホスト可能なプッシュ通知', pushover: 'シンプルで信頼性の高いプッシュ通知', callmebot: 'CallMeBot経由の無料WhatsApp通知', webhook: '任意のURLへの汎用HTTP POST', homeassistant: 'Home Assistantダッシュボードの永続通知', }, // NotificationProviderCard lastSuccess: '最終: {{date}}', error: 'エラー', printer: 'プリンター:', allPrinters: 'すべてのプリンター', sendTestNotification: 'テスト通知を送信', eventSettings: 'イベント設定', enabled: '有効', sendFromProvider: 'このプロバイダーから通知を送信', // Event categories printEvents: '印刷イベント', printerStatus: 'プリンターステータス', amsAlarms: 'AMSアラーム', amsHtAlarms: 'AMS-HTアラーム', printQueue: '印刷キュー', // Event tags (badges) start: '開始', plateCheck: 'プレートチェック', complete: '完了', failed: '失敗', stopped: '停止', progress: '進捗', offline: 'オフライン', lowFilament: 'フィラメント残量低下', maintenance: 'メンテナンス', amsHumidity: 'AMS湿度', amsTemp: 'AMS温度', amsHtHumidity: 'AMS-HT湿度', amsHtTemp: 'AMS-HT温度', bedCooled: 'ベッド冷却済み', firstLayer: '第1層完了', quiet: '静音', digest: 'ダイジェスト {{time}}', // Event labels (expanded settings) printStarted: '印刷開始', plateNotEmpty: 'プレートが空でない', plateNotEmptyDescription: '印刷前にオブジェクトが検出されました', printCompleted: '印刷完了', bedCooledLabel: 'ベッド冷却済み', bedCooledDescription: '印刷後にベッドがしきい値以下に冷却', firstLayerCompleteLabel: '第1層完了', firstLayerCompleteDescription: '第1層完了時にスナップショット付きで通知', missingSpoolAssignmentLabel: 'スプール割り当て不足', missingSpoolAssignmentDescription: '印刷開始時に必要トレイへスプールが未割り当ての場合に通知', printFailed: '印刷失敗', printStopped: '印刷停止', progressMilestones: '進捗マイルストーン', progressMilestonesDescription: '25%、50%、75%で通知', printerOffline: 'プリンターオフライン', printerError: 'プリンターエラー', lowFilamentLabel: 'フィラメント残量低下', maintenanceDue: 'メンテナンス期限', maintenanceDueDescription: 'メンテナンスが必要な場合に通知', amsHumidityHigh: 'AMS湿度高', amsHumidityHighDescription: '通常AMSの湿度がしきい値を超過', amsTemperatureHigh: 'AMS温度高', amsTemperatureHighDescription: '通常AMSの温度がしきい値を超過', amsHtHumidityHigh: 'AMS-HT湿度高', amsHtHumidityHighDescription: 'AMS-HTの湿度がしきい値を超過', amsHtTemperatureHigh: 'AMS-HT温度高', amsHtTemperatureHighDescription: 'AMS-HTの温度がしきい値を超過', // Queue events jobAdded: 'ジョブ追加', jobAddedDescription: 'キューにジョブが追加されました', jobAssigned: 'ジョブ割り当て', jobAssignedDescription: 'モデルベースのジョブがプリンターに割り当てられました', jobStarted: 'ジョブ開始', jobStartedDescription: 'キュージョブの印刷が開始されました', jobWaiting: 'ジョブ待機中', jobWaitingDescription: 'フィラメントまたはプリンター待ちのジョブ', jobSkipped: 'ジョブスキップ', jobSkippedDescription: 'ジョブがスキップされました(前のジョブが失敗)', jobFailed: 'ジョブ失敗', jobFailedDescription: 'ジョブの開始に失敗しました', queueComplete: 'キュー完了', queueCompleteDescription: 'すべてのキュージョブが完了しました', // Quiet hours quietHours: '静音時間', noNotificationsDuring: 'この時間帯は通知を送信しません', editProviderToChangeQuietHours: 'プロバイダーを編集して静音時間を変更', // Daily digest dailyDigest: 'デイリーダイジェスト', batchNotifications: '通知をまとめて1日のサマリーとして送信', sendAt: '{{time}}に送信', editProviderToChangeDigestTime: 'プロバイダーを編集してダイジェスト時刻を変更', // Actions edit: '編集', deleteProvider: '通知プロバイダーを削除', deleteConfirm: '"{{name}}"を削除してもよろしいですか?この操作は取り消せません。', delete: '削除', // AddNotificationModal addTitle: '通知プロバイダーを追加', editTitle: '通知プロバイダーを編集', nameLabel: '名前 *', namePlaceholder: 'マイ通知', providerTypeLabel: 'プロバイダータイプ *', configuration: '設定', testConfiguration: '設定をテスト', printerFilter: 'プリンターフィルター', onlyFromPrinter: 'このプリンターからのイベントのみ通知を送信', quietHoursDnd: '静音時間(おやすみモード)', quietStart: '開始', quietEnd: '終了', dailyDigestLabel: 'デイリーダイジェスト', sendDigestAt: 'ダイジェスト送信時刻', digestCollected: 'イベントが収集され、この時刻にまとめて送信されます', notificationEvents: '通知イベント', progressPercent: '(25%、50%、75%)', bedCooledAfterPrint: '(印刷完了後)', // Per-event ntfy priority (#990) eventPriority: { sectionTitle: 'ntfy 優先度', helpNtfy: '有効な各イベントに優先度を選択してください。ntfy はこれを使って通知の挙動(音、表示、プッシュ動作)を切り替えます。ここで設定していないレベルは ntfy サーバーのデフォルトを使用します。', min: '最小', low: '低', default: 'デフォルト', high: '高', urgent: '緊急', }, cancel: 'キャンセル', save: '保存', add: '追加', nameRequired: '名前は必須です', fieldRequired: '{{field}}は必須です', // Config field labels phoneNumber: '電話番号', apiKey: 'APIキー', serverUrl: 'サーバーURL', topic: 'トピック', authToken: '認証トークン', userKey: 'ユーザーキー', appToken: 'アプリトークン', priority: '優先度', botToken: 'ボットトークン', chatId: 'チャットID', smtpServer: 'SMTPサーバー', smtpPort: 'SMTPポート', security: 'セキュリティ', authentication: '認証', username: 'ユーザー名', password: 'パスワード', fromEmail: '送信元メール', toEmail: '宛先メール', webhookUrl: 'Webhook URL', payloadFormat: 'ペイロード形式', authorization: '認可', titleFieldName: 'タイトルフィールド名', messageFieldName: 'メッセージフィールド名', // NotificationTemplateEditor editTemplate: 'テンプレートを編集: {{name}}', titleLabel: 'タイトル', bodyLabel: '本文', titlePlaceholder: '通知タイトル...', bodyPlaceholder: '通知本文...', availableVariables: '利用可能な変数', clickToInsert: 'クリックして本文のカーソル位置に挿入', livePreview: 'ライブプレビュー', hide: '非表示', show: '表示', loadingPreview: 'プレビューを読み込み中...', enterTemplateContent: 'テンプレートの内容を入力するとプレビューが表示されます', titlePreview: 'タイトル:', bodyPreview: '本文:', resetToDefault: 'デフォルトにリセット', titleRequired: 'タイトルは必須です', bodyRequired: '本文は必須です', // NotificationLogViewer notificationLog: '通知ログ', showFailedOnly: '失敗のみ', last24Hours: '過去24時間', last7Days: '過去7日間', last30Days: '過去30日間', last90Days: '過去90日間', justNow: 'たった今', noFailedNotifications: '失敗した通知はありません', noNotificationsLogged: '記録された通知はありません', unknownProvider: '不明なプロバイダー', logTitle: 'タイトル', logMessage: 'メッセージ', logError: 'エラー', logProvider: 'プロバイダー: {{type}}', logTime: '時刻: {{time}}', refresh: '更新', clearOld: '古いものを削除', statsSummary: '過去{{days}}日間:', statsNotifications: '通知', statsSent: '{{count}}件送信', statsFailed: '{{count}}件失敗', // Event type labels (for log viewer) eventTypes: { print_start: '印刷開始', print_complete: '印刷完了', print_failed: '印刷失敗', print_stopped: '印刷停止', print_progress: '進捗', printer_offline: 'プリンターオフライン', printer_error: 'プリンターエラー', filament_low: 'フィラメント残量低下', maintenance_due: 'メンテナンス期限', test: 'テスト', }, // User email notification preferences userEmail: { title: '通知', emailNotifications: 'メール通知', emailNotificationsDesc: '自分の印刷ジョブに対してメール通知を受け取ります。メールは高度な認証で設定されたSMTP設定を使用して送信されます。', sendingTo: '通知の送信先', noEmailWarning: 'アカウントにメールアドレスが設定されていません。管理者に連絡して追加してもらってください。', printJobNotifications: '印刷ジョブ通知', printJobNotificationsDesc: '送信した印刷ジョブのどのイベントでメール通知を送るかを選択します。', printJobStarts: '印刷ジョブ開始', printJobStartsDesc: '印刷ジョブが開始されたときに通知を受け取る。', printJobFinishes: '印刷ジョブ完了', printJobFinishesDesc: '印刷ジョブが正常に完了したときに通知を受け取る。', printErrors: '印刷エラー', printErrorsDesc: '印刷ジョブが失敗またはエラーが発生したときに通知を受け取る。', printJobStops: '印刷ジョブ停止', printJobStopsDesc: '印刷ジョブがキャンセルまたは停止されたときに通知を受け取る。', saveSuccess: '通知設定を保存しました。', saveError: '通知設定の保存に失敗しました。', }, }, // Rich Text Editor richTextEditor: { bold: '太字', italic: '斜体', underline: '下線', bulletList: '箇条書きリスト', numberedList: '番号付きリスト', alignLeft: '左揃え', alignCenter: '中央揃え', alignRight: '右揃え', addLink: 'リンクを追加', removeLink: 'リンクを削除', }, // External Links externalLinks: { noLinksConfigured: '外部リンクが設定されていません', deleteLink: 'リンクを削除', removeCustomIcon: 'カスタムアイコンを削除', openInNewTab: '新しいタブで開く', placeholders: { linkName: 'マイリンク', }, }, // Keyboard Shortcuts Modal keyboardShortcuts: { title: 'キーボードショートカット', navigation: 'ナビゲーション', archivesSection: 'アーカイブ', kProfilesSection: 'Kプロファイル', generalSection: '全般', shortcuts: { goToPrinters: 'プリンターへ移動', goToArchives: 'アーカイブへ移動', goToQueue: 'キューへ移動', goToStats: '統計へ移動', goToProfiles: 'クラウドプロファイルへ移動', goToSettings: '設定へ移動', focusSearch: '検索にフォーカス', openUploadModal: 'アップロードモーダルを開く', clearSelection: '選択をクリア / 入力をぼかす', contextMenu: 'カードのコンテキストメニュー', refreshProfiles: 'プロファイルを更新', newProfile: '新しいプロファイル', exitSelectionMode: '選択モードを終了', showHelp: 'このヘルプを表示', }, footer: 'Escキーを押すか外側をクリックして閉じます', }, // Notification Log notificationLog: { title: '通知ログ', events: { printStarted: '印刷開始', printComplete: '印刷完了', printFailed: '印刷失敗', printStopped: '印刷停止', progress: '進捗', printerOffline: 'プリンターオフライン', printerError: 'プリンターエラー', lowFilament: 'フィラメント残量低下', maintenanceDue: 'メンテナンス期限', test: 'テスト', }, timeAgo: { justNow: 'たった今', minutesAgo: '{{minutes}}分前', hoursAgo: '{{hours}}時間前', }, }, // Restore/Backup Modal restoreBackup: { title: 'バックアップを復元', restoring: '復元中...', restoreComplete: '復元完了', restoreFailed: '復元失敗', importSettings: 'バックアップファイルから設定をインポート', pleaseWait: 'データの復元中です。しばらくお待ちください', clickToSelect: 'クリックしてバックアップファイルを選択(.jsonまたは.zip)', howDuplicateHandling: '重複の処理方法:', categories: { printers: 'プリンター', smartPlugs: 'スマートプラグ', notificationProviders: '通知プロバイダー', filaments: 'フィラメント', archives: 'アーカイブ', pendingUploads: '保留中のアップロード', settingsTemplates: '設定とテンプレート', }, matchingInfo: { printers: 'シリアル番号で照合', smartPlugs: 'IPアドレスで照合', notificationProviders: '名前で照合', filaments: '名前+タイプ+ブランドで照合', archives: 'コンテンツハッシュで照合', pendingUploads: 'ファイル名で照合', settingsTemplates: '常に上書き', }, replaceExisting: '既存データを置き換え', keepExisting: '既存データを保持', replaceDescription: '既に存在するアイテムをバックアップデータで上書き', keepDescription: 'まだ存在しないアイテムのみを復元', caution: '注意:', cautionText: '上書きすると現在の構成がバックアップデータに置き換えられます。セキュリティ上の理由から、プリンターのアクセスコードは上書きされません。', itemsRestored: '復元されたアイテム', itemsSkipped: 'スキップされたアイテム', restored: '復元済み', skipped: 'スキップ(既に存在)', filesLabel: 'ファイル(3MF、サムネイルなど)', newApiKeysGenerated: '新しいAPIキーが生成されました', newApiKeysWarning: 'これらのキーは一度だけ表示されます。今すぐコピーしてください!', processingBackup: 'バックアップファイルを処理中...', noDataFound: 'バックアップファイルに復元するデータが見つかりませんでした。', failedToRestore: 'バックアップの復元に失敗しました。ファイル形式を確認してください。', }, // Backup Export Modal backupExport: { title: 'バックアップをエクスポート', selectData: '含めるデータを選択', selectAll: 'すべて選択', selectNone: 'なし', categoryDescriptions: { settings: '言語、テーマ、更新設定', notifications: 'ntfy、Pushover、Discordなど', templates: 'カスタムメッセージテンプレート', smartPlugs: 'Tasmotaプラグ設定', externalLinks: 'サイドバーの外部サービスへのリンク', printers: 'プリンター情報(アクセスコード除外)', plateDetection: '空プレート参照画像', filaments: 'フィラメントの種類とコスト', maintenance: 'カスタムメンテナンススケジュール', archives: 'すべての印刷データ+ファイル(3MF、サムネイル、写真)', projects: 'プロジェクト、BOMアイテム、添付ファイル', pendingUploads: '仮想プリンターアップロード待機中', apiKeys: 'Webhook APIキー(インポート時に新しいキーが生成されます)', }, requiresPrinters: 'プリンターを選択する必要があります', zipFileWarning: 'ZIPファイルが作成されます。', zipFileDescription: 'すべての3MFファイル、サムネイル、タイムラプス、写真が含まれます。これには時間がかかり、大きなファイルになる可能性があります。', includeAccessCodes: 'アクセスコードを含める', includeAccessCodesDescription: '別のマシンへの転送用', includeAccessCodesWarning: 'アクセスコードはプレーンテキストで含まれます。このバックアップファイルを安全に保管してください!', categoriesSelected: '{{selectedCount}}カテゴリー選択済み', }, // Pending Uploads Panel pendingUploads: { placeholders: { notes: 'この印刷に関するメモを追加...', }, discardUpload: 'アップロードを破棄', archiveAllUploads: 'すべてのアップロードをアーカイブ', discardAllUploads: 'すべてのアップロードを破棄', archive: 'アーカイブ', timeAgo: { justNow: 'たった今', minutesAgo: '{{minutes}}分前', hoursAgo: '{{hours}}時間前', daysAgo: '{{days}}日前', }, }, // API Browser apiBrowser: { placeholders: { requestBody: 'JSONリクエストボディ...', searchEndpoints: 'エンドポイントを検索...', }, }, // Configure AMS Slot Modal configureAmsSlot: { title: 'AMSスロットの設定', slotConfigured: 'スロットを設定しました!', configuringSlot: 'スロットを設定中:', slotLabel: '{{ams}} スロット {{slot}}', searchPresets: 'プリセットを検索...', colorPlaceholder: '色名またはHex(例: 茶色、FF8800)', clearCustomColor: 'カスタム色をクリア', noCloudPresets: 'クラウドプリセットがありません。Bambu Cloudにログインして同期してください。', noPresetsAvailable: 'プリセットがありません。Bambu Cloudにログインするか、ローカルプロファイルをインポートしてください。', noMatchingPresets: '一致するプリセットが見つかりません。', custom: 'カスタム', builtin: '内蔵', settingsSentToPrinter: '設定をプリンターに送信しました', filamentProfile: 'フィラメントプロファイル', kProfileLabel: 'Kプロファイル(Pressure Advance)', filteringFor: 'フィルター中: {{material}}', noKProfile: 'Kプロファイルなし(デフォルト0.020を使用)', noMatchingKProfiles: '一致するKプロファイルが見つかりません。デフォルトK=0.020が使用されます。', selectFilamentFirst: 'まずフィラメントプロファイルを選択してください', kFromCalibration: 'K={{value}}(プリンターキャリブレーションから)', customColorLabel: 'カスタム色(オプション)', presetColors: '{{name}}の色:', showLessColors: '色を減らす', showMoreColors: '色をもっと表示', clear: 'クリア', hexLabel: 'Hex: #{{hex}}', resetting: 'リセット中...', resetSlot: 'スロットをリセット', cancel: 'キャンセル', configuring: '設定中...', configureSlot: 'スロットを設定', }, // Git Backup Settings githubBackup: { title: 'Gitバックアップ', history: '履歴', downloadBackup: 'バックアップをダウンロード', restoreBackup: 'バックアップを復元', noBackupsYet: 'バックアップはまだありません', }, // Email Settings emailSettings: { placeholders: { fromName: 'BamBuddy', }, }, // Tag Management Modal tagManagement: { searchTags: 'タグを検索...', renameTag: 'タグ名を変更', deleteTag: 'タグを削除', }, // Notification Template Editor notificationTemplates: { placeholders: { title: '通知タイトル...', body: '通知本文...', }, }, // Batch Tag Modal batchTag: { placeholders: { newTag: '新しいタグを入力...', }, }, // Photo Gallery Modal photoGallery: { deletePhoto: '写真を削除', }, // Filament Hover Card filamentHoverCard: { copySpoolUuid: 'スプールUUIDをコピー', }, // K Profiles View kProfilesView: { hasNote: 'メモあり', copyProfile: 'プロファイルをコピー', }, // Layout/Navigation layout: { openMenu: 'メニューを開く', noPermissionSystemInfo: 'システム情報を表示する権限がありません', }, // Dashboard dashboard: { dragToReorder: 'ドラッグして並べ替え', hideWidget: 'ウィジェットを非表示', }, // Notification Provider Card notificationProviderCard: { deleteNotificationProvider: '通知プロバイダーを削除', }, // File Manager Modal fileManagerModal: { closeFileManager: 'ファイルマネージャーを閉じる', sortFiles: 'ファイルを並べ替え', goToParentFolder: '親フォルダーへ移動', threeView: '3Dビュー', }, // Embedded Camera Viewer embeddedCameraViewer: { refreshStream: 'ストリームを更新', close: '閉じる', zoomOut: 'ズームアウト', resetZoom: 'ズームをリセット', zoomIn: 'ズームイン', dragToResize: 'ドラッグしてサイズ変更', }, // Timelapse Viewer timelapseViewer: { skipBack5s: '5秒戻る', skipForward5s: '5秒進む', }, // Notification Providers notificationProviders: { descriptions: { email: 'SMTP電子メール通知', telegram: 'Telegramボット経由の通知', discord: 'Webhookを介してDiscordチャンネルに送信', ntfy: '無料でセルフホスト可能なプッシュ通知', pushover: 'シンプルで信頼性の高いプッシュ通知', callmebot: 'CallMeBot経由の無料WhatsApp通知', webhook: '任意のURLへのジェネリックHTTP POST', }, }, // Log Viewer logViewer: { searchPlaceholder: 'メッセージまたはロガー名を検索...', noLogEntries: 'ログエントリが見つかりません', }, // Switchbar Popover switchbarPopover: { noSwitchesInSwitchbar: 'スイッチバーにスイッチがありません', }, // Project Page Modal projectPageModal: { placeholders: { title: 'タイトル', designer: 'デザイナー', license: 'ライセンス', description: '説明を入力...', profileTitle: 'プロファイルタイトル', profileDescription: 'プロファイルの説明...', }, }, // Spoolman Settings spoolmanSettings: {}, // Time time: { unknown: '-', waiting: '待機中', justNow: 'たった今', now: '今すぐ', minsAgo: '{{count}}分前', inMins: 'あと{{count}}分', hoursAgo: '{{count}}時間前', inHours: 'あと{{count}}時間', daysAgo: '{{count}}日前', inDays: 'あと{{count}}日', }, // SpoolBuddy Kiosk spoolbuddy: { nav: { dashboard: 'ダッシュボード', ams: 'AMS', inventory: 'インベントリ', writeTag: '書込み', settings: '設定', }, status: { nfcReady: 'NFC準備完了', nfcOff: 'NFCオフ', offline: 'オフライン', online: 'オンライン', noPrinters: 'プリンターなし', deviceOffline: 'デバイスオフライン', waitingConnection: 'デバイス接続を待っています...', systemReady: 'システム準備完了', status: 'ステータス', }, dashboard: { readyToScan: 'スキャン準備完了', idleMessage: 'スプールを計量台に置いて識別します', nfcHint: 'NFCタグは自動的に読み取られます', device: 'デバイス', syncWeight: '重量同期', weightSynced: '同期完了!', unknownTag: '不明なタグ', newTag: '新しいタグを検出', onScale: '計量中', linkSpool: 'スプールにリンク', linkTagTitle: 'タグをスプールにリンク', linkTag: 'タグをリンク', selectSpool: 'このタグにリンクするスプールを選択:', noUntagged: 'タグなしのスプールが見つかりません', tagDetected: 'タグ検出', noTag: 'タグなし', tagId: 'タグ', grossWeight: '総重量', spoolSize: 'スプールサイズ', close: '閉じる', currentSpool: '現在のスプール', plateReady: 'プレート準備完了: {{name}}', plateReadyLabel: '片付け待ちプレート', plateClearAction: '片付け', plateClearedToast: 'プレートを片付け済みにしました', plateClearFailed: 'プレートを片付け済みにできませんでした', }, modal: { spoolDetected: 'スプール検出', assignToAms: 'AMSに割り当て', syncWeight: '重量同期', weightSynced: '同期完了!', syncing: '同期中...', newTagDetected: '新しいタグを検出', addToInventory: 'インベントリに追加', assignToAmsTitle: 'AMSに割り当て', selectSlot: 'スロットを選択', assign: '割り当て', assigning: '割り当て中...', assignSuccess: '割り当て完了!', assignError: 'スプールの割り当てに失敗しました。再試行してください。', noPrinterSelected: 'プリンターを選択...', noAmsDetected: 'このプリンターにAMSが検出されません', slot: 'スロット', }, weight: { noReading: '読み取りなし', stable: '安定', measuring: '計測中...', tare: '風袋引き', calibrate: 'キャリブレーション', }, spool: { remaining: '残量', material: '素材', brand: 'ブランド', color: '色', coreWeight: 'コア', labelWeight: 'ラベル', scaleWeight: '計量', netWeight: '正味', lastUsed: '最終使用', }, ams: { noData: 'AMSが検出されません', connectAms: 'AMSを接続してスロットを表示', noPrinter: 'プリンター未選択', selectPrinter: '上部バーからプリンターを選択', printerDisconnected: 'プリンター切断', humidity: '湿度', level: 'レベル', active: 'アクティブ', slot: 'スロット', empty: '空', }, inventory: { search: 'スプールを検索...', empty: 'インベントリにスプールがありません', noResults: '一致するスプールがありません', spools: 'スプール', addSpool: 'スプール追加', }, settings: { // Tabs tabDevice: 'デバイス', tabDisplay: 'ディスプレイ', tabScale: '計量', tabUpdates: 'アップデート', // Device tab nfcReader: 'NFCリーダー', type: 'タイプ', connection: '接続', notConnected: 'N/A', deviceInfo: 'デバイス情報', hostname: 'ホスト', uptime: '稼働時間', // Display tab brightness: '明るさ', saved: '保存済み', noBacklight: 'DSIバックライトが検出されませんでした。明るさ制御にはDSIディスプレイが必要です。', screenBlank: '画面オフタイムアウト', screenBlankDesc: '操作がないと画面がオフになります。タッチで復帰。', displayNote: '明るさはソフトウェアフィルターとして適用されます。', // Scale tab scaleCalibration: '計量キャリブレーション', currentWeight: '現在の重量', tareOffset: '風袋', calFactor: '係数', knownWeight: '既知の重量', calStep1: '計量台からすべてのアイテムを取り除き、ゼロ設定を押してください。', calStep2: '既知の重量を計量台に置いてください。', setZero: 'ゼロ設定', calibrateNow: 'キャリブレーション', calibrated: 'キャリブレーション済み', tareSet: '風袋コマンドを送信しました。デバイスを待っています...', tareFailed: '風袋コマンドの送信に失敗しました', zeroSet: 'ゼロ点を設定しました。既知の重量を計量台に置いてください。', calibrationDone: 'キャリブレーション完了!', calibrationFailed: 'キャリブレーションに失敗しました', lastCalibrated: '最終キャリブレーション', stable: '安定', settling: '安定化中...', firmware: 'ファームウェア', scale: '計量', noDevice: 'SpoolBuddyデバイスが見つかりません', // Updates tab daemonVersion: 'デーモンバージョン', currentVersion: '現在', versionPending: 'デーモンを待っています...', checking: '確認中...', checkUpdates: 'アップデートを確認', updateAvailable: 'アップデートあり', updateInstructions: 'SSH経由で更新:SpoolBuddyインストールスクリプトを実行してください。', upToDate: '最新です', includeBeta: 'ベータ版を含む', systemConfig: 'バックエンドと認証', backendUrl: 'BambuddyバックエンドURL', apiToken: 'APIトークン', apiTokenPlaceholder: 'APIトークンを入力', saveConfig: '設定を保存', systemQueued: '設定をキューに追加しました。', systemFieldsRequired: 'バックエンドURLは必須です。', nfcDiagnostic: 'NFC診断', scaleDiagnostic: 'スケール診断', readTagDiagnostic: 'タグ読み取り診断', testNfc: 'リーダーをテスト', testScale: '精度をテスト', testReadTag: 'タグを読み取り', }, writeTag: { tabExisting: '既存のスプール', tabNew: '新規スプール', tabReplace: 'タグ交換', searchPlaceholder: '素材、色、ブランドで検索...', noUntaggedSpools: 'タグなしのスプールがありません', noTaggedSpools: 'タグ付きのスプールがありません', selectSpool: 'スプールを選択し、NTAGをリーダーに置いてください', placeTag: 'NTAGをリーダーに置いてください', tagReady: 'タグ検出 — 書込み準備完了', writeTag: 'タグ書込み', replaceTag: 'タグ交換', writing: 'タグ書込み中...', waiting: 'SpoolBuddyを待機中...', writeSuccess: 'タグの書込みが完了しました!', writeFailed: '書込み失敗', queueFailed: '書込みコマンドのキューに失敗しました', tryAgain: '再試行', cancel: 'キャンセル', replaceWarning: '古いタグのリンクが解除され、新しいタグに置き換わります。', deviceOffline: 'SpoolBuddyはオフラインです', material: '素材', colorName: '色名', color: '色', brand: 'ブランド', weight: '重量 (g)', createSpool: 'スプール作成', creating: '作成中...', spoolCreated: 'スプール作成完了!書込み準備ができました。', createFailed: 'スプールの作成に失敗しました', }, quickMenu: { printerPower: 'プリンター電源', systemControls: 'システム', restartDaemon: 'デーモン再起動', restartBrowser: 'ブラウザ再起動', reboot: '再起動', shutdown: 'シャットダウン', swipeToClose: '下にスワイプして閉じる', confirmTitle: '確認', confirmShutdown: 'SpoolBuddyをシャットダウンしますか?再起動するには物理的なアクセスが必要です。', confirmReboot: 'SpoolBuddyを再起動しますか?', confirmRestartDaemon: 'SpoolBuddyデーモンを再起動しますか?NFCとスケールが一時的に使用できなくなります。', confirmRestartBrowser: 'キオスクブラウザを再起動しますか?画面が一時的に暗くなります。', confirm: '確認', confirmPlugOn: '{{name}}をオンにしますか?', confirmPlugOff: '{{name}}をオフにしますか?', turnOn: 'オン', turnOff: 'オフ', }, }, bugReport: { title: 'バグを報告', description: '説明', descriptionPlaceholder: '何が問題でしたか?問題を説明してください...', email: 'メールアドレス(任意)', emailPlaceholder: 'your@email.com', emailPrivacy: '入力された場合、メールアドレスはGitHub Issueの折りたたみセクションに含まれ、メンテナーがフォローアップできるようになります。', screenshot: 'スクリーンショット', uploadOrPaste: '画像をアップロード、貼り付け、またはドラッグ', dataCollectedSummary: 'レポートに含まれるデータは?', dataIncluded: '含まれるもの:', dataIncludedList: 'アプリバージョン、OS、アーキテクチャ、Pythonバージョン、データベース統計(件数のみ)、プリンターモデル、ノズル数、ファームウェアバージョン、接続状態、統合状態(Spoolman、MQTT、HA)、非機密設定、ネットワークインターフェース数、Docker詳細、依存関係バージョン。', dataNeverIncluded: '含まれないもの:', dataNeverIncludedList: 'プリンター名、シリアル番号、アクセスコード、パスワード、IPアドレス、メールアドレス、APIキー、トークン、Webhook URL、ホスト名、ユーザー名。', submit: '送信', startLogging: 'デバッグログ開始', stepEnableLogging: 'デバッグログ有効', stepReproduce: '問題を再現してください', stepStopLogging: '停止してレポート送信', stopAndSubmit: '停止して送信', maxDuration: '{{minutes}}分後に自動停止', stoppingLogs: 'ログ収集・送信中...', submitting: 'バグレポートを送信中...', submitSuccess: 'バグレポートが正常に送信されました!', submitFailed: 'バグレポートの送信に失敗しました', thankYou: 'ありがとうございます!', submitted: 'バグレポートが送信されました。', viewIssue: 'Issueを表示', unexpectedError: '予期しないエラーが発生しました', }, failureDetection: { title: 'AI 失敗検出', description: 'セルフホストされた Obico ML API で印刷を監視し、検出された失敗に自動的に対応します。', mlUrl: 'Obico ML API の URL', mlUrlHint: 'セルフホストした Obico ml_api コンテナのベース URL (例: http://192.168.1.10:3333)。', test: 'テスト', testSuccess: 'ML API に接続でき、正常です。', testFailed: 'ML API に接続できませんでした。', sensitivity: '感度', sensitivityLow: '低(誤検出が少ない)', sensitivityMedium: '中(バランス型)', sensitivityHigh: '高(早期検出、誤検出が増加)', sensitivityHint: '警告と失敗をトリガーする信頼度のしきい値を調整します。', action: '失敗検出時の動作', actionNotify: '通知のみ', actionPause: '印刷を一時停止', actionPauseOff: '一時停止して電源を切る', pollInterval: 'ポーリング間隔(秒)', pollIntervalHint: '印刷中に各プリンターをチェックする頻度。最小 5 秒、最大 120 秒。', externalUrlMissing: 'External URL is not set.', externalUrlHint: 'The ML API fetches the camera snapshot by URL. Set the External URL in General settings so the ML API container can reach Bambuddy.', perPrinterTitle: '監視対象プリンター', perPrinterHint: '検出サービスが監視するプリンターを選択します。', monitorAll: '接続されているすべてのプリンターを監視', statusTitle: 'ステータス', serviceRunning: 'サービス稼働中', thresholds: '低 / 高しきい値', activePrinters: 'アクティブな印刷', noActivePrints: '現在、実行中の印刷はありません。', historyTitle: '最近の検出', noHistory: 'まだ検出はありません。', }, makerworld: { title: 'MakerWorld', description: 'MakerWorld モデルの URL を貼り付けると、Bambu Handy アプリを開かなくても Bambuddy から直接インポート・印刷できます。', pasteUrlHeader: 'MakerWorld からインポート', pasteUrlPlaceholder: 'https://makerworld.com/en/models/… または任意の MakerWorld リンク', resolveButton: '読み込む', signInRequiredTitle: 'ダウンロードには Bambu Cloud へのサインインが必要です', signInRequiredBody: 'モデルの詳細は匿名で閲覧できますが、3MF ファイルをダウンロードするには Bambu Cloud アカウントが必要です。', openCloudSettings: 'Cloud 設定を開く', untitledModel: '無題のモデル', byCreator: '作成者: {{name}}', downloadsCount: 'ダウンロード数: {{count}}', licensePrefix: 'ライセンス', alreadyImported: 'ライブラリに登録済み', openOnMakerworld: 'MakerWorld で開く', alreadyInLibrary: 'このモデルはすでにライブラリにあります — ファイルマネージャー → MakerWorld で確認できます', importSuccess: '{{filename}} をインポートしました — ファイルマネージャー → MakerWorld に保存済み', platesHeader: 'プレート ({{count}})', plateDefaultName: 'プレート {{n}}', materialCount: 'フィラメント {{count}} 本', amsRequired: 'AMS が必要', slicedFor: 'Sliced for {{printer}}', alsoCompatible: 'Also marked compatible: {{printers}}', importToLibrary: '保存', sliceIn: '保存して {{slicer}} でスライス', disclaimer: 'MakerWorld 連携はコミュニティで文書化された API エンドポイントを使用しています。Bambuddy は MakerWorld または Bambu Lab との提携・承認関係はありません。', lastImportSuccess: 'ライブラリにインポートしました', lastImportAlreadyInLibrary: '既にライブラリに存在します', viewInLibrary: 'ファイルマネージャーで表示', openInBambuStudio: 'Bambu Studio で開く', openInOrcaSlicer: 'OrcaSlicer で開く', importTo: 'ファイルマネージャーへのインポート先', recentImportsHeader: '最近のインポート', phaseResolving: '解決中', phaseDownloading: 'ダウンロード中', folderAuto: 'MakerWorld (デフォルト)', importAll: 'すべてインポート', importAllProgress: 'インポート中 {{current}}/{{total}}', openGallery: '画像ギャラリーを開く', galleryPrev: '前の画像', galleryNext: '次の画像', deleteImport: 'ライブラリから削除', importDeleting: '削除中…', importDeleted: 'ライブラリから削除しました', confirmDelete: '{{filename}} をライブラリから削除しますか?ローカルファイルは削除されますが、MakerWorld から再インポートできます。', errors: { resolveFailed: 'この MakerWorld URL を解決できませんでした。', downloadFailed: 'ダウンロードに失敗しました。もう一度お試しください。', deleteFailed: 'ライブラリからファイルを削除できませんでした。', }, }, libraryTrash: { title: 'ゴミ箱', headerButton: 'ゴミ箱', headerTooltip: 'ゴミ箱に移動したファイルを表示', backToFiles: 'ファイルマネージャーに戻る', subtitleAdmin: '削除されたファイルは {{days}} 日間ゴミ箱に残り、その後自動的に削除されます。このビューには全ユーザーのゴミ箱が表示されます。', subtitleUser: '削除されたファイルは {{days}} 日間ゴミ箱に残り、その後自動的に削除されます。', loading: 'ゴミ箱を読み込み中…', loadError: 'ゴミ箱を読み込めませんでした。', empty: 'ゴミ箱は空です。', summary: '{{count}} 件 · {{size}}', emptyTrash: 'ゴミ箱を空にする', restore: '復元', purgeNow: '今すぐ削除', autoPurgeIn: '{{when}} に自動削除', days: '日', retentionLabel: '自動削除までの期間', selectAll: 'すべて選択', selectOne: '{{filename}} を選択', selectionCount: '{{count}} 件選択中', bulkRestore: '選択したものを復元', bulkPurge: '選択したものを削除', col: { filename: 'ファイル', folder: 'フォルダ', size: 'サイズ', deleted: 'ゴミ箱に移動', autoPurge: '自動削除', owner: '所有者', actions: '操作', }, confirm: { purgeTitle: '完全に削除しますか?', purgeBody: '{{filename}} はディスクから削除され、復元できません。', emptyTitle: 'ゴミ箱を空にしますか?', emptyBody: '{{count}} 件のファイルすべてがディスクから削除されます。この操作は取り消せません。', bulkPurgeTitle: '選択したファイルを完全に削除しますか?', bulkPurgeBody: '選択した {{count}} 件のファイルがディスクから削除され、復元できません。', cta: '完全に削除', }, toast: { restored: 'ファイルを復元しました。', restoreFailed: 'ファイルを復元できませんでした。', purged: 'ファイルを完全に削除しました。', purgeFailed: 'ファイルを削除できませんでした。', emptied: 'ゴミ箱から {{count}} 件のファイルを削除しました。', emptyFailed: 'ゴミ箱を空にできませんでした。', retentionSaved: '自動削除を {{days}} 日に設定しました。', retentionFailed: '保持期間の設定を保存できませんでした。', bulkRestored: '{{count}} 件のファイルを復元しました。', bulkPurged: '{{count}} 件のファイルを削除しました。', }, }, libraryPurge: { title: '古いファイルを一括削除', headerButton: '古いファイル削除', headerTooltip: '古いファイルをまとめてゴミ箱に移動', description: '指定した期間より古いファイルはゴミ箱に移動されます。外部フォルダはスキップされます。自動削除までの間、ゴミ箱から復元できます。', ageLabel: '次より古いファイルを移動', days: '日', includeNeverPrinted: '一度も印刷していないファイルも含める', effectsTitle: 'What happens when you click Purge', effect1: 'Matching files are moved to Trash — they are not deleted from disk yet.', effect2: 'You can restore them from Trash at any time until the retention window expires.', effect3: 'After retention, the trash sweeper permanently removes them from disk.', effect4: 'Files in external (linked) folders are skipped — Bambuddy never deletes bytes it does not own.', previewLoading: '対象ファイル数を確認中…', previewFailed: 'プレビューを取得できませんでした。', previewSummary: '{{count}} 件 · {{size}} がゴミ箱に移動されます', andMore: '…ほか {{count}} 件', warning: 'ファイルはソフト削除されます — 保持期間が終了するまでゴミ箱から復元できます。', confirmCta: '{{count}} 件をゴミ箱へ移動', purging: 'ゴミ箱へ移動中…', toast: { success: '{{count}} 件のファイルをゴミ箱に移動しました。', failed: 'ファイルを削除できませんでした。', }, }, libraryAutoPurge: { enableLabel: '古いファイルを自動で一括削除', enableDescription: '管理者の一括削除を 1 日 1 回実行します。ファイルはまずゴミ箱に移動され、すぐには削除されません。', ageLabel: '次より古いファイルを自動削除', ageDescription: '最短 7 日、最長 10 年。手動の「古いファイル削除」ボタンと同じ期間ルールを使用します。', days: '日', includeNeverPrinted: '一度も印刷していないファイルも含める', saveFailed: '自動削除の設定を保存できませんでした。', }, archivePurge: { headerButton: 'Purge old', headerTooltip: 'Bulk-delete old archives', title: 'Purge old archives', description: 'Clear out old print history. Each archive is aged by its most recent print completion — reprinting an archive refreshes its age, so active work is never purged.', ageLabel: 'Delete archives not printed in the last', days: 'days', effectsTitle: 'What happens when you click Purge', effect1: 'Each matching archive is permanently removed from the database.', effect2: 'The 3MF, thumbnail, timelapse, source 3MF, F3D design file, and photo folder are all deleted from disk.', effect3: 'There is no trash bin for archives — deletion is immediate and cannot be undone.', effect4: 'Reprinting an archive refreshes its age clock, so archives you still use are safe.', previewLoading: 'Checking how many archives match…', previewFailed: 'Could not preview the purge.', previewSummary: '{{count}} archives · {{size}} would be deleted', andMore: '…and {{count}} more', warning: 'This is permanent. Download or favourite anything you want to keep before continuing.', confirmCta: 'Delete {{count}} archive(s)', purging: 'Deleting…', toast: { success: 'Deleted {{count}} archive(s).', failed: 'Could not purge archives.', }, }, archiveAutoPurge: { enableLabel: 'Auto-purge old archives', enableDescription: 'Once per day, permanently deletes archives that have not been printed within the threshold. Reprinting an archive resets the clock. No trash bin — deletion is immediate.', ageLabel: 'Auto-delete archives not printed in the last', ageDescription: 'Minimum 7 days, maximum 10 years. Based on the most recent print completion — reprinting an archive refreshes its age. Deletes the archive, 3MF, thumbnail, timelapse, and photos.', days: 'days', runNow: 'Purge archives now', saveFailed: 'Could not save auto-purge settings.', }, cameraTokens: { title: 'Camera API Tokens', navTitle: 'Camera API tokens', description: 'Long-lived tokens for embedding the camera stream into Home Assistant, Frigate, kiosks, or any other tool that needs a stable URL. Each token is camera-stream-only and can be revoked at any time.', loading: 'Loading…', confirmRevoke: { title: 'Revoke this token?', body: 'Any device using "{{name}}" will lose access immediately. This cannot be undone.', cancel: 'Cancel', confirm: 'Revoke', }, create: { title: 'Create new token', nameLabel: 'Token name', namePlaceholder: 'e.g. Home Assistant', daysLabel: 'Days until expiry', submit: 'Create', hint: 'Maximum lifetime is 365 days. The token value is shown only once on creation — copy it now.', }, created: { title: 'Token created — copy it now', warning: 'This is the only time this token will be visible. After you close this dialog you can never view it again.', copy: 'Copy', dismiss: "I've saved it", }, list: { myTitle: 'My tokens', allTitle: 'All users (admin view)', empty: 'No tokens yet.', name: 'Name', owner: 'Owner', prefix: 'Prefix', created: 'Created', expires: 'Expires', lastUsed: 'Last used', revoke: 'Revoke', expired: 'Expired', }, toast: { created: 'Token created', createFailed: 'Failed to create token', revoked: 'Token revoked', revokeFailed: 'Failed to revoke token', loadFailed: 'Failed to load tokens', copied: 'Copied to clipboard', copyFailed: 'Copy failed — select and copy manually', }, }, };