// SPDX-License-Identifier: AGPL-3.0-only
// Copyright 2026-present the Unsloth AI Inc. team. All rights reserved.
// See /studio/LICENSE.AGPL-3.0

import type { DeepPartialMessageTree } from "../types";
import type { en } from "./en";

export const ja = {
  picker: {
    onDevice: "デバイス上",
    huggingFace: "Hugging Face",
    retry: "再試行",
    loadMore: "さらに読み込む",
    offlineTitle: "オフラインです",
    offlineBody:
      "キャッシュ済みまたはローカルの{noun}を使用するには、「デバイス」に切り替えてください。",
    offlineSwitchDevice: "デバイス",
    searchAriaLabel: "{noun}を検索",
    modelSourceAriaLabel: "モデルのソース",
    hubSectionAriaLabel: "Hub セクション",
    modelDropped: "提供終了",
    modelDroppedByProvider: "{provider} · 提供終了",
    modelDisabled: "無効",
    modelDisabledByProvider: "{provider} · 無効",
    multipleMatches:
      "一致する{noun}が複数あります。リストから1つ選択してください。",
    rateLimitedTitle: "Hugging Face のレート制限に達しました",
    rateLimitedBody: "しばらく待ってから、{noun}の検索を再試行してください。",
    hfToken: {
      label: "HF トークン",
      saved: "保存済み",
      add: "追加",
      savedAriaLabel: "Hugging Face トークンは保存済みです",
      addAriaLabel: "Hugging Face トークンを設定",
      savedHint: "トークンは保存済みです。使用時にアクセス権を確認します。",
      addHint:
        "プライベートまたはアクセス制限付きリポジトリを利用するには、トークンを設定してください。",
    },
  },
  common: {
    cancel: "キャンセル",
    close: "閉じる",
    delete: "削除",
    done: "完了",
    error: "エラー",
    export: "エクスポート",
    help: "ヘルプ",
    loading: "読み込み中...",
    new: "新規",
    rename: "名前変更",
    save: "保存",
    saving: "保存中...",
    search: "検索",
    shutdown: "シャットダウン",
  },
  shell: {
    beta: "BETA",
    brand: "unsloth",
    product: "Unsloth",
    accountMenu: "{name} のアカウントメニュー",
    updateAvailable: "アップデートが利用可能です",
    resize: {
      collapse: "クリックで折りたたむ",
      expand: "クリックで展開",
      drag: "ドラッグでサイズ変更",
    },
    aria: {
      home: "Unsloth ホーム",
      closeSidebar: "サイドバーを閉じる",
      openSidebar: "サイドバーを開く",
      resizeSidebar: "サイドバーのサイズ変更または折りたたみ",
      resizeRunSettings: "実行設定のサイズ変更または閉じる",
      openRunSettings: "実行設定を開く",
      chatOptions: "チャットオプション",
      runOptions: "実行オプション",
    },
    navigation: {
      newChat: "新規チャット",
      returnToChat: "チャットに戻る",
      returnToChats: "{count} 件のチャットに戻る",
      chatGenerating: "生成中",
      compare: "比較",
      search: "検索",
      hub: "モデルハブ",
      projects: "プロジェクト",
      train: "トレーニング",
      recipes: "レシピ",
      images: "画像",
      video: "動画",
      audio: "音声",
      trainChecking: "このマシンのトレーニング対応を確認しています...",
      videoChecking: "このマシンの動画生成対応を確認しています...",
      more: "その他",
      customizeSidebar: "サイドバーをカスタマイズ",
      newBadge: "新機能",
      export: "エクスポート",
      recents: "履歴",
      noChatsYet: "チャットがまだありません",
      settings: "設定",
      api: "API",
      lightMode: "ライトモード",
      darkMode: "ダークモード",
      guidedTour: "ガイドツアー",
      help: "ヘルプ",
      logOut: "ログアウト",
      shutdown: "シャットダウン",
    },
    notFound: {
      title: "ページが見つかりません",
      description: "{path} は存在しません。",
      backToChat: "チャットに戻る",
    },
    dialog: {
      deleteChat: {
        title: "チャットの削除",
        description: "チャット「{name}」を削除してもよろしいですか？",
      },
      deleteRun: {
        title: "トレーニング実行の削除",
        description: "トレーニング実行「{name}」を削除してもよろしいですか？",
      },
      renameChat: {
        title: "チャット名の変更",
        placeholder: "チャットのタイトル",
      },
      renameRun: {
        title: "実行名の変更",
        placeholder: "実行名",
      },
    },
    toast: {
      cannotDeleteRunningRun: "実行中のトレーニングは削除できません",
      failedToDeleteChat: "チャットの削除に失敗しました",
      failedToDeleteRun: "実行の削除に失敗しました",
      failedToRenameChat: "チャット名の変更に失敗しました",
      failedToRenameRun: "実行名の変更に失敗しました",
    },
  },
  settings: {
    title: "設定",
    dialog: {
      title: "設定",
      description: "Unsloth の環境設定を管理します。",
      closeAriaLabel: "設定を閉じる",
      searchPlaceholder: "設定を検索…",
      searchNoResults: "設定が見つかりません。",
    },
    tabs: {
      general: "一般",
      profile: "プロフィール",
      appearance: "外観",
      resources: "システム",
      chat: "チャット",
      connections: "接続",
      apiKeys: "API",
      about: "情報",
      voice: "音声",
      data: "データ",
      agents: "エージェント",
      debugging: "ログ",
    },
    debugging: {
      logSection: "ログファイル",
      source: "ログファイル",
      sourceHint: "モデルランナーはそれぞれ独自のログを書き出すため、読み込みや生成の失敗の理由は、サーバーログではなくそちらに記録されていることがよくあります。",
      path: "場所",
      pathCopy: "パスをコピー",
      refreshSection: "更新",
      mode: "モード",
      modeLive: "ライブ",
      modeInterval: "3 秒ごと",
      modeManual: "手動",
      refreshNow: "今すぐ更新",
      privacyNote: "この表示では認証情報をマスクしています。ディスク上のファイルはマスクされません。",
      copyVisible: "表示中のログをコピー",
      empty: "まだ何も記録されていません。",
      disabled: "ファイルへのログ出力は無効です (UNSLOTH_STUDIO_NO_FILE_LOG=1)。",
      missing: "ログファイルが見つかりませんでした。",
      unreadable: "ログファイルを読み取れませんでした。",
      timeout: "ログの取得がタイムアウトしました。サーバーに接続できない可能性があります。",
      droppedNotice: "一部の行がスキップされました。ログの書き込みが読み取りに追いつきませんでした。",
      morePending: "さらに行を読み込み中です。次回の更新時に表示されます。",
      staleSession: "ファイルへのログ出力が無効なため、これは以前のセッションであり更新されません。",
      keywords: "デバッグ ログ エラー クラッシュ トレースバック スタックトレース 診断 障害 調査 debug log logs error",
    },
    voice: {
      title: "音声",
      description: "マイク、音声入力、音声認識、読み上げ",
      dictation: {
        sectionTitle: "音声入力",
        engineLabel: "音声入力エンジン",
        engineBrowser: "ブラウザー",
        engineBrowserDescription:
          "ブラウザーの音声サービスで文字起こしします。STT モデルを使うには「ローカル文字起こし」を選択してください。",
        engineModel: "ローカル文字起こし",
        engineModelDescription:
          "音声認識 (STT) モデルをローカルで実行し、オフラインでも動作します。ダウンロードして読み込むと、一定時間使わなければアンロードされます。",
        sttModelLabel: "音声認識モデル",
        sttModelDescription:
          "ローカルで実行する STT モデルを選択または検索します。",
        sttModelSearchPlaceholder: "モデルを検索",
        sttModelSearching: "Hugging Face を検索中…",
        sttModelValidating: "Whisper との互換性を確認中…",
        sttModelNoResults: "Whisper モデルが見つかりません",
        sttModelInvalid: "このリポジトリは音声入力には使用できません",
        sttModelFailed: "STT モデルを読み込めませんでした",
        sttModelUnsupported: "このブラウザーは録音に対応していません",
        sttChecking: "確認中…",
        sttOnDemand: "ダウンロード済み",
        sttLoadingModel: "モデルを読み込み中…",
        sttReady: "{device} に読み込み済み",
        sttLoaded: "読み込み済み",
        sttUnavailable:
          "このサーバーにはインストールされていません。ローカルの音声入力を有効にするには `unsloth studio update` を実行してください。",
        sttRetry: "再試行",
        sttDownloadChecking: "ダウンロード状況を確認中…",
        sttNotDownloaded: "未ダウンロード",
        sttDownloadStatusFailed: "ダウンロード状況を確認できませんでした",
        sttDownload: "ダウンロード",
        sttDownloadConfirmTitle: "{model} をダウンロードしますか？",
        sttDownloadConfirmBody:
          "ローカルの音声入力は完全にオフラインで動作しますが、先に {model} 音声モデルが必要です。サイズは約 {size} で、初回のみ Hugging Face キャッシュにダウンロードされます。",
        sttDownloadConfirmBodyUnsized:
          "ローカルの音声入力は完全にオフラインで動作しますが、先に {model} 音声モデルが必要です。初回のみ Hugging Face キャッシュにダウンロードされます。",
        sttOpenVoiceSettings: "音声設定を開く",
        sttDownloadStarted: "{model} をダウンロードしています",
        sttDownloading: "ダウンロード中… {progress}%",
        sttCancelDownload: "キャンセル",
        sttCancellingDownload: "キャンセル中…",
        sttCancelDownloadFailed: "ダウンロードをキャンセルできませんでした",
        sttDownloadComplete: "音声認識モデルをダウンロードしました",
        sttModelReady: "{model} を音声入力で使用できます",
        sttRecommended: "推奨",
        sttDownloadFailed: "音声認識モデルをダウンロードできませんでした",
        sttLoad: "読み込み",
        sttUnload: "アンロード",
        sttUnloading: "アンロード中…",
        microphoneLabel: "マイク",
        microphoneFallbackName: "マイク {index}",
        microphoneDescription: "音声入力に使用します",
        microphoneFallbackHint:
          "音声入力に使用します。ブラウザーの音声エンジンがこのデバイスを使用できない場合は、システムのデフォルトに切り替わります",
        microphoneGrantDescription:
          "デバイス名を表示するにはマイクへのアクセスを許可してください",
        allowMicrophone: "マイクへのアクセスを許可",
        micAccessBlocked:
          "マイクへのアクセスがブロックされました。この Unsloth のページでマイクへのアクセスを許可してから、もう一度お試しください。",
        micAccessUnsupported:
          "このブラウザーまたはコンテキストではマイクへのアクセスに対応していません。",
        systemDefault: "システムのデフォルト",
        savedMicDisconnected: "保存済みのマイク (未接続)",
        languageLabel: "音声入力の言語",
        languageDescription: "認識する言語",
        languageAuto: "自動 (ブラウザーの言語)",
      },
      dictionary: {
        sectionTitle: "音声入力辞書",
        sectionDescription: "音声入力が特定の語句をどう表記するかを設定します",
        manageLabel: "カスタム表記",
        manage: "管理",
        backToVoice: "音声に戻る",
        addEntry: "項目を追加",
        newEntryAria: "新しい辞書項目",
        entryPlaceholder: "山田 花子",
        entryAria: "辞書項目 {index}",
        removeEntryAria: "辞書項目 {index} を削除",
      },
      recents: {
        sectionTitle: "音声入力の履歴",
        sectionDescription:
          "音声入力はすべてここに保存され、テキストを復元できます",
        manageLabel: "音声入力の履歴",
        manage: "管理",
        pageDescription:
          "音声入力はすべて保存されます。表示、コピー、削除できるほか、その音声入力を使ったチャットを開くこともできます。",
        searchPlaceholder: "音声入力を検索",
        sortLabel: "音声入力を並べ替え",
        sortNewest: "新しい順",
        sortOldest: "古い順",
        sortAlpha: "A → Z",
        noMatches: "検索に一致する音声入力はありません",
        detailTitle: "保存された音声入力",
        backToVoice: "音声に戻る",
        backToRecents: "最近の音声入力に戻る",
        view: "音声入力の全文を表示",
        empty: "音声入力はまだありません",
        dictationColumn: "音声入力",
        dateColumn: "作成日",
        copy: "音声入力をコピー",
        copied: "クリップボードにコピーしました",
        copyFailed: "クリップボードにコピーできませんでした",
        delete: "音声入力を削除",
        deleteTitle: "音声入力を削除",
        deleteDescription:
          "この保存された音声入力を削除しますか？元に戻せません。",
        deleteLinkedDescription:
          "この保存済みの音声入力を削除しますか？この音声入力を使用したチャットも同時に削除できます。この操作は元に戻せません。",
        deleteWithChat: "チャットと音声入力を削除",
        deleteWithChatFailed: "チャットを削除できませんでした",
        clear: "履歴を消去",
        clearTitle: "音声入力の履歴を消去",
        clearDescription:
          "保存された音声入力をすべて削除しますか？元に戻せません。",
        clearConfirm: "すべて消去",
        showMore: "さらに表示 ({count})",
        openChat: "チャットを開く",
      },
      readAloud: {
        sectionTitle: "読み上げ",
        buttonLabel: "読み上げボタン",
        buttonDescription: "アシスタントの応答に表示します",
        engineLabel: "TTS エンジン",
        engineSystemDescription: "デバイス内蔵の音声",
        engineStudioDescription:
          "読み込み済みの音声モデルを使用します (例: Orpheus)",
        engineSystem: "システムの音声",
        engineStudio: "TTS モデルを読み込む",
        modelLabel: "TTS モデル",
        modelDescription:
          "モデルセレクターから音声モデルを読み込んでください (例: Orpheus TTS)",
        voiceLabel: "音声",
        voiceDescription: "このデバイスで最適な音声",
        speedLabel: "速度",
        pitchLabel: "ピッチ",
        volumeLabel: "音量",
        previewLabel: "音声を試聴",
        previewDescription: "短いサンプルを再生します",
        previewAction: "試聴",
        previewFailed: "TTS のプレビューに失敗しました",
        stopAction: "停止",
        ttsLabel: "音声合成",
        notSupported: "このブラウザーでは対応していません",
      },
    },
    general: {
      title: "一般",
      description: "Unsloth の全体的な設定。",
      account: "アカウント",
      huggingFaceToken: "Hugging Face トークン",
      huggingFaceTokenDescription: "ゲート付きモデルの読み込みや、アーティファクトのプッシュに使用されます。",
      hideToken: "トークンを非表示",
      showToken: "トークンを表示",
      clearToken: "クリア",
      checkingToken: "トークンを確認中...",
      tokenValidated: "トークンは検証済みです",
      password: "パスワード",
      passwordDescription: "この Unsloth アカウントのパスワードを変更します。",
      passwordDialog: {
        trigger: "パスワード変更",
        title: "パスワード変更",
        description: "現在のパスワードと新しいパスワード（最低 {minLength} 文字）を入力してください。",
        setTrigger: "リモートパスワードを設定",
        setTitle: "リモートパスワードを設定",
        setDescription: "リモートのブラウザーが unsloth としてサインインするためのパスワード（最低 {minLength} 文字）を選んでください。Unsloth デスクトップアプリは引き続き自動でサインインします。",
        setSubmit: "パスワードを設定",
        setting: "設定中...",
        setDone: "パスワードを設定しました。",
        currentPassword: "現在のパスワード",
        newPassword: "新しいパスワード",
        confirmPassword: "新しいパスワード（確認）",
        currentTooShort: "現在のパスワードは最低 {minLength} 文字である必要があります。",
        newTooShort: "新しいパスワードは最低 {minLength} 文字である必要があります。",
        mismatch: "パスワードが一致しません。",
        samePassword: "新しいパスワードは現在のパスワードと異なる必要があります。",
        update: "パスワードを更新",
        updating: "更新中...",
        updated: "パスワードを更新しました。",
        updateFailed: "パスワードの更新に失敗しました。",
        newHasSpaces: "新しいパスワードにスペースは使用できません。",
      },
      chatDefaults: "チャットのデフォルト設定",
      autoTitleNewChats: "新規チャットのタイトル自動生成",
      autoTitleNewChatsDescription: "最初のメッセージから短いタイトルを自動生成します。",
      helperLlm: {
        sectionTitle: "Helper LLM",
        preloadOnStartup: "起動時に Helper LLM をプリキャッシュする",
        preloadOnStartupDescription: "起動時にバックグラウンドで AI アシスト用の Helper モデルをダウンロードします。デフォルトはオフですが、AI アシストが必要に応じてオンデマンドで取得できます。",
        disabledByEnv: "バックエンド環境の UNSLOTH_HELPER_MODEL_DISABLE によって無効化されています。",
        loadError: "Helper LLM 設定の読み込みに失敗しました。",
        saveError: "Helper LLM 設定の保存に失敗しました。",
      },
      modelAutoSwitch: {
        sectionTitle: "モデル自動切り替え (OpenAI API)",
        enable: "リクエストごとにモデルを切り替え",
        enableDescription:
          "API リクエストで指定されたダウンロード済みの GGUF を、応答前に読み込みます。デフォルトではオフです。",
        idleUnload: "アイドル時の自動アンロード",
        idleUnloadDescription:
          "指定した秒数だけアイドル状態が続くと、モデルをアンロードして VRAM を解放します。0 にすると読み込んだままになります。最小値は 60 秒です。",
        idleSecondsAriaLabel: "アイドル時の自動アンロードまでの秒数",
        mediaIdleUnload: "画像と動画のアイドル時の自動アンロード",
        mediaIdleUnloadDescription:
          "指定した秒数だけアイドル状態が続くと、画像モデルと動画モデルをアンロードして VRAM を解放します。これは独立した設定です。上の設定はチャットモデルのみが対象です。0 にすると読み込んだままになります。最小値は 60 秒です。",
        mediaIdleSecondsAriaLabel:
          "画像と動画のアイドル時の自動アンロードまでの秒数",
        mediaIdlePaused:
          "「モデルを GPU メモリに保持」または「API が読み込んだモデルのみアンロード」がオンの間は一時停止します。",
        idleNeedsEnable: "アンロードされたモデルが次回使用時に再読み込みされるように、「リクエストごとにモデルを切り替え」をオンにしてください。",
        idleActiveViaEnv: "アイドル時の自動アンロードは UNSLOTH_MODEL_IDLE_TTL 環境変数によって有効になっています。",
        loadError: "モデル自動切り替え設定の読み込みに失敗しました。",
        saveError: "モデル自動切り替え設定の保存に失敗しました。",
        idleError: "モデルを読み込んだままにするには 0 を、それ以外は 60 秒以上を入力してください。",
        autoDownload: "不足しているモデルをダウンロード",
        autoDownloadDescription:
          "API リクエストで指定された未ダウンロードの GGUF を取得します。API キーを持つ人なら誰でもディスクと帯域を消費できるようになります。",
        keepKv: "アイドル時の自動アンロードをまたいでチャットのコンテキストを保持",
        keepKvDescription:
          "アイドル時の自動アンロードの前に KV キャッシュを保存し、再開したチャットが履歴を読み直さずに済むようにします。ディスク使用量は最大 10 GB です。",
        apiOnly: "API が読み込んだモデルのみアンロード",
        apiOnlyDescription:
          "アイドル時の自動アンロードでは、Studio から自分で読み込んだモデルはメモリに残し、API リクエストが読み込んだモデルだけを解放します。",
      },
      previewSharing: {
        sectionTitle: "プレビュー共有",
        enableLabel: "公開プレビューリンク",
        enableDescription:
          "署名付きリンクを持つ人なら誰でも、ログインせずにトレーニングが完了したモデルとチャットできます。オフにすると公開プレビューが利用できなくなり、共有済みのリンクも機能しなくなります。",
        loadError: "プレビュー共有設定の読み込みに失敗しました。",
        saveError: "プレビュー共有設定の保存に失敗しました。",
        revokeLabel: "すべてのプレビューリンクを失効",
        revokeDescription:
          "署名用シークレットを更新し、これまでに共有したすべてのリンクを無効にします。今後新たにコピーするリンクは引き続き使用できます。",
        revokeAction: "リンクを失効",
        revoking: "失効中...",
        revokeConfirmTitle: "すべてのプレビューリンクを失効させますか？",
        revokeConfirmDescription: "共有したすべてのプレビューリンクが即座に機能しなくなります。この操作は取り消せません。",
        revokeConfirmAction: "すべてのリンクを失効",
        revoked: "すべてのプレビューリンクを失効させました",
        revokeError: "プレビューリンクを失効させることができませんでした",
      },
      notifications: {
        sectionTitle: "通知",
        showLlamaUpdates: "llama.cpp のアップデート通知",
        showLlamaUpdatesDescription: "新しいモデルを実行するための新しい llama.cpp ビルドが利用可能になったときに通知します。トレーニングのみを行う場合はオフにしてください。",
        showLoadedModels: "読み込み済みモデルのインジケーター",
        showLoadedModelsDescription: "現在メモリ上にあるすべてのモデル（チャット、音声、画像、動画）を一覧表示する小さなカードを右下に表示します。各モデルを解放するボタンが付いています。",
      },
      startup: {
        sectionTitle: "起動",
        launchAtLogin: "ログイン時に Unsloth を起動",
        launchAtLoginDescription:
          "ログイン時に Unsloth をバックグラウンドで起動します。開くまでメニューバーまたはシステムトレイに常駐します。",

        closeToTray: "システムトレイに格納して閉じる",
        closeToTrayDescription:
          "メインウィンドウを閉じても、Unsloth とサーバーをバックグラウンドで実行し続けます。",
        closeToTraySaveError: "システムトレイに格納する設定を更新できませんでした。",
        loadError: "ログイン時起動の設定を読み込めませんでした。",
        saveError: "ログイン時起動の設定を更新できませんでした。",
      },
      uploads: {
        sectionTitle: "アップロード",
        maxUploadSize: "トレーニングデータセットのアップロード容量制限",
        maxUploadSizeDescription: "デフォルトは {defaultSize} MB です。",
      },
      rag: {
        sectionTitle: "ドキュメントと RAG",
        embeddingModel: "埋め込みモデル",
        embeddingModelDescription: "ドキュメントのインデックス作成と検索に使用する Hugging Face モデルまたはローカルパス。デフォルトは {defaultModel} です。",
        reindexWarning: "新しくインデックスされるドキュメントにのみ影響します。モデルを変更した後は、既存のドキュメントを再アップロードしてください。",
        emptyError: "Hugging Face モデル ID またはローカルパスを入力してください。",
        loadError: "埋め込みモデル設定の読み込みに失敗しました。",
        saveError: "埋め込みモデルの保存に失敗しました。",
        saved: "埋め込みモデルを保存しました。",
        saveAnyway: "そのまま保存",
        resetAction: "デフォルトに戻す",
      },
      storage: {
        sectionTitle: "ストレージ",
        modelsFolder: "モデルフォルダ",
        modelsFolderDescription: "ダウンロードしたモデルの保存先。",
        openAction: "開く",
        copyAction: "パスをコピー",
        copied: "パスをコピーしました",
        openError: "フォルダを開けませんでした",
        copyError: "パスをコピーできませんでした",
      },
      resetPreferences: {
        sectionTitle: "危険ゾーン",
        label: "すべてのローカル設定をリセット",
        description: "ローカル限定の設定を消去します。チャット、APIアクセス、DBに保存された設定は保持されます。",
        action: "設定をリセット",
        confirmTitle: "すべてのローカル設定をリセットしますか？",
        confirmDescription: "ローカル限定の設定を消去し、Unsloth を再読み込みします。チャット、APIアクセス、DBに保存された設定は保持されます。",
        confirmAction: "リセットして再読み込み",
      },
      permissions: {
        sectionTitle: "権限",
        bypassLabel: "ツールの権限",
        bypassDescription:
          "チャットのツール呼び出し (ターミナル、python、ウェブ、MCP) を実行する前に、Unsloth がどのように承認するかを決めます。「Full access」にすると承認とコードサンドボックスが無効になります。",
      },
    },
    profile: {
      title: "プロフィール",
      description: "Unsloth 内でのプロフィールの表示方法。",
      changePicture: "プロフィール写真を変更",
      displayName: "表示名",
      nickname: "Unsloth での呼び名",
      nicknamePlaceholder: "ニックネーム",
      nicknameSaved: "希望する名前を保存しました",
      avatarShape: "プロフィール写真の形状",
      avatarShapeCircle: "円形",
      avatarShapeRounded: "角丸",
      greetingSloth: "挨拶にナマケモノを表示",
      greetingSlothDescription: "チャットの挨拶にナマケモノを表示します。",
      chooseSloth: "またはナマケモノのプロフィール画像を選択",
      noPicture: "プロフィール画像なし",
      noneLabel: "なし",
      nameSaved: "プロフィール名を保存しました",
      namePersistErrorTitle: "プロフィール名を保存できませんでした",
      namePersistErrorDescription: "名前はこのセッション用に更新されましたが、再読み込み後に保持されない可能性があります。",
      photoUpdated: "プロフィール写真を更新しました",
      photoPersistErrorTitle: "プロフィール写真を保存できませんでした",
      photoPersistErrorDescription: "写真はこのセッション用に更新されましたが、再読み込み後に保持されない可能性があります。",
      photoUpdateErrorTitle: "プロフィール写真を更新できませんでした",
      imageUseError: "この画像は使用できませんでした。",
      uploadPhoto: "写真をアップロード",
      removePhoto: "削除",
      pictureOptions: "プロフィール写真のオプション",
      stats: {
        title: "あなたの統計",
        subtitle:
          "以下はすべてご自身の履歴から集計しています。収集も Unsloth への送信も行いません。",
        retry: "再試行",
        privacyNote:
          "統計は、お使いの Unsloth が保持しているチャットとトレーニングの履歴から計算されます。データの収集は行わず、Unsloth や第三者への送信も行いません。",
        emptyChats:
          "チャットがまだありません。会話を始めると、ここに統計が表示されます。",
        lifetimeTokens: "累計トークン",
        peakTokens: "トークン最多の日",
        longestChat: "最長のチャット",
        currentStreak: "現在の連続日数",
        longestStreak: "最長の連続日数",
        activityTitle: "トークンの推移",
        activityDescription: "直近{weeks}で{total}",
        mode: {
          daily: "日次",
          weekly: "週次",
          cumulative: "累計",
        },
        cellTooltip: "{date} · {tokens}、{messages}",
        weekTooltip: "{date} の週 · {tokens}",
        less: "少ない",
        more: "多い",
        insightsTitle: "アクティビティの分析",
        totalChats: "チャット総数",
        totalMessages: "メッセージ総数",
        tokensIn: "送信トークン",
        tokensOut: "生成トークン",
        cachedTokens: "キャッシュされたトークン",
        cachedValue: "{tokens} (入力の {percent}%)",
        avgTokensPerChat: "チャットあたりの平均トークン",
        timeInChat: "チャット時間",
        activeDays: "アクティブな日数",
        toolCalls: "ツール呼び出し",
        attachments: "添付ファイル",
        avgSpeed: "平均速度",
        bestSpeed: "最高生成速度",
        firstToken: "最初のトークンまでの平均時間",
        tokensPerSecond: "{value} tok/s",
        topModelsTitle: "よく使うモデル",
        topModelsDescription: "やり取りしたトークン数順",
        modelSummary: "{tokens} · {messages}",
        noModels: "モデルの利用実績はまだありません。",
        trainingTitle: "トレーニング",
        trainingDescription: "このワークスペースのファインチューニング実行",
        trainingRuns: "実行回数",
        trainingCompleted: "完了",
        trainingSteps: "ステップ",
        trainingTokens: "学習したトークン",
        trainingTime: "トレーニング時間",
        bestLoss: "最良の Loss",
        runSteps: "{steps}",
        runLoss: "Loss {loss}",
      },
    },
    appearance: {
      title: "外観",
      description: "このデバイスでの Unsloth の見た目。",
      theme: {
        title: "テーマ",
        label: "カラー構成",
        description: "ライト、ダーク、またはシステム設定に従います。",
        system: "システム",
        light: "ライト",
        dark: "ダーク",
      },
      palette: {
        label: "カラーパレット",
        description: "Unsloth 全体で使用される配色。ライト・ダーク両対応。",
        standard: "スタンダード",
        classic: "クラシック",
        minimal: "ミニマル",
      },
      custom: {
        reset: "リセット",
        resetAll: "カスタマイズをリセット",
        preferencesTitle: "環境設定",
        colors: {
          lightGroup: "ライトテーマ",
          darkGroup: "ダークテーマ",
          accent: "アクセント",
          background: "背景",
          foreground: "文字色",
        },
        fontDefault: "デフォルト",
        fontBundledGroup: "内蔵",
        fontImportedGroup: "インポート済み",
        fontDeviceGroup: "このデバイス",
        fontFolderGroup: "フォルダから",
        fontDeviceLoading: "デバイスのフォントを検索中…",
        fontSearch: "フォントを検索…",
        fontNoResults: "フォントが見つかりません。",
        colorPicker: {
          hue: "色相",
          hex: "16進カラー",
          eyedropper: "画面から色を選択",
        },
        uiFont: {
          label: "UI フォント",
        },
        headingFont: {
          label: "見出しフォント",
        },
        chatFont: {
          label: "チャットフォント",
        },
        codeFont: {
          label: "コードフォント",
        },
        importFont: {
          upload: "アップロード",
          scanFolder: "フォルダを選択",
          alreadyAvailable: "このフォントは既に利用可能なため、既存のものを使用します。",
          folderNoFonts: "そのフォルダにフォントファイルが見つかりませんでした。",
          remove: "削除",
          errorInvalidType:
            "サポートされていないファイル形式です。.woff2、.woff、.ttf、.otf を使用してください。",
          errorTooLarge: "フォントファイルが大きすぎます（最大 1.5 MB）。",
          errorLimit: "インポートできるフォントは最大 3 つです。",
          errorStorageFull: "ローカルストレージの空き容量が足りません。先にインポート済みフォントを削除してください。",
          errorFailed: "このフォントファイルを読み込めませんでした。",
        },
        uiFontSize: {
          label: "UI フォントサイズ",
          description: "Unsloth UI の基本サイズを調整します。",
        },
        codeFontSize: {
          label: "コードフォントサイズ",
          description: "コードの基本サイズを調整します。",
        },
        fontSmoothing: {
          label: "フォントスムージング",
          description: "滑らかなアンチエイリアスを使用します。",
        },
        contrast: {
          label: "コントラスト",
          description: "枠線と補助テキストの強さ。",
        },
        reduceMotion: {
          label: "モーションを減らす",
          description: "アニメーションを減らすか、システム設定に従います。",
          system: "システム",
          on: "オン",
          off: "オフ",
        },
        pointerCursors: {
          label: "ポインターカーソルを使用",
          description:
            "操作可能な要素にカーソルを合わせたときにポインターに変更します。",
        },
      },
      language: {
        title: "言語",
        label: "表示言語",
        description: "Unsloth で使用される言語。",
        autoDetect: "自動検出",
      },
      layout: {
        title: "レイアウト",
        compactSidebar: "デフォルトでサイドバーを固定",
        compactSidebarDescription: "サイドバーをアイコンに折りたたまず、展開したままにします。",
      },
      sidebarNav: {
        title: "サイドバーナビゲーション",
        description:
          "サイドバーのタブを固定したり並べ替えたりします。固定していないタブは「その他」メニューにまとめられます。固定していないタブが 1 つだけの場合は、項目が 1 つのメニューを作らずにそのタブを非表示にします。「新規チャット」は固定されたままです。",
        dragToReorder: "ドラッグして並べ替え",
        pinToSidebar: "{name} をサイドバーに固定",
        moreHolds: "その他 ({count})",
      },
      sidebarMenu: {
        title: "サイドバーメニュー",
        description:
          "サイドバーのプロフィールメニュー項目の表示と並び順を変更します。設定、ヘルプ、ログアウト、シャットダウンは固定です。",
        darkModeToggle: "ダークモード切り替え",
        dragToReorder: "ドラッグして並べ替え",
      },
    },
    resources: {
      title: "システム",
      description: "この Unsloth サーバーのハードウェアとストレージを監視します。",
      liveUpdates: "リアルタイム更新",
      floatingWindow: "フローティングウィンドウ",
      disableOverlay: "オーバーレイを無効化",
      liveMonitor: {
        title: "リアルタイムモニター",
        apiTitle: "API モニター",
        summary: "処理中のリクエスト、エラー、トークン使用量",
        status: "処理中 {active} 件 · 最近 {recent} 件 · {model}",
        noModelLoaded: "モデル未読み込み",
        autoOpen: "フローティングモニターを自動表示",
        autoOpenDescription:
          "API トラフィックを受信すると小さなパネルを開きます。",
        cpu: "CPU",
        ram: "RAM",
        disk: "ディスク",
        vram: "VRAM",
        cpuCores: "論理 {logical} / 物理 {physical} コア",
        currentLoad: "現在の負荷",
        free: "{value} 空き",
        noGpu: "認識できる GPU がありません",
      },
      gpu: {
        title: "GPU デバイス",
        ggufInference: "GGUF 推論",
        unavailable: "利用不可",
        noGpu:
          "利用可能な GPU が検出されませんでした。CPU のみの環境向けのリソース情報は上に表示されています。",
        unknownDevice: "不明な GPU",
        deviceWithIndex: "GPU {index}",
        vramUtilization: "VRAM",
        used: "{value} 使用中",
        free: "{value} 空き",
        total: "{value} 合計",
      },
      llamaBackend: {
        title: "GGUF 推論エンジン",
        label: "計算バックエンド",
        description: "llama.cpp が GGUF モデルの実行に使うバックエンドです。",
        runningOn: "llama.cpp は現在 {backend} で動作しています。",
        hint: "このバックエンド向けの llama.cpp ビルドをインストールし、アップデート後も維持します。自動選択がクラッシュする場合や、GPU ドライバーが対応していない場合に役立ちます。このマシン用のビルドがあるバックエンドのみ表示され、学習には影響しません。",
        autoWith: "自動 ({backend})",
        apply: "適用",
        applying: "インストール中...",
        applyHint: "新しいビルドをダウンロードして llama.cpp を再起動します。ロード中のモデルはアンロードされます。",
        applyHintWithSize: "{size} をダウンロードして llama.cpp を再起動します。ロード中のモデルはアンロードされます。",
        switchedTo: "llama.cpp は {backend} で動作するようになりました。",
        switchFailed: "llama.cpp のバックエンドを変更できませんでした。",
        switchInterrupted: "切り替えは完了する前に中断されました。",
        envLocked: "環境変数 UNSLOTH_LLAMA_CPP_BACKEND により {backend} に固定されています。この設定より優先されます。",
        backends: {
          auto: "自動",
          cpu: "CPU",
          cuda: "CUDA",
          rocm: "ROCm",
          vulkan: "Vulkan",
          metal: "Metal",
        },
        unsupported: {
          notInstalled: "管理対象の llama.cpp インストールが見つからないため、切り替えるバックエンドがありません。",
          localLink: "llama.cpp は自分でリンクしたローカルディレクトリのため、Unsloth は置き換えません。",
          sourceBuild: "この llama.cpp はソースからビルドされているため、ここではバックエンドを切り替えられません。",
          unresolved: "利用可能なバックエンドを確認できませんでした。接続を確認して再試行してください。",
        },
        // 非表示: 設定検索用の追加キーワード。
        llamaBackendKeywords:
          "llama.cpp backend gguf 推論 cuda rocm hip vulkan metal cpu gpu アクセラレータ prebuilt 切り替え エンジン",
      },
      modelMemory: {
        title: "モデルメモリ",
        keepResident: "モデルを GPU メモリに保持",
        keepResidentDescription: "プロンプト間も VRAM に常駐します。",
        keepResidentHint: "モデルがロードされている間、重みをシステム RAM に戻しません。アイドル時の自動アンロードを無効にし、重みが実際にホスト RAM 上にある場合（ユニファイドメモリ、または GPU への部分オフロード）は --mlock も渡すため、OS が重みをページアウトして次のプロンプトで再アップロードすることがなくなります。",
        noRamReserve: "モデル用にシステム RAM を確保しない",
        noRamReserveDescription: "RAM に完全なコピーを保持しません。",
        noRamReserveHint: "RAM に完全なコピーを保持せず、重みを VRAM へ転送します。llama.cpp のメモリマップ読み込みを維持し、--no-mmap と --mlock を除去します。",
        mlockVetoed: "--mlock は無効のままです。モデルを固定するとモデル全体分の RAM を確保することになります。アイドル時の自動アンロードは引き続き無効です。",
        memlockCapped: "このシステムはロック可能なメモリを {limit} に制限しています。これより大きいモデルは完全には固定されません。ulimit -l で上限を引き上げてください。",
        reloadRequired: "新しいメモリ設定を適用するにはモデルを再読み込みしてください。",
        loadError: "モデルメモリ設定の読み込みに失敗しました",
        saveError: "モデルメモリ設定の保存に失敗しました",
        // Not rendered: extra terms the settings search matches these rows on.
        modelMemoryKeywords:
          "mlock memlock ulimit vram gpu メモリ ram 常駐 固定 ロック 保持 ロード済み アンロード アイドル mmap no-mmap load-mode スワップ ページング",
      },
      storage: {
        title: "ストレージ",
        systemDisk: "システムディスク",
        diskUsage: "{used} 使用中 / {total}",
        diskFree: "{free} 空き",
        modelsFolder: "モデルフォルダ",
        modelsFolderKeywords:
          "モデル フォルダ ディレクトリ パス 保存先 場所 ダウンロード キャッシュ ストレージ ディスク ドライブ 移動 変更 models folder path hugging face",
        modelsFolderDescription: "ダウンロードしたモデルの保存場所です。",
        modelsFolderHint: "ダウンロードしたモデルの保存場所です。システムドライブを圧迫しないよう変更できます。新規ダウンロードにのみ適用され、既存のモデルはそのままの場所に残ります。",
        openAction: "開く",
        copyAction: "パスをコピー",
        copied: "パスをコピーしました",
        openError: "フォルダを開けませんでした",
        copyError: "パスをコピーできませんでした",
        futureDownloads: "新規ダウンロードのみ",
        environmentManaged: "環境変数 {variable} で管理されています。",
        locationFree: "{free} 空き",
        changeAction: "変更",
        resetAction: "既定を使用",
        chooseTitle: "モデルのダウンロード先を選択",
        chooseAction: "今後のダウンロードに使用",
        cacheSaved: "モデルのダウンロード先を更新しました",
        cacheSaveError: "モデルのダウンロード先を更新できませんでした",
        cachePickerError: "フォルダの選択画面を開けませんでした",
      },
      environment: {
        title: "環境",
        backend: "バックエンド",
        python: "Python",
        torch: "Torch",
        transformers: "Transformers",
        uptime: "稼働時間",
        processMemory: "プロセスメモリ",
        notInstalled: "未インストール",
        unknown: "不明",
      },
    },
    agents: {
      title: "エージェント",
      description:
        "unsloth start で Claude Code や Codex などのコーディングエージェントをローカルモデルに接続します。",
      intro:
        "は Claude Code、Codex、Hermes、OpenClaw、OpenCode などのエージェントを、Unsloth がローカルで提供するモデルに完全オフラインで接続します。OpenAI 互換サーバーを起動し、エージェントの設定ファイルには一切手を加えません。",
      readDocs: "ドキュメントを読む",
      copy: "コピー",
      copied: "コピーしました",
      commandBuilder: "コマンドビルダー",
      agent: "コーディングエージェント",
      model: "モデル",
      searchModels: "GGUF モデルを検索...",
      noModels: "一致する GGUF モデルはありません。",
      showingModels:
        "{total} 件中 {shown} 件を表示しています。入力を続けると絞り込めます。",
      quantization: "量子化",
      loadingQuantizations: "量子化を読み込み中...",
      noQuantizations: "個別の量子化なし",
      recommended: "推奨",
      downloaded: "ダウンロード済み",
      quantizationLoadError:
        "すべての量子化を読み込めませんでした。コマンドには取得できたモデル名を使用します。",
      generatedCommand: "生成されたコマンド",
      docs: "ドキュメント",
      agentDocs: "{agent} のセットアップドキュメントを開く",
      copyGeneratedCommand: "生成されたコマンドをコピー",
      modelNote:
        "Codex には llama-server が提供する GGUF モデルが必要です。他のエージェントは transformers ベースのモデルも利用できます。Unsloth に読み込み済みのモデルを使うには --model を外してください。",
      subagent: {
        title: "ローカルモデルをサブエージェントとして使う",
        description:
          "{agent} は現在のモデルのまま、選んだタスクだけをこのローカルの Unsloth モデルに委任します。",
        setupCommand: "セットアップコマンド",
        copySetupCommand: "サブエージェントのセットアップコマンドをコピー",
        usagePrompt: "続いて {agent} で次のように入力します:",
        copyUsagePrompt: "サブエージェントの利用プロンプトをコピー",
        defaultPrompt:
          "ローカルエージェントを起動して、この関数を実装してください。",
        opencodePrompt: "@unsloth このテスト失敗の原因を調べて",
      },
      quickstart: {
        title: "コマンドを組み立てる",
        description:
          "Studio に読み込み済みのモデルでエージェントを起動します。先にモデルを読み込み、claude を下記の対応エージェントに置き換えてください。",
        noneDetected:
          "対応するエージェントの CLI が PATH 上に見つかりませんでした。",
        installed: "インストール済み",
      },
      supportedAgents: {
        title: "対応エージェント",
        description: "各エージェントはそれぞれのコマンドで起動します:",
        requiresGguf: "GGUF モデルが必要",
      },
      models: {
        title: "モデルの選び方",
        description:
          "--model でモデルと量子化を指定し、--context-length でコンテキスト長を設定します。量子化サフィックスか、明示的な --gguf-variant フラグを使用してください。",
        suffixLabel: "量子化サフィックスを使う場合",
        variantLabel: "明示的なバリアントフラグを使う場合",
      },
      options: {
        title: "主なオプション",
        description:
          "Unsloth のフラグが先に解釈され、認識されなかったものはそのままエージェントへ渡されます。",
        model:
          "モデルを選択します。--model がない場合、unsloth start は Studio に読み込み済みのモデルを使用し、未読み込みならエラーになります。",
        contextLength:
          "要求するコンテキスト長を設定します (エイリアス: --max-seq-length)。",
        ggufVariant: "GGUF の量子化バリアントを選択します。",
        loadIn4bit:
          "Hugging Face モデルの 4bit 読み込みを切り替えます。",
        tensorParallel: "複数 GPU でのテンソル並列を切り替えます。",
        serve: "自動ローカルサーバーの有効・無効を切り替えます。",
        launch:
          "エージェントを起動するか、コマンドと環境変数の表示だけを行います。",
        persist:
          "Unsloth が管理するエージェントのストレージを実行間で保持します。",
        asSubagent:
          "親エージェントを現在のモデルのままにし、Unsloth をローカルのサブエージェントとして登録します (Claude Code、Codex、OpenCode)。",
        apiKey:
          "Unsloth の API キーを指定します (または UNSLOTH_API_KEY を設定)。",
        yolo:
          "承認の確認をスキップします。信頼できる環境でのみ使用してください。",
      },
      remote: {
        title: "リモートの Studio に接続する",
        description:
          "起動前に次を設定すると、unsloth start を別の場所で動作している Studio に向けられます (--api-key を直接渡すことも可能です):",
      },
      passthrough: {
        title: "エージェントへの引数の受け渡し",
        description:
          "Unsloth のフラグより後ろの引数はエージェント自身へ転送されるため、resume のようなネイティブコマンドもそのまま使えます:",
      },
      dryRun: {
        title: "起動せずに内容を確認する",
        description:
          "--no-launch を付けると、エージェントを起動する代わりに環境変数とコマンドを表示します。--model を指定している場合、モデルの解決と読み込みは行われることがあります。",
      },
    },
    chat: {
      title: "チャット",
      description: "このデバイスでのチャットの動作をカスタマイズします。",
      modelSelection: {
        title: "モデル選択の設定",
        expandQuantizations: "量子化オプションを展開",
        expandQuantizationsDescription:
          "オン: 「On Device」の GGUF モデルで量子化オプションをすぐに表示します。オフ: モデルをクリックすると、その量子化オプションを表示します。",
        showAllQuantizations: "すべての量子化オプションを表示",
        showAllQuantizationsDescription:
          "オン: 「On Device」にあるすべての量子化オプションを、未ダウンロードのものも含めて一覧表示します。オフ: ダウンロード済みの量子化オプションのみを表示します。",
      },
      menu: {
        title: "チャットメニュー",
        description:
          "項目をチャットの「+」サイドメニューに固定します。その他の項目は「More」に移動します。",
        chatWithFiles: "ファイルとチャット (RAG)",
        mcp: "MCP",
        savedPrompts: "保存済みプロンプト",
        compareChat: "チャットを比較",
        exportChat: "チャットをエクスポート",
      },
      showResponseModel: "応答モデルを表示",
      showResponseModelDescription:
        "アシスタントの応答にモデルのメタデータを表示します。",
      modelDisclaimer: "モデルの免責事項を表示",
      modelDisclaimerDescription: 'チャットボックスの下に "LLMs can make mistakes" と表示します。',
      thinking: {
        collapseByDefault: "思考をデフォルトで折りたたむ",
        collapseByDefaultDescription:
          "モデルの思考中も自動で展開せず、折りたたんだままにします。読みたいときはブロックを展開してください。",
      },
      artifacts: {
        title: "Canvas",
        collapseHtmlBlocks: "HTMLブロックを折りたたむ",
        collapseHtmlBlocksDescription:
          "Canvas モードでは完全な HTML を自動的に折りたたみます。Canvas がオフのときも、コードフェンスで囲まれた HTML ドキュメントを折りたたむには、この設定をオンにします。",
        allowNetworkAccess: "Canvas のネットワークアクセスを許可",
        allowNetworkAccessDescription: "CanvasのプレビューがCDNからスクリプト、スタイル、フォント、メディア、ネットワークリソースを読み込むことを許可します。完全にオフラインでプレビューする場合はオフのままにしてください。",
        blockedBanner: "{hosts} からの外部リソース {count} 件をブロックしました。",
        blockedBannerPlural: "{hosts} からの外部リソース {count} 件をブロックしました。",
        blockedBannerAction: "この Canvas で許可",
      },
      data: "データ",
      exportHistory: "チャット履歴をエクスポート",
      exportHistoryDescription: "すべてのチャットとメッセージを JSON としてダウンロードします。",
      exportAction: "エクスポート",
      exportingAction: "エクスポート中...",
      exportConversations: "履歴とプロジェクトをエクスポート",
      exportConversationsDescription:
        "履歴、または履歴とプロジェクトのチャットを、Raw JSONL、CSV、ShareGPT JSONL のいずれかで、一括またはチャットごとにダウンロードします。",
      exportConversationsAction: "エクスポート",
      exportScopeRecents: "履歴",
      exportScopeAll: "履歴 + プロジェクト",
      exportCombinedSuffix: "(一括)",
      exportPerChatSuffix: "(チャットごと)",
      importChats: "チャットをインポート",
      importChatsDescription: "Open WebUI、JSONL、NDJSON、または CSV のエクスポートファイルを履歴にインポートします。",
      importChatsAction: "インポート",
      importNoConversations: "ファイル内に会話が見つかりませんでした。",
      importedOneChat: "1 件の会話を履歴にインポートしました。",
      importedChatCount: "{count} 件の会話を履歴にインポートしました。",
      importingChats: "チャットをインポート中: 現在 {count} 件（{percent}%）...",
      importedChatCountPartial: "{count} 件の会話を最近のチャットにインポートしました。{failed} 件は保存できませんでした。",
      importFailed: "インポートに失敗しました。",
      clearHistory: "チャット履歴を消去",
      clearHistoryDescription: "このデバイスからチャット履歴を削除します。",
      clearAction: "消去",
      clearAllChats: "すべてのチャットを消去",
      clearAllChatsDescription: "このデバイスのすべてのチャットを永久に削除します。",
      noChatsToClear: "消去するチャットがありません。",
      clearOneChatDescription: "このデバイスにある唯一のチャットを永久に削除します。",
      clearChatCountDescription: "このデバイスにあるすべての {count} 件のチャットを永久に削除します。",
      clearChatsAction: "チャットを消去",
      clearOneChatTitle: "1 件のチャットを消去しますか？",
      clearChatsTitle: "{count} 件のチャットを消去しますか？",
      clearChatsConfirmDescription: "このデバイスのすべてのチャットを永久に削除します。この操作は取り消せません。",
      clearingAction: "消去中...",
      clearOneChatAction: "1 件のチャットを消去",
      clearChatCountAction: "{count} 件のチャットを消去",
      clearedAllChats: "すべてのチャットを消去しました",
      clearedOneChat: "1 件のチャットを消去しました",
      clearedChatCount: "{count} 件のチャットを消去しました",
      someChatsCouldNotBeCleared: "一部のチャットを消去できませんでした",
      chatsClearedRemainOne: "{clearedCount} 件のチャットを消去しました。1 件のチャットが残っています。もう一度お試しください。",
      chatsClearedRemain: "{clearedCount} 件のチャットを消去しました。{remainingCount} 件のチャットが残っています。もう一度お試しください。",
      oneChatClearedRemain: "1 件のチャットを消去しました。{remainingCount} 件のチャットが残っています。もう一度お試しください。",
      oneChatClearedRemainOne: "1 件のチャットを消去しました。1 件のチャットが残っています。もう一度お試しください。",
      storageClearFailedOne: "ストレージの消去に失敗しました。1 件のチャットが残っている可能性があります。もう一度お試しください。",
      storageClearFailed: "ストレージの消去に失敗しました。{count} 件のチャットが残っている可能性があります。もう一度お試しください。",
      failedToClearChats: "チャットの消去に失敗しました",
    },
    data: {
      title: "データ",
      backToData: "データに戻る",
      exportFailed: "チャットをエクスポートできませんでした",
      description:
        "このデバイスに保存されているチャット履歴とアップロード済みファイルを管理します。",
      archivedChats: "アーカイブ済みチャット",
      archivedChatsDescription: "アーカイブしたチャットを表示・管理します。",
      archivedImages: "アーカイブ済み画像",
      archivedImagesDescription: "アーカイブした画像を表示・管理します。",
      archivedVideos: "アーカイブ済み動画",
      archivedVideosDescription: "アーカイブした動画を表示・管理します。",
      manageAction: "管理",
      exportArchivedChats: "エクスポート",
      exportingArchivedChats: "エクスポート中...",
      exportedOneArchivedChat: "アーカイブ済みチャット 1 件をエクスポートしました",
      exportedArchivedChatCount:
        "アーカイブ済みチャット {count} 件をエクスポートしました",
      noArchivedChatsToExport: "エクスポートできるアーカイブ済みチャットはありません。",
      failedToExportArchivedChats:
        "アーカイブ済みチャットをエクスポートできませんでした",
      archiveAllChats: "すべてのチャットをアーカイブ",
      archiveAllChatsDescription:
        "履歴とプロジェクトにあるすべてのチャットをアーカイブに移動します。",
      noChatsToArchive: "アーカイブできるチャットはありません。",
      archiveAllAction: "すべてアーカイブ",
      archivingAction: "アーカイブ中...",
      archiveAllChatsTitle: "すべてのチャットをアーカイブしますか？",
      archiveAllChatsConfirmDescription:
        "このデバイスのすべてのチャットをアーカイブに移動します。アーカイブ済みのチャットは引き続き利用でき、いつでもアーカイブから戻せます。",
      archivedAllChats: "すべてのチャットをアーカイブしました",
      archivedOneChat: "チャット 1 件をアーカイブしました",
      archivedChatCount: "チャット {count} 件をアーカイブしました",
      failedToArchiveChats: "チャットをアーカイブできませんでした",
      confirmBeforeDeleting: "削除前に確認する",
      confirmBeforeDeletingDescription:
        "チャットを削除する前に確認を求めます。オフにすると即座に削除します。",
      filesSection: "ファイル",
      uploadedFiles: "アップロード済みファイル",
      uploadedFilesDescription:
        "チャット、プロジェクト、ナレッジベースにアップロードしたファイルを表示・管理します。",
      fineTuneExport: "チャットを学習データとして使う",
      fineTuneExportDescription:
        "チャットからファインチューニング用の JSONL データセットを作成します。トレーニングで読み込む、レシピで調整する、そのままエクスポートする、のいずれも可能です。",
      fineTuneExportAction: "JSONL をエクスポート",
      fineTuneRunAction: "実行",
      fineTuneExportingAction: "エクスポート中...",
      fineTuneOpenRecipesAction: "レシピで開く",
      fineTuneOpeningRecipesAction: "レシピを開いています...",
      fineTuneTrainAction: "トレーニングタブに読み込む",
      fineTuneTrainingAction: "読み込み中...",
      fineTuneExportFailed: "学習データをエクスポートできませんでした",
      fineTuneRecipeFailed: "チャットをレシピで開けませんでした",
      fineTuneTrainFailed:
        "トレーニングタブにデータセットを読み込めませんでした",
    },
    connections: {
      title: "接続",
      description: "プロバイダーと外部接続を管理します。",
    },
    apiKeys: {
      title: "API",
      description: "OpenAI互換 API を介して Unsloth にアクセスします。",
      readDocs: "API ドキュメントを読む",
      noAccess: "アクセストークンはまだありません。",
      accessTokens: "アクセストークン",
      loadError: "アクセストークンを読み込めませんでした。",
      createError: "アクセストークンを作成できませんでした。",
      revokeError: "アクセストークンを失効させることができませんでした。",
      never: "なし",
      tokenNamePlaceholder: "トークン名 (例: production)",
      newAccessTokenName: "新規アクセストークン名",
      createToken: "トークンを作成",
      creating: "作成中...",
      newTokenCreated: "新規アクセストークンが作成されました",
      accessTokenCopied: "アクセストークンをコピーしました",
      copyAccessToken: "アクセストークンをコピー",
      copyNow: "今すぐコピーしてください - これは二度と表示されません。",
      usageExamples: "使用例",
      usageTools: "ツール",
      exampleCurlTools: "curl + ツール",
      examplePythonTools: "Python + ツール",
      exampleJavaScriptTools: "JavaScript + ツール",
      exampleCurlAdvanced: "curl + 高度な設定",
      examplePythonAdvanced: "Python + 高度な設定",
      exampleJavaScriptAdvanced: "JavaScript + 高度な設定",
      osUnix: "Linux / macOS / WSL",
      osWindows: "Windows",
      secureHttps: "セキュア HTTPS",
      secureHttpsHint: "0.0.0.0 ポートは依然としてグローバルにアクセス可能です。完全なセキュリティを確保するには、Unsloth を --secure 付きで起動し、この HTTPS リンクのみを公開してください。",
      copyTunnelUrl: "トンネル URL をコピー",
      copySnippet: "スニペットをコピー",
      copy: "コピー",
      copied: "コピーしました",
      setupDocs: "セットアップドキュメント:",
      codingAgents: "コーディングエージェント",
      codingAgentsHint: "このサーバーに対してコーディングエージェントを起動します。読み込み済みのモデルを使用します。ローカルサーバーでは API キーが自動的に発行され、リモートサーバーではコマンドに含まれます。",
      codingAgentsSwap: "claude を codex、openclaw、opencode、hermes に置き換えられます。",
      codingAgentDetected: "このマシンにインストール済み",
      codingAgentsDetectedHint: "このマシンで検出されました: {agents}。",
      relativeNever: "なし",
      relativeJustNow: "たった今",
      expired: "期限切れ",
      today: "今日",
      created: "作成日時 {value}",
      used: "使用日時 {value}",
      expires: "有効期限 {value}",
      actionsFor: "{name} のアクション",
      copyPrefix: "プレフィックスをコピー",
      revokeToken: "トークンを失効",
      revokeTitle: 'アクセストークン "{name}" を失効させますか？',
      revokeDescription: "このトークンを使用しているアプリはすぐにアクセスできなくなります。この操作は取り消せません。",
      revokeAction: '"{name}" を失効',
      revoking: "失効中...",
      usageNoModel:
        "モデルを読み込むかダウンロードすると、実行できる例が表示されます。このサーバーにはまだ指定できるモデルがありません。",
    },
    about: {
      title: "情報",
      description: "ドキュメント、リリースノート、フィードバック、およびビルド情報。",
      studioVersion: "Unsloth バージョン",
      packageVersion: "パッケージバージョン",
      desktopAppVersion: "デスクトップアプリのバージョン",
      desktopAppVersionUnavailable: "利用できません",
      llamaCppVersion: "llama.cpp バージョン",
      hardware: "ハードウェア",
      gpu: "GPU",
      cuda: "CUDA",
      rocm: "ROCm",
      xpu: "XPU",
      updates: "アップデート",
      help: "ヘルプ",
      documentation: "ドキュメント",
      releaseNotes: "リリースノート",
      whatsNew: "新機能",
      feedback: "フィードバック",
      reportIssue: "問題を報告",
      license: {
        sectionTitle: "ライセンス",
        studioLabel: "Unsloth",
        studioLicense: "AGPL-3.0",
        studioDescription: "GNU AGPL v3.0 の下でオープンソース化されています。",
        libraryLabel: "Unsloth Core",
        libraryLicense: "Apache-2.0",
        libraryDescription: "Apache 2.0 ライセンスの下で提供されています。",
      },
      dangerZone: "危険ゾーン",
      shutDownStudio: "Unsloth をシャットダウン",
      shutDownStudioDescription: "Unsloth サーバーを停止し、セッションを終了します。",
      shutDown: "シャットダウン",
      update: {
        title: "Unsloth のアップデート",
        commandText: "{label}のテキスト",
        copied: "コピーしました",
        copyCommand: "コマンドをコピー",
        commandCopied: "{label} をコピーしました",
        copyNamedCommand: "{label} をコピー",
        checkingInstall: "Unsloth がどのようにインストールされたかを確認中...",
        installIntro: "Unsloth のインストールまたはアップデート方法:",
        localUpdateHeading: "ローカルアップデート",
        installCommandUnix: "macOS/Linux インストールコマンド",
        installCommandWindows: "Windows インストールコマンド",
        localInstallDetected: "ローカルインストールが検出されました。PyPI で上書きされるのを防ぐため、元のリポジトリからアップデートしてください。",
        pullThenUpdate: "最新の変更をプルしてから、ローカルインストーラーを実行してください:",
        gitPullCommand: "git pull コマンド",
        localInstallerCommand: "ローカルインストーラーコマンド",
        sourceInstallDetected:
          "ソースまたは VCS パッケージからのインストールが検出されました。元のローカルパスまたは Git URL から再インストールしてください。",
        repoCheckoutFallback: "リポジトリが手元に残っている場合は、そこからローカルインストーラーを実行してください:",
        restartAfterUpdate: "アップデート後に Unsloth を再起動してください。",
        desktopManaged:
          "デスクトップアプリは新しいバージョンを自動的に確認します。ここからいつでも手動で確認またはアップデートできます。",
        desktopReady: "デスクトップアプリのアップデート",
        desktopReadyDescription:
          "新しいバージョンのデスクトップアプリが利用可能か確認します。",
        desktopChecking: "アップデートを確認中",
        desktopCheckingDescription: "通常は数秒で完了します。",
        desktopAvailable: "デスクトップアプリ {version} を利用できます",
        desktopAvailableDescription:
          "今すぐアップデートします。完了するとデスクトップアプリが再起動します。",
        desktopExternalServer:
          "サーバーを起動したターミナルで `unsloth studio update` を実行してください。",
        desktopManualInstall:
          "リリースページを開き、最新の Linux パッケージをインストールしてください。",
        desktopCheckFailed: "アップデートを確認できませんでした",
        desktopCheckFailedDescription:
          "接続を確認して、もう一度お試しください。",
        desktopCurrent: "デスクトップアプリは最新です",
        desktopCurrentDescription:
          "Unsloth は今後も自動的にアップデートを確認します。",
        checkForUpdates: "アップデートを確認",
        checkAgain: "もう一度確認",
        retryCheck: "再試行",
        checking: "確認中...",
        updateNow: "今すぐアップデート",
        openReleasePage: "リリースページを開く",
        unknownInstall: "Unsloth がどのようにインストールされたか検出できませんでした。インストーラーまたは PyPI インストールの場合は、上記のコマンドを使用してください。",
        localCheckout:
          "ローカルチェックアウトからインストールした場合は、そのチェックアウトでローカルインストーラーを実行してください:",
        docs: "インストールガイド:",
        docsInstall: "インストール",
        docsUpdating: "アップデート方法",
        docsMac: "Mac",
        docsWindows: "Windows",
      },
    },
  },
  studio: {
    imageTraining: "画像トレーニング",
    goToImageTraining: "画像トレーニングへ移動",
    routeTitle: "トレーニング",
    wizard: {
      modelTitle: "モデル",
      modelDescription: "モデルとトレーニング方法を選択",
      datasetTitle: "データセット",
      datasetDescription: "トレーニングデータを選択またはアップロード",
      paramsTitle: "パラメーター",
      paramsDescription: "トレーニングパラメーターを設定",
      configTitle: "構成",
      configDescription: "構成を保存または読み込み",
      modelLabel: "モデル",
      methodLabel: "手法",
      datasetLabel: "データセット",
      modelTooltip: "ファインチューニングするベースモデルです。",
      methodTooltip: "モデルの学習方法です。LoRA と QLoRA はすべての重みではなく小さなアダプターを更新します。",
      datasetTooltip: "モデルのファインチューニングに使う学習データです。",
      hfTokenDescription:
        "アクセス制限付きまたは非公開のモデルとデータセットに必要です。",
      uploadLocalLabel: "またはローカルファイルをアップロード",
      sourceBrowse: "参照",
      releaseToUpload: "ドロップしてアップロード",
      loadYaml: "YAML を読み込む",
      saveYaml: "YAML を保存",
      resetDefaults: "デフォルトに戻す",
      cachedModelGoneTitle: "キャッシュ済みモデルを利用できません",
      cachedModelGoneDescription:
        "モデルファイルがこのデバイス上に存在しないため、トレーニング時に再度ダウンロードします。",
      cachedDatasetGoneTitle: "キャッシュ済みデータセットを利用できません",
      cachedDatasetGoneDescription:
        "データセットファイルがこのデバイス上に存在しないため、トレーニング時に再度ダウンロードします。",
    },
    preview: {
      title: "実行プレビュー",
      ready: "準備完了",
      notReady: "準備未完了",
      modelPending: "モデル未選択",
      datasetPending: "データセット未選択",
      method: "手法",
      length: "長さ",
      stepZero: "{count} ステップ",
      step: "{count} ステップ",
      stepTwo: "{count} ステップ",
      stepFew: "{count} ステップ",
      stepMany: "{count} ステップ",
      steps: "{count} ステップ",
      epochZero: "{count} エポック",
      epoch: "{count} エポック",
      epochTwo: "{count} エポック",
      epochFew: "{count} エポック",
      epochMany: "{count} エポック",
      epochs: "{count} エポック",
      batch: "バッチ",
      context: "コンテキスト",
      lr: "LR",
      hardware: "ハードウェア",
      noGpu: "GPU が検出されませんでした",
      hfToken: "HF トークン",
      saved: "保存済み",
      notSet: "未設定",
      files: "ファイル",
      model: "モデル",
      dataset: "データセット",
      downloadsOnStart: "開始時にダウンロード",
      continuesOnStart: "開始時にダウンロードを再開",
      noticeModelDownload:
        "このモデルはまだデバイス上にありません。トレーニング時に自動でダウンロードします。",
      noticeModelPartial:
        "トレーニングでは、モデルを読み込む前に未完了のダウンロードを完了します。",
      noticeDatasetDownload:
        "このデータセットはまだデバイス上にありません。トレーニング時に自動でダウンロードします。",
      noticeDatasetPartial:
        "トレーニングでは、データセットを読み込む前に未完了のダウンロードを完了します。",
      noticeTransformersUpgrade:
        "インストール済みの transformers はこのアーキテクチャに未対応です。実行を開始すると、まず transformers {version} のインストールを確認します。",
      noticeSixteenBitOnly:
        "このアーキテクチャは 16 ビット LoRA で学習します。4 ビットは利用できないため、QLoRA より大幅に多い VRAM が必要です。",
      noticeInstallSwitchesSixteenBit:
        "モデル独自のコードを使う代わりにそのリリースをインストールすると、この実行は 16 ビット LoRA に切り替わり、QLoRA より大幅に多い VRAM が必要になります。",
      advancedSettings: "詳細設定",
      defaultAdvancedSettings: "デフォルト",
      nonDefaultAdvancedSettings: "デフォルト以外の設定: {count} 件",
    },
    datasetPicker: {
      noun: "データセット",
      selectDataset: "データセットを選択",
      hubPlaceholder: "Hugging Face データセットを検索...",
      devicePlaceholder: "ローカルデータセットを検索...",
      useAsHubDataset: "Hugging Face データセットとして使用",
      hfCacheLabel: "HF キャッシュ",
      sourceRecipe: "レシピ",
      sourceUpload: "アップロード",
      sourceLocal: "ローカル",
      scanningLocal: "このデバイス上のデータセットをスキャン中…",
      couldntScan: "ローカルデータセットをスキャンできませんでした",
      someLocationsUnscanned:
        "一部のデータセット保存場所をスキャンできませんでした。",
      noLocalDatasets:
        "このデバイスにはまだデータセットがありません。Hub からダウンロードするか、レシピで作成するか、ファイルをアップロードしてください。",
      openDataRecipes: "データレシピを開く",
      searchingHub: "Hugging Face を検索中…",
      noDatasetsFound: "データセットが見つかりません。",
      tokenRejectedTitle: "Hugging Face トークンが拒否されました",
      tokenRejectedBody:
        "「設定」→「一般」でトークンを更新してから、再試行してください。",
      hubUnreachable: "Hugging Face に接続できませんでした",
      cantUseDataset: "データセットを使用できません",
      reasonInvalidHubId:
        "有効な Hugging Face データセット ID を入力してください。形式は repo または owner/repo で、使用できる文字は英字、数字、.、_、- のみです（各部分は最大 96 文字）。",
    },
    modelPicker: {
      noun: "モデル",
      selectModel: "モデルを選択",
      hubPlaceholder: "Hugging Face ID を検索または貼り付け...",
      devicePlaceholder: "ローカルモデルを検索するか、フォルダパスを貼り付け...",
      useAsHubModel: "Hugging Face モデルとして使用",
      useAsLocalPath: "ローカルパスとして使用",
      hfCacheLabel: "HF キャッシュ",
      sourceModelsFolder: "モデルフォルダ",
      sourceHfCache: "HF キャッシュ",
      sourceLmStudio: "LM Studio",
      sourceOllama: "Ollama",
      sourceCustomFolder: "カスタムフォルダ",
      sourceLocalModel: "ローカルモデル",
      scanningLocal: "ローカルモデルをスキャン中…",
      couldntScan: "ローカルモデルをスキャンできませんでした",
      someLocationsUnscanned:
        "一部のローカル保存場所をスキャンできませんでした。",
      noLocalModels: "ローカルモデルが見つかりません。",
      noLocalModelsHint:
        "上にフォルダパスを貼り付けるか、Hugging Face に切り替えてください。",
      searchingHub: "Hugging Face を検索中…",
      noModelsFound: "モデルが見つかりません。",
      tokenRejectedTitle: "Hugging Face トークンが拒否されました",
      tokenRejectedBody:
        "「設定」→「一般」でトークンを更新してから、再試行してください。",
      hubUnreachable: "Hugging Face に接続できませんでした",
      cantUseModel: "このモデルはトレーニングに使用できません",
      reasonTypeMismatch:
        "このモデルは、前のステップで選択したトレーニングタイプと一致しません。",
      reasonInvalidHubId:
        "有効な Hugging Face モデル ID を入力してください。形式は repo または owner/repo で、使用できる文字は英字、数字、.、_、- のみです（各部分は最大 96 文字）。",
      reasonEmptyId: "モデル ID またはローカルモデルのパスを入力してください。",
      reasonGguf: "GGUF モデルはトレーニングに使用できません。",
      reasonAdapter:
        "アダプターの出力はベーストレーニングモデルとして使用できません。",
      reasonNotTrainable:
        "このデバイス上のモデルはトレーニングできません。",
      reasonUnsupportedFormat:
        "このモデル形式はトレーニングでサポートされていません。",
      vramNeeds: "約 {est}GB VRAM が必要 (GPU: {total}GB)",
      vramTight: "約 {est}GB VRAM (GPU {total}GB ではギリギリです)",
      vramApprox: "約 {est}GB VRAM",
      vramOomBadge: "OOM",
      vramTightBadge: "ギリギリ",
    },
    methods: {
      qlora: {
        label: "QLoRA",
        hint: "4-bit 量子化。VRAM 使用量が最も少なく、起動も最速です。",
        note: "4-bit",
      },
      lora: {
        label: "LoRA",
        hint: "16-bit アダプター。品質とメモリ使用量のバランスを取ります。",
        note: "16-bit",
      },
      full: {
        label: "フルファインチューニング",
        hint:
          "すべての重みをトレーニングします。最高品質ですが、最も多くの VRAM が必要です。",
        note: "fp16",
      },
      cpt: {
        label: "継続事前学習",
        hint: "新しいドメインや言語向けに事前学習を継続します。",
        note: "継続",
      },
    },
    subtitles: {
      configure: "設定とトレーニングの開始",
      trainingInProgress: "トレーニング進行中",
      viewPastRuns: "過去のトレーニング実行を表示",
      viewingPastRun: "過去の実行を表示中",
    },
    tabs: {
      configure: "設定",
      currentRun: "現在の実行",
      history: "履歴",
    },
    loadingRuntime: "トレーニングランタイムを読み込み中...",
    checkingSupport: "このマシンのトレーニング対応を確認しています...",
    backToHistory: "履歴に戻る",
    dataset: {
      selectors: {
        subset: "サブセット",
        subsetTooltip: "使用するデータセットのサブセット（設定）を選択します。",
        trainSplit: "学習用分割",
        trainSplitTooltip: "学習に使用する分割を選択します。",
        evaluationSplit: "評価用分割",
        evaluationSplitTooltip:
          "評価に使用する分割を選択します。「なし」を選ぶと学習中に評価を行いません。",
        selectSubset: "サブセットを選択...",
        selectSplit: "分割を選択...",
        none: "なし",
        loading: "データセットの設定と分割を読み込んでいます...",
        manualTitle: "データセットのオプションを手動で入力",
        manualDescription:
          "使用する Hugging Face の設定名と分割名を正確に入力してください。",
        manualSubsetPlaceholder: "設定名（任意）",
        manualRequired: "学習用分割は必須です。",
        manualTooLong: "128 文字以内で入力してください。",
        manualInvalid: "この値には未対応の文字が含まれています。",
      },
      sourceAriaLabel: "データセットのソース",
      localDataset: "ローカルデータセット",
      localDatasetRows: " / {count} 行",
      huggingFaceDataset: "Hugging Face データセット",
      localDatasetMetadata: "ローカルデータセットのメタデータ",
      dataRecipeOutput: "データレシピの出力。",
      rows: "行数",
      columns: "列数",
      batches: "バッチ数",
      updated: "更新日時",
      evalDataset: "評価データセット",
      uploading: "アップロード中...",
      uploadEvalFile: "評価ファイルをアップロード",
      fileTooLarge: "ファイルが大きすぎます",
      fileTooLargeDescription:
        "{file} のサイズは {size} です。トレーニング用アップロードの上限は {limit} です。",
      documentRedirect: {
        title: "このファイルは先に変換する必要があります",
        genericFile: "このファイル",
        description:
          "{file} は素材であり、そのままトレーニングできるデータセットではありません。Data Recipes で文書をデータセットに変換してから、ここに戻ってファインチューニングしてください。",
        nextStepTitle: "おすすめの次のステップ",
        nextStepDescription:
          "Learning Recipes を開き、PDF grounded QA などの文書ベースのレシピから始めます。",
        openAction: "Learning Recipes を開く",
      },
      evalDatasetDescription: "オプション。提供されない場合は、トレーニングデータから一部が自動的に分割されます。",
      advanced: "高度な設定",
      targetFormat: "ターゲットフォーマット",
      targetFormatTooltip: "トレーニングデータのフォーマット。ほとんどのデータセットで自動検出が機能します。",
      streamingInfoAriaLabel: "データセットストリーミングの情報",
      streaming: {
        label: "ストリーミングを有効化",
        description:
          "Hugging Face のテキストデータセットをダウンロードせずにストリーミングします。",
        unavailable: "ストリーミングを利用できません。有効にするには:",
        completionsUnavailable:
          "データセットのストリーミングが有効な間は利用できません。",
        blockers: {
          source:
            "Hugging Face データセットを使用してください（ローカルアップロードや S3 ソースは使用できません）。",
          maxSteps:
            "最大ステップ数を 0 より大きく設定してください。ストリーミングデータセットの長さは事前に分かりません。",
          trainOnCompletions:
            "「アシスタントの応答のみ学習」をオフにしてください。",
          evalSplit:
            "個別の評価用分割を選択してください。評価は有効ですが、トレーニング用とは別の評価用分割が設定されていません。",
          visionModel: "ビジョンモデルはストリーミングをサポートしていません。",
          audioModel: "オーディオモデルはストリーミングをサポートしていません。",
          embeddingModel:
            "埋め込みモデルはストリーミングをサポートしていません（トレーニングにはデータセット全体が必要です）。",
          imageDataset:
            "このデータセットには画像が含まれているように見えるため、ストリーミングできません。",
          audioDataset:
            "このデータセットには音声が含まれているように見えるため、ストリーミングできません。",
          appleSilicon:
            "Apple Silicon (MLX) ではストリーミングをまだサポートしていません。",
        },
        options: {
          trainOnCompletions: "アシスタントの応答のみ学習",
          evaluation: "評価（個別の評価用分割が必要）",
        },
        notifications: {
          disabledForDetectedModality:
            "画像または音声データセットは全体をダウンロードする必要があるため、ストリーミングをオフにしました。設定を確認してから、もう一度トレーニングを開始してください。",
          turnedOffMaxSteps:
            "ストリーミングをオフにしました。ストリーミングには 0 より大きい固定の最大ステップ数が必要です。",
          adjusted:
            "ストリーミング向けに設定を調整しました。互換性のないオプションを無効にしました: {options}。",
          needsMaxSteps:
            "ストリーミングには固定の最大ステップ数が必要です（ストリーミングデータセットの長さは事前に分かりません）。先に最大ステップ数を 0 より大きく設定してください。",
          enabledAdjusted:
            "ストリーミングを有効にしました。互換性のないオプションを無効にしました: {options}。",
        },
      },
      auto: "自動",
      rawText: "生テキスト",
      trainSplitStart: "トレーニング分割の開始行",
      trainSplitStartTooltip: "開始行のインデックス（0から始まる包含的なインデックス）を指定して、データセットの一部のみをトレーニングします。最初の行から開始する場合は空のままにしてください。",
      trainSplitEnd: "トレーニング分割の終了行",
      trainSplitEndTooltip: "データセットに含める最後の行のインデックス（0から始まる包含的なインデックス）。たとえば、開始を0、終了を99に設定すると、最初の100行をトレーニングします。残りのすべての行を使用する場合は空のままにしてください。",
      endPlaceholder: "終了行",
      clear: "クリア",
      dropFileOrClick: "ここにファイルをドロップするか、クリックしてアップロード",
      uploadDetails: "アップロードの詳細",
      uploadDetailsTooltip: "1ファイルあたり最大 {limit}。PDF、DOCX、TXT はそのままではトレーニング用データセットとして使用できないため、先にレシピで変換してください。",
      viewDataset: "データセットを表示",
      uploadFailed: "アップロードに失敗しました",
      unknownError: "不明なエラー",
      unsupportedFileType: "サポートされていないファイル形式です",
      uploadOneFileType: "{types} ファイルを1つアップロードしてください。",
      datasetUploaded: "データセットをアップロードしました",
      evalDatasetUploaded: "評価データセットをアップロードしました",
      uploadOneFileAtATime: "一度に1つのファイルのみアップロードできます",
      uploadSingleFileDescription: "トレーニングデータセットのアップロードは単一のファイルのみ受け付けます。",
      previewLoadingHuggingFace:
        "Hugging Face からデータセットのプレビューを取得しています...",
      previewLoading: "プレビューを読み込んでいます...",
      mappingRequirements: {
        audioAndText: "音声とテキスト",
        imageAndText: "画像とテキスト",
        instructionAndOutput: "指示と出力",
        humanAndGpt: "human と gpt",
        userAndAssistant: "ユーザーとアシスタント",
      },
      mappingStatus: {
        heuristicTitle: "ヒューリスティックで検出されたマッピング",
        readyTitle: "マッピングの準備完了",
        requiredTitle: "データセット列をマッピング",
        heuristicDescription:
          "ヒューリスティックを使用して、以下の列マッピングを自動検出しました。列ヘッダーのドロップダウンで確認・調整するか、AI アシストを使用してより適切にマッピングしてください。",
        readyDescription:
          "問題ありません。このデータセットは自動的に変換されます。",
        requiredDescription:
          "ヘッダーのドロップダウンを使用して列にロールを割り当ててください。少なくとも {required} を割り当てる必要があります。",
      },
      s3: {
        title: "S3 構成",
        description: "Amazon S3 から .parquet, .json, .jsonl, または .csv データセットを読み込みます",
        bucket: "バケット名",
        bucketPlaceholder: "my-training-data-bucket",
        region: "AWS リージョン",
        regionPlaceholder: "us-east-1",
        prefix: "パスプレフィックス",
        prefixPlaceholder: "datasets/whisper/",
        accessKeyId: "アクセスキー ID",
        accessKeyIdPlaceholder: "AKIAIOSFODNN7EXAMPLE",
        secretAccessKey: "シークレットアクセスキー",
        secretAccessKeyPlaceholder: "AWS シークレットアクセスキーを入力してください",
        useIamRole: "IAM ロールを使用",
      },
    },
    params: {
      mode: {
        simple: "シンプル",
        advanced: "詳細",
        ariaLabel: "パラメーターモード",
      },
      projectName: "プロジェクト名",
      optional: "オプション",
      projectNameDescription: "トレーニング出力フォルダ名、エクスポートのデフォルト値、および履歴で使用されます。",
      loraSettings: "LoRA 設定",
      trainingHyperparameters: "トレーニングハイパーパラメーター",
      maxSteps: "最大ステップ数",
      epochs: "エポック数",
      useMaxSteps: "最大ステップ数を使用",
      useEpochs: "エポック数を使用",
      maxStepsTooltip: "オプティマイザーの総ステップ数を上書きします。",
      epochsTooltip: "データセット全体の完全な学習回数。",
      contextLength: "コンテキスト長",
      contextLengthTooltip: "トレーニングサンプルあたりの最大トークン数。",
      customContextLength: "カスタム値を入力",
      learningRate: "学習率",
      learningRateTooltip: "重み更新のステップサイズ。低い値ほど学習は遅くなりますが安定します。",
      learningRateDescription: "推奨値: LoRAは2e-4、CPTは5e-5、フルファインチューニングは2e-5",
      embeddingLearningRate: "埋め込み学習率",
      embeddingLearningRateTooltip:
        "CPT が embed_tokens をトレーニングする場合にのみ使用されます。埋め込みは LoRA の重みよりも不安定になりやすいため、通常はより小さな学習率が必要です。空のままにすると lr/10 が使用されます。一般的にはメインの学習率の 1/2～1/10 が目安です。語彙やドメイン固有トークンの適応が遅すぎる場合にのみ増やしてください。",
      rank: "Rank",
      rankTooltip: "低ランク行列の次元数。高いほど表現能力が向上します。",
      alpha: "Alpha",
      alphaTooltip: "LoRA 更新のスケール係数。通常は rank の 2 倍に設定します。",
      dropout: "Dropout",
      dropoutTooltip: "過学習を抑えるための LoRA レイヤーのドロップアウト確率。",
      visionLayers: "ビジョンレイヤー",
      languageLayers: "言語レイヤー",
      attentionModules: "Attention モジュール",
      mlpModules: "MLP モジュール",
      targetModules: "Target Modules",
      enableLora: "LoRA を有効化",
      trainWithLora: "LoRA でトレーニング",
      stableRank: "Stable Rank",
      memoryEfficient: "メモリ効率化",
      weightDecomposed: "重み分解",
      notSupportedAppleSilicon: "Apple Silicon ではサポートされていません",
      optimization: "最適化",
      schedule: "スケジュール",
      memory: "メモリ",
      optimizer: "オプティマイザー",
      optimizerTooltip: "最適化アルゴリズム。8-bit 版はメモリ使用量を削減します。ビジョンモデルには Fused が推奨されます。",
      optimizerTooltipMlx: "最適化アルゴリズム。デフォルトは AdamW です。Lion はメモリ使用量を抑えられますが、通常はより低い学習率が必要です。",
      lrScheduler: "学習率スケジューラー",
      lrSchedulerTooltip: "トレーニング中に学習率をどのように変化させるか。Linear は一定の割合で減少させ、Cosine は緩やかな曲線を描いて減少させます。",
      optimizerOptions: {
        adamw8bit: "AdamW 8-bit",
        pagedAdamw8bit: "Paged AdamW 8-bit",
        adamwBnb8bit: "AdamW BNB 8-bit",
        pagedAdamw32bit: "Paged AdamW 32-bit",
        adamwTorch: "AdamW (PyTorch)",
        adamwTorchFused: "AdamW (PyTorch Fused)",
      },
      lrSchedulerOptions: {
        linear: "Linear",
        cosine: "Cosine",
      },
      batchSize: "バッチサイズ",
      batchSizeTooltip: "ステップごとに処理されるサンプル数。高いほど多くの VRAM を使用します。",
      gradAccum: "勾配累積",
      gradAccumTooltip: "VRAM を追加消費せずに、疑似的に大きなバッチサイズをシミュレートします。",
      weightDecay: "Weight Decay",
      weightDecayTooltip: "過学習を防ぐための L2 正則化。",
      warmupSteps: "ウォームアップステップ数",
      warmupStepsTooltip: "安定性の向上を目的として、トレーニング開始時に学習率を徐々に増加させます。",
      scheduleEpochsTooltip: "データセット全体の完全な学習回数。0 に設定すると最大ステップ数に基づいて実行されます。",
      saveSteps: "保存ステップ間隔",
      saveStepsTooltip: "N ステップごとにチェックポイントを保存します。0 で無効化します。",
      evalSteps: "評価ステップ間隔",
      evalStepsTooltip: "評価を行う間隔を、総トレーニングステップに対する割合 (0-1) で指定します。0 に設定すると評価が無効になります。例: 0.01 = ステップの 1% ごとに評価を実行。",
      seed: "シード値",
      seedTooltip: "再現性のための乱数シード。",
      gradCheckpoint: "勾配チェックポイント",
      gradCheckpointTooltip: "アクティベーションを再計算することで、計算量と引き換えにメモリを節約します。",
      none: "なし",
      standard: "標準",
      enablePacking: "パッキングを有効化",
      assistantCompletionsOnly: "アシスタントの応答のみ学習",
      readMore: "詳細を読む",
    },
    training: {
      startTraining: "トレーニング開始",
      starting: "開始中...",
      loadingModel: "モデルを読み込み中...",
      checkingDataset: "データセットを確認中...",
      startFailed: "トレーニングの開始に失敗しました",
      startUnconfirmed:
        "トレーニングが開始されたか確認できませんでした。バックグラウンドで状態を確認しています。",
      stopFailed: "トレーニングの停止に失敗しました",
      trainingStillActiveTitle: "トレーニングはまだ実行中です",
      stopBeforeConfig:
        "先にトレーニングを停止してから、設定画面に戻ってください。",
      resumeFailed: "トレーニングの再開に失敗しました",
      resumeFailedTitle: "トレーニングを再開できませんでした",
      resumeUnavailable:
        "保存済みのチェックポイントがある、停止済みまたはエラー終了した実行のみ再開できます。",
      chooseModel: "モデルを選択",
      chooseDataset: "データセットを選択",
      chooseModelAndDataset: "モデルとデータセットを選択",
      modelUnverified:
        "このモデルの設定を確認できませんでした。接続または Hugging Face トークンを確認してから、再試行してください。",
      legacyDatasetScriptUnsupported:
        "この Hub データセットは従来のカスタムスクリプトに依存しているため、このトレーニングフローではサポートされていません。",
      hfModelAccessDenied:
        "Hugging Face がこのモデルへのアクセスを拒否しました。リポジトリへのアクセス権を持つ有効な Hugging Face トークンを追加し、必要な利用条件に同意してから再試行してください。",
      hfModelVerificationRateLimited:
        "Hugging Face のモデル検証はレート制限されています。しばらくしてから再試行してください。",
      hfModelVerificationFailed:
        "Hugging Face モデルを検証できませんでした。リポジトリ ID とアクセストークンを確認してください。",
      hfModelMetadataUnavailable:
        "Hugging Face のモデルメタデータは一時的に利用できません。トレーニングを開始する前に再試行してください。",
      datasetUnverified:
        "データセットがこのモデルと互換性があるか確認できませんでした。接続または Hugging Face トークンを確認してください。トレーニング開始時にもう一度確認します。",
      setupChanged:
        "確認中にトレーニング設定が変更されました。設定を確認してから、トレーニングをもう一度開始してください。",
      validation: {
        s3MultimodalUnsupported:
          "S3 データセットは、ビジョンまたはオーディオのトレーニングではまだサポートされていません。",
        s3BucketRequired: "先に S3 バケット名を入力してください。",
        s3CredentialsRequired:
          "S3 アクセスキーを指定するか、IAM ロールを有効にしてください。",
        modelRequired: "先にベースモデルを選択してください。",
        learningRatePositive: "0 より大きい学習率を入力してください。",
        embeddingLearningRateRange:
          "0 より大きく 1 より小さい埋め込み学習率を入力してください。",
        hfDatasetRequired:
          "先に Hugging Face データセットを選択してください。",
        hfDatasetSplitRequired:
          "先に学習用分割を選択または入力してください。",
        localDatasetRequired: "先にローカルデータセットを選択してください。",
        unsupportedDatasetSource:
          "サポートされていないデータセットソースです。",
      },
      uploadConfigTooltip: "保存された YAML 構成を読み込みます",
      saveConfigTooltip: "現在の構成を YAML としてダウンロードします",
      resetConfigTooltip: "モデルのデフォルト値にリセットします",
      configLoaded: "構成を読み込みました",
      failedToLoadConfig: "構成の読み込みに失敗しました",
      invalidYamlFile: "無効な YAML ファイルです",
      configTooLarge: "トレーニング構成ファイルが大きすぎます（最大 1 MiB）。",
      failedToReadFile: "ファイルの読み込みに失敗しました",
      failedToSaveConfig: "構成の保存に失敗しました",
      parametersReset: "パラメーターをモデルのデフォルト値にリセットしました",
      audioIncompatible: "このモデルはオーディオをサポートしていません。オーディオ対応のモデルに切り替えるか、オーディオ以外のデータセットを選択してください。",
      visionIncompatible: "テキストモデルはマルチモーダルデータセットと互換性がありません。ビジョンモデルに切り替えるか、テキストのみのデータセットを選択してください。",
      cancelTitle: "トレーニングをキャンセル",
      cancelDescription: "現在のトレーニング実行をキャンセルしますか？",
      continueAction: "トレーニングを続行",
      cancelAction: "トレーニングをキャンセル",
      stopTitle: "トレーニングを停止",
      stopDescription:
        "現在のトレーニング実行をどのように停止するか選択してください。「停止して保存」では後で再開できるチェックポイントが保存されますが、保存せずに停止した場合は再開できません。",
      stopAction: "停止",
      stopping: "停止中...",
      stopAndSave: "停止して保存",
      compareInChat: "チャットで比較",
      exportModel: "モデルをエクスポート",
      milestone: "マイルストーン",
      halfwayDone: "半分完了しました。トレーニングの進捗が 50% を超えました。",
      doneNextStep: "トレーニングが完了しました。次のステップ: ベースモデルとファインチューニング後の出力を比較します。",
    },
    history: {
      title: "履歴",
      filesDeleted: "ファイルを削除しました",
      deleteArtifactsLabel: "ディスク上のアダプターファイルも削除",
      deleteArtifactsDescription:
        "保存済みのアダプターやチェックポイントを含む、この実行の出力フォルダを削除します。",
      deleteArtifactsSharedNote:
        "別の実行がこの出力フォルダを共有しています。このフォルダを使用する最後の実行が削除されるまで、ファイルは保持されます。",
      artifactsKeptShared:
        "実行を削除しました。別の実行が同じフォルダを使用しているため、アダプターファイルは保持されました。",
      deleteArtifactsActiveError:
        "進行中のトレーニングがこれらのファイルを使用しています。ファイルを削除する前にトレーニングを停止してください。",
      deleteArtifactsFailed:
        "実行は削除されましたが、関連ファイルを削除できませんでした。",
      deleteArtifactsRetainedError:
        "アダプターファイルを削除できなかったため、トレーニング実行は履歴に保持されました。",
      emptyDescription: "トレーニング実行がまだありません。「設定」タブで最初のトレーニングを開始してください。",
      loadError: "トレーニング実行の読み込みに失敗しました",
      deleteError: "トレーニング実行の削除に失敗しました。もう一度お試しください。",
      retry: "再試行",
      loadMore: "さらに読み込む",
      loading: "読み込み中...",
      loadingRun: "トレーニング実行を読み込み中...",
      runNotFound: "実行が見つかりません",
      deleteTitle: "トレーニング実行を削除しますか？",
      deleteDescription: "これにより、このトレーニング実行とすべてのメトリクスが永久に削除されます。この操作は取り消せません。",
      resumeTraining: "トレーニングを再開",
      resuming: "再開中...",
      deleteRun: "実行を削除",
      loss: "Loss",
      steps: "ステップ数",
      lossTrendSparkline: "Loss トレンドスパークライン",
      relativeJustNow: "たった今",
      status: {
        completed: "完了",
        stopped: "停止",
        error: "エラー",
        running: "実行中",
        continued: "継続",
      },
      message: {
        completed: "トレーニングが完了しました",
        stopped: "トレーニングが停止しました",
        running: "トレーニング進行中",
        errored: "トレーニングでエラーが発生しました",
      },
      copyPreviewLink: "プレビューリンクをコピー",
      previewLinkCopied: "プレビューリンクをコピーしました",
      previewLinkCopyFailed: "リンクをコピーできませんでした",
    },
    charts: {
      settings: "チャート設定",
      settingsDescription: "トレーニングを実行したまま、チャートの表示を微調整します。",
      openSettings: "チャート設定を開く",
      viewWindow: "表示ウィンドウ",
      viewWindowDescription: "最新のステップのみを表示するか、全履歴を表示するか選択します。",
      window: "ウィンドウ",
      all: "すべて",
      trainingLoss: "トレーニング Loss",
      trainingLossDescription: "オーバーレイと EMA スムージングを制御します。",
      smoothing: "スムージング",
      smoothingDescription: "右に動かすほど滑らかになります。`0` は生データです。",
      showRawLoss: "生の Loss を表示",
      showSmoothedLoss: "スムージングされた Loss を表示",
      showAverageLine: "平均線を表示",
      scaleAndCleanup: "スケールとクリーンアップ",
      linear: "Linear",
      log: "Log",
      noClip: "クリップなし",
      clipP99: "p99 でクリップ",
      clipP95: "p95 でクリップ",
      lossAxis: "Loss 軸",
      gradientNormAxis: "勾配ノルム軸",
      learningRateAxis: "学習率軸",
      resetDefaults: "デフォルトにリセット",
      loss: "Loss",
      smoothed: "スムージング済み",
      evalLoss: "評価 Loss",
      learningRate: "学習率",
      lr: "LR",
      gradNorm: "Grad Norm",
      gradientNorm: "勾配ノルム",
      step: "ステップ {step}",
      averageValue: "平均 {value}",
      waitingForFirstEvaluationStep: "最初の評価ステップを待機中...",
      evaluationNotConfigured: "評価が設定されていません",
      evalChartWillAppear: "eval_steps に達するとチャートが表示されます",
      setEvalDatasetAndSteps: "評価 Loss を追跡するには、評価データセットと eval_steps を設定してください",
    },
    progress: {
      title: "トレーニング進捗",
      liveMetrics: "リアルタイムトレーニングメトリクス",
      exportGguf: "GGUF へエクスポート",
      openConfig: "トレーニング構成を開く",
      configLabel: "トレーニング構成",
      hyperparams: "ハイパーパラメーター",
      epochs: "エポック数",
      batchSize: "バッチサイズ",
      learningRate: "学習率",
      optimizer: "オプティマイザー",
      maxSteps: "最大ステップ数",
      contextLength: "コンテキスト長",
      warmupSteps: "ウォームアップステップ数",
      rank: "Rank",
      alpha: "Alpha",
      dropout: "Dropout",
      variant: "バリアント",
      epoch: "エポック {value}",
      percentComplete: "{percent}% 完了",
      stepProgress: "ステップ {current} / {total}",
      loss: "Loss",
      lr: "LR",
      gradNorm: "Grad Norm",
      project: "プロジェクト",
      model: "モデル",
      method: "手法",
      elapsed: "経過時間: {value}",
      eta: "残り時間 (ETA): {value}",
      stepsPerSecond: "{value} ステップ/秒",
      noStepsPerSecond: "-- ステップ/秒",
      tokens: "トークン数: {value}",
      gpuMonitor: "GPU モニター",
      live: "ライブ",
      utilization: "使用率",
      temperature: "温度",
      vram: "VRAM",
      power: "電力",
      phase: {
        idle: "アイドル",
        downloadingModel: "モデルをダウンロード中",
        downloadingDataset: "データセットをダウンロード中",
        loadingModel: "モデルを読み込み中",
        loadingDataset: "データセットを読み込み中",
        configuring: "構成中",
        training: "トレーニング中",
        finalizing: "モデルを保存中",
        completed: "完了",
        error: "エラー",
        stopped: "停止",
      },
    },
    trainingStart: {
      ready: "準備完了",
      downloading: "ダウンロード中",
      preparing: "準備中",
      left: "残り {eta}",
      downloaded: "{size} ダウンロード済み",
      terminalStart: "> unsloth トレーニングを開始します...",
      preparingResources: "> モデルとデータセットを準備中...",
      gettingReady: "> 実行の準備を整えています...",
      waitingForFirstStep: "> {message} | 最初のステップを待機中... ({step})",
      resumingTraining: "トレーニングを再開しています...",
      startingTraining: "トレーニングを開始しています...",
      dataset: "データセット",
      datasetStreaming: "データセット: ストリーミング（完全なダウンロードなし）",
      modelWeights: "モデルの重み",
    },
  },
} satisfies DeepPartialMessageTree<typeof en>;
