// Japanese translations
window.LANG_JA = {
  // Common
  common: {
    save: "保存",
    cancel: "キャンセル",
    confirm: "確認",
    loading: "読み込み中...",
    success: "成功",
    failed: "失敗",
    delete: "削除",
    edit: "編集",
    add: "追加",
    enable: "有効",
    disable: "無効",
    enabled: "有効",
    disabled: "無効",
    yes: "はい",
    no: "いいえ",
    on: "オン",
    off: "オフ",
    apply: "適用",
    reset: "リセット",
    refresh: "更新",
    close: "閉じる",
    back: "戻る",
    next: "次へ",
    previous: "前へ",
    submit: "送信",
    action: "操作",
    chinese: "中文",
    traditionalChinese: "繁體中文",
    english: "English",
    spanish: "Español",
    japanese: "日本語",
    korean: "한국어",
    german: "Deutsch",
    french: "Français",
    portuguese: "Português",
    russian: "Русский",
    italian: "Italiano",
    turkish: "Türkçe",
    continue: "続行",
    copy: "コピー",
    copied: "コピー済み"
  },

  preview: {
    flvRequired: "FLVストリームを有効にしてください。",
    flvOrHlsRequired: "FLVまたはHLSのライブストリームを少なくとも1つ有効にしてください。",
    hlsUnsupportedEnableFlv: "このブラウザはHLSプレビューに対応していません。FLVストリームを有効にしてください。"
  },

  play: {
    mainFlvRequired: "メインストリームのFLVを有効にする必要があります",
    browserFlvUnsupported: "このブラウザはFLV再生に対応していません。Chrome、Edge、Firefoxなどの最新ブラウザを使用してください"
  },

  // Page titles
  title: {
    ndi: "NDI",
    encoder: "H.265/H.264 エンコーダー",
    status: "ステータス",
    mainStream: "メインストリーム",
    subStream1: "サブストリーム1",
    subStream2: "サブストリーム2",
    subStream3: "サブストリーム3",
    videoSettings: "映像設定",
    audioSettings: "音声設定",
    advancedSettings: "詳細設定",
    osdMain: "OSD - メインストリーム",
    osdSub1: "OSD - サブストリーム1",
    osdSub2: "OSD - サブストリーム2",
    osdSub3: "OSD - サブストリーム3",
    logoUpload: "ロゴアップロード",
    network: "ネットワーク設定",
    record: "録画設定",
    gb28181: "GB28181",
    wifi: "WIFI設定",
    password: "パスワード設定",
    serial: "シリアル転送",
    update: "アップグレードとバックアップ",
    reboot: "再起動",
    timedReboot: "定時再起動",
    factoryReset: "工場出荷時設定に戻す",
    recordFiles: "録画ファイル",
    netTest: "ネットワークテスト",
    recordSet: "録画設定",
    alirtcTokenPage: "AliRTC Token"
  },

  // Menu
  menu: {
    status: "ステータス",
    encoder: "エンコーダー",
    mainStream: "メインストリーム",
    subStream1: "サブストリーム1",
    subStream2: "サブストリーム2",
    subStream3: "サブストリーム3",
    videoSettings: "映像設定",
    audioSettings: "音声設定",
    advancedSettings: "詳細設定",
    osd: "OSD",
    logoUpload: "ロゴアップロード",
    system: "システム",
    scheduleRecord: "スケジュール録画",
    network: "ネットワーク",
    record: "録画",
    gb28181: "GB28181",
    wifi: "WIFI",
    password: "パスワード",
    serial: "シリアル転送",
    update: "アップグレードとバックアップ",
    reboot: "再起動",
    timedReboot: "定時再起動",
    factoryReset: "工場出荷時設定に戻す"
  },

  // Status page
  status: {
    // Device status
    deviceStatus: "デバイスステータス",
    runningTime: "稼働時間：",
    runtimeDayWithTime: "{0}日 {1}",
    deviceTime: "デバイス時刻：",
    syncTime: "（デバイスに時刻同期）",
    cpuUsage: "CPU使用率：",
    memoryUsage: "メモリ使用率：",
    codecUsage: "エンコードリソース使用率：",
    encPpsUsage: "エンコードリソース使用率：",
    memoryWarning: "（起動後1分経ってもメモリ使用率が高い場合は、一部のHLSストリームを無効にするかビットレートを下げてください）",
    cpuWarning: "（CPU使用率が85%以上の場合は、一部のストリームを無効にするかサブストリームの解像度を下げてください）",
    networkStatus: "ネットワーク状態：",
    inputVideo: "入力映像：",
    inputBeyondCapability: "（デバイスの能力を超えています。ソースを1080pに設定してください）",
    inputVideoStatus: "入力映像状態：",
    vgaAutoAdjust: "（VGA自動調整）",
    capturedFrames: "キャプチャした映像フレーム：",
    lostFrames: "ロストした映像フレーム：",
    audioSampleRate: "入力音声サンプルレート：",
    inputAudioStatus: "入力音声状態：",
    capturedAudioFrames: "キャプチャした音声フレーム：",
    bFrameMode: "高度圧縮モード：",
    bFrameModeEnabled: "有効",
    packetsSent: "送信パケット：",
    netTxRate: "ネットワーク送信速度：",
    netTestLink: "（ネットワークテスト＆システムログ）",
    packetsDropped: "ドロップしたパケット：",
    videoTcpConnections: "TCP映像接続：{0}",
    tcpDetailsLink: "（詳細）",
    canAccessInternet: "インターネット接続可能",
    canAccessInternetIP: "インターネットIP接続可能",
    lanOnly: "LANのみ",
    localNetwork: "ローカルネットワーク",

    // Recording status
    recordStatus: "録画ステータス",
    recordType: "録画タイプ：",
    diskStatus: "ディスク状態：",
    diskNotExist: "未検出",
    mountStatus: "マウント状態：",
    notMounted: "未マウント",
    mounted: "マウント済み",
    totalSpace: "総容量：",
    freeSpace: "空き容量：",
    recordingStatus: "録画状態：",
    diskFull: "ディスク満杯",
    diskSlow: "ディスク速度不足",
    recordFileList: "録画ファイル一覧",
    notRecording: "録画停止中",
    recording: "録画中",
    recordingNoVideo: "（映像入力がない場合、ファイルが保存されない可能性があります）",
    startRecord: "（録画開始）",
    stopRecord: "（録画停止）",
    usbTfCard: "USB/TFカード",

    // DHCP status
    dhcpStatus: "DHCPステータス",
    ip: "IP：",
    subnetMask: "サブネットマスク：",
    gateway: "ゲートウェイ：",

    // WIFI status
    wifiStatus: "WIFIステータス",
    wifiDisabled: "WIFI：無効",
    wifiState: "WIFI状態：",
    wifiSSID: "WIFI SSID：",
    wifiIP: "WIFI IP：",
    wifiMAC: "WIFI MAC：",
    wifiRSSI: "WIFI信号（RSSI）：",
    wifiFreq: "WIFI周波数：",
    wifiConnected: "接続済み",
    wifiDisconnected: "切断",
    wifiConnecting: "接続中（接続に時間がかかる場合は、WIFI設定を確認してください）",

    noSigPicOnly: "Only transmit no-signal image:",

    timeHour: "時間",
    timeMinute: "分",
    timeSecond: "秒",

    // Streams
    mainStream: "メインストリーム",
    subStream1: "サブストリーム1",
    subStream2: "サブストリーム2",
    subStream3: "サブストリーム3",
    streamDisabled: "無効（エンコード能力が上限に達しました：メインストリームと各サブストリームの解像度×フレームレートの合計が 1080p@90 の上限を超えたため、このサブストリームは自動的に停止されました。メインストリームまたは前のサブストリームの解像度／フレームレートを下げて再試行してください）",
    codecType: "コーデック：",
    encodeResolution: "エンコード解像度：",
    videoBitrate: "映像ビットレート：",
    realTimeBitrate: "リアルタイムビットレート：",
    realTimeFps: "リアルタイムFPS：",
    videoEncoded: "エンコード済み映像：",
    reconnect: "（再接続）",
	    previewWebRTC: "映像プレビュー（WebRTC）",
	    previewHTML5: "映像プレビュー（HTML5）",
	    previewLowLatency: "動画プレビュー（低遅延）",

    // URL related
    disabled: "無効",
    connected: "接続済み",
    disconnected: "切断",
    statusNormal: "正常",
    statusNoData: "データなし",
    bufferPackets: "バッファパケット",
    bufferPacketsLabel: "バッファパケット：",
    pushSpeed: "プッシュ速度",
    pushSpeedLabel: "プッシュ速度：",
    pushed: "プッシュ済み",
    pushedLabel: "プッシュ済み：",
    sendBytesLabel: "送信データ：",
    memoryUsed: "使用メモリ",
    memoryUsedLabel: "使用メモリ：",
    cacheFiles: "キャッシュファイル",
    cacheFilesLabel: "キャッシュファイル：",
    multicastUrl: "マルチキャストURL：",
    mjpgUrl: "MJPGストリームURL：",
    jpgUrl: "JPGストリームURL：",
    tsUrl: "TSストリームURL：",
    flvUrl: "FLVストリームURL：",
    hlsTsUrl: "HLS TSストリームURL：",
    hlsMp4Url: "HLS MP4ストリームURL：",
    mp4Url: "MP4ストリームURL：",
    rtspUrl: "RTSPストリームURL：",
    rtmpUrl: "RTMPストリームURL：",
    srtListenerUrl: "SRTリスナーURL：",
    webrtcP2pUrl: "WebRTC P2PストリームURL：",
    rtmpPushUrlAny: "RTMP(S)/RTSP配信URL {0}：",
    rtmpPushUrlAny0: "RTMP(S)/RTSP配信URL 0：",
    rtmpPushUrlAny1: "RTMP(S)/RTSP配信URL 1：",
    rtmpPushUrlAny2: "RTMP(S)/RTSP配信URL 2：",
    rtmpPushUrl: "RTMP(S)配信URL {0}：",
    rtspPushUrl: "RTSP配信URL {0}：",
    srtCallerUrl: "SRTコーラーURL：",
    hlsPushUrl: "HLS配信URL：",
    icecastPushUrl: "ICECAST配信URL：",
    shoutcastPushUrl: "Shoutcast配信URL：",
    whipLabel: "WHIP：",
    viewers: "視聴者数",
    viewersLabel: "視聴者数：",

    // TRTC status
    trtcRoomId: "TRTCルームID：",
    inRoom: "ルーム内",
    notInRoom: "ルーム外",
    initializingServer: "サーバー接続初期化中",
    serverDisconnected: "サーバー切断",
    connectingServer: "サーバーに接続中",
    serverConnected: "サーバー接続済み",
    networkUnknown: "ネットワーク状態不明",
    networkExcellent: "ネットワーク優良",
    networkGood: "ネットワーク良好",
    networkNormal: "ネットワーク普通",
    networkPoor: "ネットワーク不良",
    networkBad: "ネットワーク劣悪",
    networkNotMeet: "ネットワークがTRTCの最小要件を満たしていません",
    errorCode: "エラーコード",
    errorCodeLabel: "エラーコード：",
    trtcError1: "一般エラー、ログファイルを確認してください",
    trtcError100: "ビジネスロジックエラー：不正な呼び出し",
    trtcError101: "ビジネスロジックエラー：不正なパラメータ",
    trtcError102: "現在読み取れません、再試行してください",
    trtcError103: "ネットワークに接続できません",
    trtcError200: "入室失敗",
    trtcError201: "user_sigパラメータが無効です",
    trtcError202: "ルームIDの形式が無効です",
    trtcError203: "sdk_app_idが無効です",
    trtcError204: "サービスが利用できません。パッケージ残り分数が0より大きいか、Tencent Cloudアカウントが未払いでないか確認してください",
    trtcError205: "サーバーによりルームから退出させられました",

    // WHIP status
    whipInitializing: "初期化中",
    whipConnected: "接続済み",
    whipDisconnected: "切断",
    whipUnknown: "不明な状態",
    alirtcLabel: "AliRTC：",
    alirtcConnecting: "接続中",
    alirtcConnected: "接続済み",
    alirtcDisconnected: "未接続",
    alirtcUnknown: "不明な状態",
    alirtcRoomId: "AliRTCルームID：",
    alirtcRoomIdLabel: "ルームID：",
    alirtcUserIdLabel: "ユーザーID：",
    alirtcUserNameLabel: "ユーザー名：",
    alirtcVideoBitrateLabel: "映像：",
    alirtcAudioBitrateLabel: "音声：",
    alirtcRttLabel: "RTT：",

    // GB28181
    gb28181: "GB28181：",
    gb28181Online: "オンライン",
    gb28181Offline: "オフライン"
  },

  // Reboot page
  tcp: {
    pageTitle: "TCP接続状態",
    subtitle: "現在の HTTP / HTTPS / RTSP / RTMP 接続と最近切断された記録",
    refreshAria: "更新状態",
    reading: "読み取り中",
    refreshNow: "今すぐ更新",
    summaryAria: "接続概要",
    activeConnections: "アクティブ接続",
    waitingSnapshot: "スナップショット待機中",
    tcpVideoConnections: "TCP映像接続",
    pendingData: "送信待ちデータ",
    maxPendingPerConnection: "接続ごとの最大送信待ち",
    recentlyClosed: "最近切断",
    recentRecords: "インターフェースが保持する最近の記録",
    stateAria: "接続状態",
    allRecords: "すべての記録",
    currentConnections: "現在の接続",
    typeAria: "接続タイプ",
    allTypes: "すべてのタイプ",
    tcpVideoOnly: "TCP映像のみ",
    nonVideoConnections: "映像以外の接続",
    searchPlaceholder: "IP、ポート、プロトコル、リクエスト、URI、ストリームIDを検索",
    columnState: "状態",
    columnConnection: "接続",
    columnClient: "クライアント",
    columnLocalService: "ローカルサービス",
    columnRequestStream: "リクエスト / 映像ストリーム",
    columnSent: "送信済み",
    columnPending: "送信待ち",
    columnDropped: "破棄",
    loadingSnapshot: "接続スナップショットを読み取り中…",
    tableNote: "このページを開いたとき、または「今すぐ更新」をクリックしたときだけ読み取ります。更新リクエスト自体が一時的に未分類の HTTP 接続として表示される場合があります。送信待ちデータにはカーネルの socket キューは含まれません。",
    lessThanSecond: "<1秒",
    durationSeconds: "{0}秒",
    durationMinutesSeconds: "{0}分{1}秒",
    durationHoursMinutes: "{0}時間{1}分",
    durationDaysHours: "{0}日{1}時間",
    unclassified: "未分類",
    dropQueuePackets: "キューパケット数超過",
    dropQueueBytes: "キューバイト数超過",
    dropNone: "なし",
    noConnections: "現在の接続はありません",
    pendingConnectionsSummary: "{0}接続に送信待ちデータ · {1}パケット",
    maxPendingConnection: "接続 #{0} · {1}",
    noPending: "送信待ちデータなし",
    stateActive: "アクティブ",
    stateClosed: "切断済み",
    connectedFor: "接続時間 {0}",
    closedDuration: "継続 {0} · {1}前に切断",
    unclassifiedRequest: "未分類リクエスト",
    streamDescription: "チャンネル {0} · グループ {1} / ストリーム {2}",
    noVideoStream: "映像ストリームなし",
    tcpVideo: "TCP映像",
    packets: "{0}パケット",
    packetsAndReason: "{0}パケット · {1}",
    noMatches: "現在の条件に一致する接続はありません",
    filterResult: "{0} / {1} 件を表示",
    invalidXml: "応答は有効な XML ではありません",
    readSuccess: "読み取り成功",
    parseFailed: "解析失敗",
    snapshotParseFailed: "接続スナップショットを解析できません",
    readFailed: "読み取り失敗",
    endpointReadFailed: "/debug?cmd=tcp を読み取れません。デバイス接続を確認するか、再度ログインしてください。",
    readTimeout: "読み取りタイムアウト",
    timeoutMessage: "デバイスは10秒以内に接続スナップショットを返しませんでした。",
    networkError: "ネットワークエラー",
    networkMessage: "デバイスに接続できません。ネットワークを確認してください。",
  },

  reboot: {
    title: "再起動",
    description: "このボタンをクリックするとエンコーダーを再起動します。",
    button: "再起動",
    success: "再起動コマンドを送信しました！",
    failed: "再起動に失敗しました！",
    confirm: "デバイスを再起動してもよろしいですか？"
  },

  // Factory reset page
  reset: {
    title: "工場出荷時設定に戻す",
    description: "このボタンをクリックすると、エンコーダーの全設定を工場出荷時のデフォルト状態に復元します。",
    button: "リセット",
    success: "工場出荷時設定への復元に成功しました！システムは自動的に再起動します。しばらくお待ちください。",
    failed: "工場出荷時設定への復元に失敗しました！",
    confirm: "工場出荷時設定に復元してもよろしいですか？"
  },

  // Scheduled reboot page
  scheduleRecord: {
    title: "スケジュール録画",
    allDay: "終日",
    timeRange: "時間帯指定",
    segment: "時間帯",
    to: "〜",
    monday: "月",
    tuesday: "火",
    wednesday: "水",
    thursday: "木",
    friday: "金",
    saturday: "土",
    sunday: "日",
    nextDay: "(翌日)",
    hint: "各時間帯は 終日 か 時間帯指定 にでき、曜日を個別に選べます。時間帯指定で終了が開始より前なら夜間（翌日まで録画、開始日の曜日で判定）。先にネットワーク設定で時刻(NTP)を合わせないと作動しません。",
    saveSuccess: "設定に成功しました！",
    saveFailed: "設定に失敗しました！",
    invalidTime: "時刻が正しくありません！",
    needWeekday: "少なくとも1つの曜日を選択してください！",
  },
  timedReboot: {
    title: "定時再起動",
    enable: "定時再起動",
    enableLabel: "定時再起動：",
    timeLabel: "再起動時刻：",
    enabled: "有効",
    disabled: "無効",
    time: "再起動時刻",
    weekdays: "再起動曜日",
    everyday: "毎日",
    monday: "月曜日",
    tuesday: "火曜日",
    wednesday: "水曜日",
    thursday: "木曜日",
    friday: "金曜日",
    saturday: "土曜日",
    sunday: "日曜日",
    save: "保存",
    saveSuccess: "設定を保存しました！",
    saveFailed: "設定に失敗しました！",
    invalidTime: "時刻の値が無効です！"
  },

  // Network test page
  netTest: {
    title: "ネットワークテスト＆システムログ",
    command: "コマンド：",
    run: "実行",
    address: "アドレス：",
    result: "結果：",
    invalidAddr: "有効なアドレスを入力してください！"
  },

  // Record files page
  recordFiles: {
    title: "ファイル一覧",
    fileName: "ファイル名",
    time: "時刻",
    fileSize: "ファイルサイズ",
    action: "操作",
    delete: "削除",
    confirmDelete: "削除してもよろしいですか",
    deleteSuccess: "削除コマンドを送信しました！",
    deleteFailed: "削除に失敗しました！",
    noFiles: "録画ファイルがありません",
    loadError: "読み込みに失敗しました"
  },

  // Password settings page
  password: {
    title: "パスワード設定",
    oldPassword: "現在のパスワード",
    oldPasswordLabel: "現在のパスワード：",
    newPassword: "新しいパスワード",
    newPasswordLabel: "新しいパスワード：",
    confirmPassword: "パスワード確認",
    confirmPasswordLabel: "パスワード確認：",
    save: "保存",
    success: "設定を保存しました！",
    failed: "パスワードの設定に失敗しました。現在のパスワードが正しいか確認してください！",
    mismatch: "新しいパスワードが一致しません！",
    empty: "パスワードを空にすることはできません！"
  },

  // Encoding common (only actually used keys)
  encoding: {
    sameAsInput: "入力解像度と同じ",
    mp3Required: "音声エンコードをMP3に設定してください！",
    choosePrimaryColor: "メインカラーを選択",
    toggleTheme: "テーマを切り替え"
  },

  // OSD settings
  osd: {
    title: "OSD設定",
    globalSettings: "OSD 全体設定",
    followVideoTransformLabel: "映像の回転・ミラーに追従：",
    mainStream: "メインストリームOSD",
    subStream1: "サブストリーム1 OSD",
    subStream2: "サブストリーム2 OSD",
    subStream3: "サブストリーム3 OSD",
    alpha: "透明度",
    alphaLabel: "透明度：",
    alphaRange: "[0-255]",
    alphaError: "透明度は0〜128の整数である必要があります！",
    region: "領域",
    regionLabel: "領域：",
    region1: "領域1",
    region2: "領域2",
    region3: "領域3",
    region4: "領域4",
    type: "タイプ",
    typeLabel: "タイプ：",
    typeText: "テキスト",
    typeImage: "画像",
    typeScroll: "スクロールテキスト",
    typeTime: "時刻",
    typeAudioStatus: "音声状態",
    typeVolumeMeter: "音量メーター",
    timeFormatLabel: "時間形式：",
    position: "位置",
    positionLabel: "位置：",
    speed: "速度",
    speedLabel: "速度：",
    xLabel: "X：",
    yLabel: "Y：",
    textLabel: "テキスト：",
    fontSize: "フォントサイズ",
    fontSizeLabel: "フォントサイズ：",
    fontSizeRange: "[8-72]",
    backgroundColor: "背景色",
    backgroundLabel: "背景色：",
    sizeLabel: "サイズ（幅×高）：",
    sizeHint: "[px]",
    sizeError: "{0}：サイズ（幅×高）は有効な正の整数である必要があります",
    bgTransparent: "透明",
    bgWhite: "白",
    bgBlack: "黒",
    fontColor: "フォント色",
    fontColorLabel: "フォント色：",
    pickColor: "色を選択",
    closeColor: "閉じる",
    logoLabel: "ロゴ：",
    success: "設定を保存しました！",
    failed: "設定に失敗しました！",
    xRangeError: "{0}のX値は0〜{1}の整数である必要があります！",
    yRangeError: "{0}のY値は0〜{1}の整数である必要があります！",
    textEmpty: "{0}のテキストを空にすることはできません！",
    fontSizeError: "{0}のフォントサイズは8〜72の整数である必要があります！",
    speedRangeError: "{0}の速度値は0〜30の整数である必要があります！",
    positionRangeError: "{0}の位置値は0〜{1}の整数である必要があります！",
    selectLogo: "{0}のロゴを選択してください！",
    webrtcPreview: "ビデオプレビュー"
  },

  // LOGO upload
  logo: {
    title: "ロゴアップロード",
    logoLabel: "ロゴ：",
    upload: "アップロード",
    hint: "500KB 未満の画像をアップロードしてください。対応形式：PNG / JPG / BMP（透過は alpha チャンネル付きの PNG または 32 ビット BMP を使用）。",
    hint2: "ファイル名は logo1 / logo2 / logo3 / logo4、拡張子は .png / .jpg / .jpeg / .bmp。",
    hint3: "例：logo1.png、logo1.jpg、logo1.jpeg、logo1.bmp",
    noFileSelected: "アップロードするファイルを選択してください！",
    invalidFile: "要件に従って画像をアップロードしてください！",
    uploadSuccess: "アップロードに成功しました！",
    uploadFailed: "アップロードに失敗しました！",
    imageSizeExceeded: "画像ファイルサイズが制限を超えています！",
    imageResolutionExceeded: "画像ファイルの解像度が制限を超えています！",
    storageInsufficient: "アップグレードファイルが大きすぎます。ストレージ容量が不足しています！",
    listTitle: "アップロード済み LOGO",
    refresh: "更新",
    preview: "プレビュー",
    logoFile: "LOGO ファイル",
    fileType: "種類",
    fileSize: "サイズ",
    operation: "操作",
    loading: "読み込み中...",
    emptyList: "アップロード済み LOGO はありません",
    loadListFailed: "LOGO リストの読み込みに失敗しました",
    confirmDelete: "{0} を削除しますか？\n同名の PNG/BMP/OSD ファイルも削除されます。この LOGO が使用中の場合、対応する画像 OSD はクリアされます。",
    deleteSuccess: "削除しました！",
    deleteFailed: "削除に失敗しました！"
  },

  // WIFI settings
  wifi: {
    title: "WIFI設定",
    mode: "モード",
    ap: "アクセスポイント",
    sta: "クライアントモード",
    ssid: "SSID",
    password: "パスワード",
    security: "セキュリティ",
    channel: "チャンネル",
    scan: "スキャン",
    connect: "接続",
    disconnect: "切断",
    status: "状態",
    connected: "接続済み",
    disconnected: "切断",
    signalStrength: "信号強度",
    basicSettings: "基本設定",
    wifiModule: "Wifiモジュール：",
    wifiMode: "Wifiモード：",
    staMode: "STAモード",
    apMode: "APモード",
    mainConfig: "WIFIメイン設定",
    backupConfig1: "WIFIバックアップ設定1",
    backupConfig2: "WIFIバックアップ設定2",
    apModeSettings: "APモード",
    wifiList: "Wifi一覧：",
    wifiEssid: "Wifi ESSID：",
    wifiPassword: "Wifiパスワード：",
    wifiDhcp: "Wifi DHCP：",
    wifiIp: "Wifi IP：",
    wifiNetmask: "Wifiネットマスク：",
    wifiGateway: "Wifiゲートウェイ：",
    backupEnable1: "バックアップ設定1：",
    backupEnable2: "バックアップ設定2：",
    wifiBand: "Wifi帯域：",
    wifiChannel: "Wifiチャンネル：",
    refresh: "更新",
    success: "設定を保存しました！",
    failed: "設定の保存に失敗しました！",
    mainConfigEmpty: "WIFIメイン設定：{0}を空にすることはできません！",
    mainConfigInvalid: "WIFIメイン設定：{0}の形式が無効です！",
    backupConfigEmpty: "WIFI {0}：{1}を空にすることはできません！",
    backupConfigInvalid: "WIFI {0}：{1}の形式が無効です！",
    ipAddr: "IPアドレス",
    netmask: "ネットマスク",
    gateway: "ゲートウェイ",
    essidEmpty: "WiFi名を空にすることはできません！",
    passwordTooShort: "WiFiパスワードは8文字以上である必要があります！"
  },


  // Upgrade and backup
  updateBackup: {
    title: "システムアップグレード",
    uploadTitle: "ファームウェアと設定のアップロード",
    backupTitle: "ファームウェアと設定のバックアップ",
    systemVersion: "システムバージョン",
    systemVersionLabel: "システムバージョン：",
    hardware: "ハードウェア",
    hardwareLabel: "ハードウェア：",
    selectFile: "ファイルを選択",
    selectFileLabel: "ファイルを選択：",
    uploadHint: "アップロードファイル名：up.rar または box.ini",
    uploadHintEncrypted: "アップロードファイル名：up.bin または box.ini",
    uploadWarning: "同時にアップロードしないでください。アップロード中は電源を切らないでください。",
    upload: "アップロード",
    backupFirmware: "ファームウェアのバックアップ",
    backupConfig: "設定のバックアップ",
    noFileSelected: "アップロードするファイルを選択してください！",
    uploadSuccess: "アップロードに成功しました。システムを再起動してください！",
    uploadFailed: "アップロードに失敗しました！",
    kernelUpdating: "カーネルの更新には数分かかります。更新中は電源を切らないでください。完了するとデバイスは自動的に再起動します。手動で再起動する必要はありません。",
    kernelUpdatingBin: "カーネルの更新には数分かかります。更新中は電源を切らないでください。完了するとデバイスは自動的に再起動します。手動で再起動する必要はありません！",
    imageSizeExceeded: "画像ファイルサイズが制限を超えています！",
    imageResolutionExceeded: "画像ファイルの解像度が制限を超えています！",
    storageInsufficient: "アップグレードファイルが大きすぎます。ストレージ容量が不足しています！"
  },

  // Serial transport settings
  serial: {
    title: "シリアル転送",
    frpTitle: "FRPクライアント設定",
    serialTitle: "シリアルポートパススルー",
    enable: "有効",
    disable: "無効",
    enableLabel: "有効：",
    serverAddr: "サーバーアドレス",
    serverAddrLabel: "サーバーアドレス：",
    serverPort: "サーバーポート",
    serverPortLabel: "サーバーポート：",
    serverToken: "サーバートークン",
    serverTokenLabel: "サーバートークン：",
    channel: "チャンネル",
    channel1: "チャンネル1",
    channel2: "チャンネル2",
    channel3: "チャンネル3",
    channel4: "チャンネル4",
    protocolLabel: "プロトコル：",
    localPort: "ローカルポート",
    localPortLabel: "ローカルポート：",
    remotePort: "リモートポート",
    remotePortLabel: "リモートポート：",
    serialMode: "シリアルモード",
    serialModeLabel: "モード：",
    server: "サーバー",
    client: "クライアント",
    baudRate: "ボーレート",
    baudRateLabel: "ボーレート：",
    listenPort: "リッスンポート",
    listenPortLabel: "リッスンポート：",
    save: "保存",
    success: "設定を保存しました。デバイスを再起動してください！",
    failed: "設定に失敗しました！",
    emptyError: "設定を空にすることはできません！",
    remoteAddrError: "リモートサーバーアドレスが無効です（有効なIPまたはホスト名を入力してください）！",
    portRangeError: "TCPリッスンポートは1〜65535の整数である必要があります！",
    frpAddrEmpty: "FRPサーバーアドレスを空にすることはできません！",
    frpPortError: "FRPサーバーポートは1〜65535の整数である必要があります！"
  },

  // Advanced Settings
  advanced: {
    title: "詳細設定",
    // Section titles
    videoInput: "映像入力",
    avTransmission: "映像/音声伝送",
    recordSettings: "録画設定",
    hlsSettings: "HLS設定",
    networkTransmission: "ストリーム伝送",
    serviceSettings: "サービス設定",
    logSettings: "ログ設定",
    encoderParams: "エンコーダーパラメータ",
    imageEnhancement: "画像補正",
    autoRestart: "自動再起動",
    // Video Input
    edidSelect: "EDID選択：",
    colorGamut: "色域：",
    colorRange: "色範囲：",
    bFrameMode: "Advanced compression mode:",

    interlaceMode: "インターレースモード：",
    noSignal: "信号なし：",
    noSigPicOnly: "Only transmit no-signal image:",

    vgaAutoAdjust: "起動時VGA自動調整：",
    interlaceWeaving: "ウィービング（フィールド結合）",
    interlaceBottom: "ボトムフィールドのみ",
    interlaceTop: "トップフィールドのみ",
    interlaceBobbing: "ボビング（フィールドからフレームへ）",
    noSignalHide: "非表示",
    noSignalImage: "Show no-signal image",
    noSignalColor: "単色表示",
    // A/V Transmission
    videoOnly: "映像のみ：",
    audioOnly: "音声のみ：",
    avSync: "映像/音声同期：",
    audioDelay: "音声遅延（ms）：",
    syncAuto: "自動",
    syncResample: "リサンプル",
    audioDelayHint: "負の値は音声を早め、正の値は遅らせます。映像/音声同期調整にのみ使用してください。",
    // Recording Settings
    recordType: "録画タイプ：",
    cycleRecord: "循環録画：",
    diskOverwriteOldest: "満杯時に最古を自動削除：",
    noRecordNoSig: "信号なしで録画しない：",
    recordSplitTime: "録画分割時間（秒）：",
    // HLS Settings
    hlsSplitTime: "HLSセグメント時間（秒）：",
    hlsBufferNum: "HLSセグメント数：",
    hlsIndexUri: "HLSグローバルインデックスURI：",
    // Network Transmission
    tsMuxer: "TSマルチプレクサ：",
    sliceNumber: "SLICE Number:",

    netDropThreshold: "パケットドロップ閾値：",
    tsOnce: "送信あたりのTSパケット数：",
    rtspPackType: "RTSPカプセル化：",
    multicastType: "マルチキャストタイプ：",
    enableSap: "SAP有効：",
    mtuSize: "MTUサイズ：",
    ethSpeed: "Ethernet speed:",

    natAddr: "NAT mapped address:",

    udpTtl: "UDP TTL：",
    udpSockBuf: "UDP SOCKET_BUF_SIZE：",
    rtpH264PacketMode: "RTP H264パケット化：",
    packetizeByAccessUnit: "packetize_by_access_unit",
    packetizeByNalu: "packetize_by_nalu",
    vlcCompat: "VLC互換",
    ffmpegCompat: "FFMPEG互換",
    esStream: "ESストリーム",
    tsStream: "TSストリーム",
    // Service Settings
    tsRtspAuth: "TS/RTSP認証必須：",
    httpNoAuth: "Web認証なしアクセス：",
    netCheck: "ネットワーク状態チェック：",
    telnetService: "Telnetサービス：",
    sshService: "SSHサービス：",
    ndiService: "NDIサービス：",
    sambaService: "Sambaサービス：",
    onvifService: "ONVIFサービス：",
    onvifLocation: "ONVIF Location:",
    onvifMode: "ONVIFモード：",
    onvifModeLegacy: "Legacy XML（HTTP/ONVIF共有ポート）",
    onvifModeProfileST: "Profile S/T（専用ONVIFポート）",
    onvifModeProfileSCompat: "Profile S Hikvision互換（専用ONVIFポート）",
    onvifPassword: "ONVIF password required:",

    rtspDefaultStream: "RTSPデフォルトストリーム：",
    vmixCompat: "VMix互換：",
    readOnlyConfig: "Lock all settings:",

    telnetLan: "LANのみ",
    // Log Settings
    localLog: "ローカルログサービス：",
    trtcLogLevel: "TRTC SDKログレベル：",
    alirtcLogLevel: "AliRTC SDKログレベル：",
    sdkLogDebug: "デバッグ",
    sdkLogInfo: "情報",
    sdkLogWarning: "警告",
    sdkLogError: "エラー",
    sdkLogFatal: "致命的",
    sdkLogNone: "なし",
    lokiAddr: "Lokiサーバーアドレス：",
    lokiPort: "Lokiサーバーポート：",
    // Encoder Parameters
    sliceSplit: "SLICE分割：",
    sliceBytes: "SLICEバイト：",
    minQp: "MIN_QP：",
    maxQp: "MAX_QP：",
    deblocking: "Deblocking filter:",
    deblockingAlpha: "Deblocking alpha:",
    deblockingBeta: "Deblocking beta:",



    debreath: "デブリージング：",
    sar: "PAR:",
    cbrOnlyHint: "レートコントロールモードがCBRに設定されている場合のみ有効",
    // Image Enhancement
    contrastEnhance: "コントラスト補正：",
    sharpnessEnhance: "シャープネス補正：",
    lumaSfStrength: "輝度空間ノイズ除去：",
    lumaTfStrength: "輝度時間ノイズ除去：",
    chromaSfStrength: "色差空間ノイズ除去：",
    chromaTfStrength: "色差時間ノイズ除去：",
    // Auto Restart
    kickAllOnChange: "入力変更時にユーザーを切断：",
    noVideoReboot: "映像なしで自動再起動：",
    noAudioReboot: "音声なしで自動再起動：",
    picStillRestart: "Restart on frozen video:",

    // Button
    save: "保存",
    // Messages
    success: "設定を保存しました。デバイスを再起動してください！",
    failed: "設定に失敗しました！",
    emptyError: "設定を空にすることはできません！",
    netDropError: "パケットドロップ閾値は50〜50000の整数である必要があります！",
    tsOnceError: "TS packets per send must be an integer between 3-128!",
    sliceError: "SLICE Number must be an integer between 1-255!",
    minQpError: "MIN_QPは1〜35の整数である必要があります！",
    maxQpError: "MAX_QPはMIN_QPより大きく、最大50である必要があります！",
    udpTtlError: "UDP TTLは1〜254の整数である必要があります！",
    contrastError: "コントラスト補正は0〜63の整数である必要があります！",
    sharpnessError: "シャープネス補正は0〜16の整数である必要があります！",
    lumaSfError: "輝度空間ノイズ除去は0〜255の整数である必要があります！",
    lumaTfError: "輝度時間ノイズ除去は0〜63の整数である必要があります！",
    chromaSfError: "色差空間ノイズ除去は0〜255の整数である必要があります！",
    chromaTfError: "色差時間ノイズ除去は0〜32の整数である必要があります！",
    hlsSplitError: "HLSセグメント時間は3〜10の整数である必要があります！",
    hlsBufferError: "HLSセグメント数は3〜10の整数である必要があります！",
    hlsUriError: "HLSグローバルインデックスURIの形式が無効です！",
    udpSockBufError: "UDP SOCKET_BUF_SIZEは0〜20971520の整数である必要があります！",
    mtuError: "MTUサイズは500〜1500の整数である必要があります！",
    deblockingAlphaError: "Deblocking alpha must be an integer between -6 and 6!",
    deblockingBetaError: "Deblocking beta must be an integer between -6 and 6!",


    audioCacheError: "音声遅延は-2000〜2000の整数である必要があります！",
    recordSplitError: "録画分割時間は60〜7200の整数である必要があります！",
    lokiPortError: "Lokiサーバーポートは1〜65535である必要があります"
  },

  // Audio Encoding Settings
  audioEnc: {
    blkInput: "入力",
    blkEncode: "エンコード",
    blkVolume: "音量",
    blkVolumeNote: "手動固定ゲイン",
    blkAgc: "自動ゲイン",
    blkAgcNote: "変動する音量を自動的に目標値へ調整",
    blkDenoise: "ノイズ低減",
    blkDenoiseNote: "背景ノイズを抑制、CPU負荷高め、通常はオフ",
    mute: "ミュート",
    gain0: "0 dB（変更なし）",
    agcLevel: "AGC目標レベル(dBFS)：",
    agc: "自動ゲイン制御：",
    agcLevelError: "AGC目標レベルは -42 ～ -12 dBFS の範囲で入力してください！",
    title: "音声設定",
    // Tabs
    tabAudio: "音声設定",
    tabOnvif: "ONVIF音声",
    // Tips
    tipAudio: "デジタル音量ゲインを高く設定しすぎないでください。歪みやノイズの原因になります。<br>ほとんどの場合、ゲインは0に設定してください。<br>全体の音量はフロントエンドのコントロールで調整してください。",
    tipVolVsAgc: "<b>音量ゲイン vs 自動ゲイン（AGC）</b><br>音量ゲインは手動で設定する固定ゲインです。正の値で増幅、負の値で減衰し、入力信号によって変化しないため、レベルが安定して予測できるソースに適しています。<br>自動ゲイン（AGC）は入力信号のリアルタイムの強弱に応じてゲインを自動調整し、出力を目標レベル付近に保ち、大小に変動する音を滑らかにします。<br>AGCを有効にした場合は、音量ゲインを0 dBに保ち、AGCだけでレベルを制御させて、二重の制御が重ならないようにしてください。",
    tipAgcLevel: "<b>AGC目標レベル（dBFS）</b><br>最終的なレベルの基準を設定します。目標が0 dBFSに近いほど出力は大きくなりますが、過渡的なピークのための余裕（ヘッドルーム）は少なくなり、クリップしやすくなります。<br>• -18 dBFS（推奨）：音量と余裕のバランスが取れ、ほとんどの場面に適します。<br>• -12 dBFS：最も大きい設定で、ライブ配信など大音量が必要な場面に適します。ただし余裕は12 dBしかなく、突発的な大きな音でクリップしやすくなります。<br>• -20 ~ -24 dBFS：音声やライブ演奏など、ピークの変動が大きい入力に適します。<br>• -30 ~ -42 dBFS：高ゲインのマイク入力や、騒音の大きい環境に適します。",
    tipOnvif: "NVRに接続するには、RTSP G711エンコードを「有効にして8Kにリサンプル」に設定してください",
    // Audio Settings
    audioInput: "音声入力：",
    sampleRate: "サンプルレート：",
    codec: "コーデック：",
    channel: "チャンネル：",
    bitrate: "ビットレート：",
    digitalGain: "デジタル音量ゲイン：",
    analogGain: "アナログ音量ゲイン：",
    denoise: "ノイズ除去：",
    denoiseStrength: "ノイズ除去強度（dB）：",
    pteG711: "PTEストリームG711：",
    // Audio Input Options
    inputDigital: "デジタル",
    inputAnalog: "アナログ",
    inputMixed: "ミックス",
    // Sample Rate Options
    sampleSameAsInput: "入力と同じ",
    // ONVIF Audio
    rtspG711: "RTSP G711エンコード：",
    rtspG711Resample: "有効にして8Kにリサンプル",
    g711Codec: "G711コーデック：",
    // Buttons and Messages
    save: "保存",
    success: "設定を保存しました！",
    failed: "設定に失敗しました！",
    emptyError: "設定を空にすることはできません！",
    bitrateError: "ビットレートは{0}〜{1}の整数である必要があります！",
    gainError: "デジタル音量ゲインは-20〜10の整数である必要があります！",
    denoiseError: "ノイズ除去強度は1〜100の整数である必要があります！",
    analogVolEmpty: "アナログ音量ゲインは空にできません！",
    analogVolError: "アナログ音量ゲインは{0}〜{1}の整数である必要があります！"
  },

  // Recording Settings Page
  recordSet: {
    title: "録画設定",
    // Card Titles
    statusTitle: "録画ステータス",
    settingsTitle: "録画設定",
    // Status
    recordType: "録画タイプ：",
    diskStatus: "ディスク状態：",
    currentAddr: "現在のアドレス：",
    mountDevice: "マウントデバイス：",
    mountStatus: "マウント状態：",
    totalSpace: "総容量：",
    freeSpace: "空き容量：",
    recordStatus: "録画状態：",
    recordFiles: "録画ファイル：",
    fileList: "ファイル一覧",
    // Disk Status
    diskNotExist: "未検出",
    diskFull: "ディスク満杯",
    diskSlow: "ディスク速度不足",
    mounted: "マウント済み",
    unmounted: "未マウント",
    notRecording: "録画停止中",
    recording: "録画中",
    noVideoWarning: "（映像入力がない場合、ファイルが保存されない可能性があります）",
    // Action Links
    startRecord: "（録画開始）",
    stopRecord: "（録画停止）",
    mountDisk: "（ディスクをマウント）",
    unmountDisk: "（ディスクをアンマウント）",
    deleteAll: "（全録画削除）",
    // Settings
    storageType: "ストレージタイプ：",
    partition: "パーティション：",
    partitionInfo: "パーティション情報：",
    diskInfo: "ディスク情報：",
    formatDisk: "（ディスクをフォーマット）",
    exampleAddr: "アドレス例：",
    storageAddr: "ストレージアドレス：",
    username: "ユーザー名：",
    password: "パスワード：",
    // Storage Type Options
    storageDisabled: "無効",
    storageUsb: "USB/TFカード",
    storageNfs: "NFS",
    storageSamba: "SAMBA/CIFS",
    // Format Dialog
    formatTitle: "ディスク情報",
    formatDevice: "デバイス：",
    formatType: "タイプ：",
    formatModel: "モデル：",
    formatRemovable: "リムーバブル：",
    formatPartTable: "パーティションテーブル：",
    formatCapacity: "容量：",
    formatPartitions: "パーティション情報",
    formatPartition: "パーティション",
    formatAvailable: "（空き）",
    formatTotal: "（合計）",
    formatConfirm: "ディスクのフォーマットを続行しますか？",
    formatDanger: "警告：フォーマットするとパーティションが再作成され、すべてのデータが失われます。続行しますか？",
    formatContinue: "続行",
    formatCancel: "キャンセル",
    formatConfirmBtn: "確認",
    formatting: "フォーマット中...",
    // Buttons and Messages
    save: "保存",
    yes: "はい",
    no: "いいえ",
    success: "設定を保存しました！",
    failed: "設定に失敗しました！",
    formatSuccess: "フォーマットに成功しました！",
    formatFailed: "フォーマットに失敗しました！",
    deleteSuccess: "削除コマンドを送信しました！",
    deleteFailed: "削除に失敗しました！",
    confirmDeleteAll: "すべての録画ファイルを削除しますか？",
    recordingWarning: "現在録画中です。アンマウント前に録画を停止してください。",
    diskMountedWarning: "ディスクがマウントされています。フォーマット前にアンマウントしてください。",
    diskMountedSettingWarning: "ディスクがマウントされています。設定変更前にアンマウントしてください。",
    storageLockedHint: "マウント中は変更できません。変更するにはディスクをアンマウントしてください。",
    partitionNotExist: "パーティションが存在しません",
    partitionRemoved: "（削除済み）",
    unpartitioned: "(未パーティション)",
    unpartitionedHint: "ディスクにパーティションがありません。先にパーティション再作成とフォーマットを行ってください",
    // Address Validation
    addrEmpty: "ストレージアドレスを空にすることはできません！",
    addrNfsFormat: "無効なアドレス形式です。「:」セパレータが必要です",
    addrIpError: "無効なIPアドレス形式です",
    addrPathSlash: "パスは「/」で始まる必要があります",
    addrPathInvalid: "パスに無効な文字が含まれています",
    addrSambaStart: "アドレスは「\\\\」で始まる必要があります",
    addrSambaFormat: "無効なアドレスです。IPとパスは「\\」で区切る必要があります",
    addrPathEmpty: "パスを空にすることはできません",
    addrPathChars: "パスに無効な文字が含まれています。英字、数字、アンダースコア、ハイフンのみ使用できます",
    // Disk size info "{available} / {total}"
    diskSizeInfo: "{0}（空き）/ {1}（合計）"
  },
  // GB28181 Settings
  gb28181: {
    title: "GB28181設定",
    basicSettings: "基本設定",
    heartbeatSettings: "ハートビート設定",
    sipServerSettings: "SIPサーバー設定",
    authSettings: "認証設定",
    enable: "有効：",
    disabled: "無効",
    enabled: "有効",
    localSipPort: "ローカルSIPポート：",
    videoChannelId: "映像チャンネルID：",
    streamSelect: "ストリーム選択：",
    mainStream: "メインストリーム",
    subStream1: "サブストリーム1",
    subStream2: "サブストリーム2",
    subStream3: "サブストリーム3",
    regExpiry: "登録有効期限：",
    heartbeatCycle: "ハートビート周期：",
    maxHeartbeatTimeout: "最大ハートビートタイムアウト：",
    sipServerId: "SIPサーバーID：",
    sipServerDomain: "SIPサーバードメイン：",
    sipServerAddr: "SIPサーバーアドレス：",
    sipServerPort: "SIPサーバーポート：",
    sipUserId: "SIPユーザーID：",
    sipPassword: "SIPパスワード：",
    emptyError: "設定を空にすることはできません！",
    localPortError: "ローカルSIPポートは1〜65535の整数である必要があります！",
    serverPortError: "SIPサーバーポートは1〜65535の整数である必要があります！",
    regExpiryError: "登録有効期限は100〜100000の整数である必要があります！",
    heartbeatError: "ハートビート周期は5〜3600の整数である必要があります！",
    maxTimeoutError: "最大ハートビートタイムアウトは3〜255の整数である必要があります！",
    success: "設定を保存しました！",
    failed: "設定に失敗しました！"
  },
  // Video Source Settings
  videoSource: {
    title: "映像ソース設定",
    videoInput: "映像入力設定",
    brightAdjust: "入力輝度調整",
    videoOutput: "映像出力設定",
    inputFormat: "映像入力形式：",
    yuv422: "YUV422",
    yuv420: "YUV420（回転対応）",
    rotation: "回転角度：",
    flipMirror: "反転/ミラー：",
    flipDisable: "無効",
    mirror: "ミラー",
    flip: "反転",
    flipAndMirror: "ミラー＆反転",
    cropEnable: "映像クロップ：",
    cropLeft: "クロップ開始点（左）：",
    cropTop: "クロップ開始点（上）：",
    cropWidth: "クロップ幅：",
    cropHeight: "クロップ高さ：",
    monochrome: "モノクロ:",
    colorMode: "入力カラーモード：",
    unknown: "不明",
    brightEnable: "輝度調整：",
    gain: "ゲイン：",
    gainHint: "[10-1000]、デフォルト100",
    offset: "オフセット：",
    offsetHint: "[0-100]、デフォルト0",
    note: "注意：",
    brightNote1: "1. 輝度 = （元の輝度 × ゲイン / 100）+ オフセット",
    brightNote2: "2. 輝度調整はRGB入力カラーモードでのみ機能します",
    outputRes: "映像出力解像度：",
    auto: "自動",
    cscEnable: "CSC調整：",
    luminance: "輝度：",
    contrast: "コントラスト：",
    hue: "色相：",
    saturation: "彩度：",
    cscHint: "[0-100]、デフォルト50",
    rotateHint: "180°・270°の回転は、0°/90°の回転と反転/ミラーの組み合わせで実現できます。",
    emptyError: "設定を空にすることはできません！",
    gainError: "ゲインは10〜1000の整数である必要があります！",
    offsetError: "オフセットは0〜100の整数である必要があります！",
    leftError: "左の値は0〜{0}の整数である必要があります！",
    topError: "上の値は0〜{0}の整数である必要があります！",
    widthError: "幅の値は400〜{0}の整数である必要があります！",
    heightError: "高さの値は400〜{0}の整数である必要があります！",
    luminanceError: "輝度は0〜100の整数である必要があります！",
    contrastError: "コントラストは0〜100の整数である必要があります！",
    hueError: "色相は0〜100の整数である必要があります！",
    saturationError: "彩度は0〜100の整数である必要があります！",
    success: "設定を保存しました！",
    failed: "設定に失敗しました！"
  },
  // Network Settings
  network: {
    title: "ネットワーク設定",
    ipv4Title: "IPv4設定",
    ipv6Status: "IPv6ステータス",
    ipv6Title: "IPv6設定",
    ipv6TypeGlobal: "グローバルIP",
    ipv6TypeLinkLocal: "リンクローカルIP",
    ipv6TypeUniqueLocal: "ローカルIP",
    ipv6TypeMulticast: "マルチキャストIP",
    ipv6TypeGeneric: "IP",
    ipv6StatusGateway: "ゲートウェイ",
    dnsTitle: "DNS設定",
    ntpTitle: "NTP設定",
    portTitle: "ポート設定",
    httpsTitle: "HTTPS設定",
    hostnameTitle: "ホスト名設定",
    dhcp: "DHCP：",
    dhcpHint: "DHCPを有効にすると、ONVIF対応検索ツールでデバイスを検出できます。",
    ipAddr: "IPアドレス：",
    netmask: "サブネットマスク：",
    gateway: "有線ゲートウェイ：",
    macAddr: "MACアドレス：",
    defaultGateway: "デフォルトゲートウェイ：",
    lanFirst: "有線優先",
    wifiFirst: "WIFI優先",
    g4First: "4G/5G優先",
    ipv6Mode: "モード：",
    ipv6Disable: "無効",
    ipv6Auto: "自動設定",
    ipv6Manual: "手動設定",
    ipv6Addr: "IPv6アドレス：",
    ipv6Prefix: "IPv6プレフィックス長：",
    ipv6Gateway: "IPv6デフォルトゲートウェイ：",
    dns1: "DNS1：",
    dns2: "DNS2：",
    ntpSync: "NTP同期：",
    ntpServer: "サーバー：",
    timezone: "タイムゾーン：",
    httpPort1: "HTTPポート1：",
    httpPort2: "HTTPポート2：",
    rtspPort1: "RTSPポート1：",
    rtspPort2: "RTSPポート2：",
    onvifPort: "ONVIFポート：",
    sadpProtocol: "SADPポート：",
    httpsService: "HTTPSサービス：",
    httpsPort1: "HTTPSポート1：",
    httpsPort2: "HTTPSポート2：",
    httpsPrivatePass: "HTTPS秘密鍵パスワード：",
    socks5Title: "SOCKS5 Proxy",
    socks5Enable: "SOCKS5 Proxy:",
    socks5Host: "Proxy Host:",
    socks5Port: "Proxy Port:",
    socks5User: "Username:",
    socks5Pass: "Password:",
    socks5AuthHint: "(Optional authentication, username and password must both be set)",
    privatePassHint: "（パスワードがない場合は空欄）",
    uploadCert: "証明書アップロード：",
    uploadCertHint: "（ファイル名はprivate.keyまたはpublic.crtである必要があります。同時にアップロードしたり、アップロード中に電源を切らないでください）",
    uploadBtn: "証明書をアップロード",
    deleteCert: "証明書を削除",
    hostname: "ホスト名：",
    mdnsService: "mDNSサービス：",
    mdnsAddr: "mDNSアクセスアドレス：",
    portRange: "[1-65535]",
    prefixRange: "[0-128]",
    emptyError: "設定を空にすることはできません！",
    ipError: "無効なIPアドレス形式です！",
    netmaskError: "無効なサブネットマスク形式です！",
    gatewayError: "無効なゲートウェイ形式です！",
    dns1Error: "無効なプライマリDNS形式です！",
    dns2Error: "無効なセカンダリDNS形式です！",
    macError: "無効なMACアドレス形式です！",
    ipv6Error: "IPv6アドレスの形式が正しくありません！",
    ipv6PrefixError: "IPv6プレフィックス長が正しくありません（1-128）！",
    ipv6GatewayError: "IPv6ゲートウェイの形式が正しくありません！",
    httpPort1Error: "HTTPポート1は1〜65535の整数である必要があります！",
    httpPort2Error: "HTTPポート2は1〜65535の整数である必要があります！",
    rtspPort1Error: "RTSPポート1は1〜65535の整数である必要があります！",
    rtspPort2Error: "RTSPポート2は1〜65535の整数である必要があります！",
    httpsPort1Error: "HTTPSポート1は1〜65535の整数である必要があります！",
    httpsPort2Error: "HTTPSポート2は1〜65535の整数である必要があります！",
    onvifPortError: "ONVIFポートは1〜65535の整数である必要があります！",
    sadpPortError: "SADPポートは1〜65535の整数である必要があります！",
    httpBothDisableError: "HTTPポート1とポート2の両方を無効にすることはできません！",
    httpsBothDisableError: "HTTPSが有効な場合、ポート1とポート2の両方を無効にすることはできません！",
    socks5HostError: "Invalid SOCKS5 proxy host!",
    socks5PortError: "SOCKS5 proxy port must be an integer between 1-65535!",
    socks5AuthPairError: "SOCKS5 username and password must both be set or both be empty!",
    socks5AuthLengthError: "SOCKS5 username and password must not exceed 255 characters!",
    ntpEmptyError: "NTPサーバーを空にすることはできません！",
    ntpFormatError: "無効なNTPサーバーアドレスです！",
    hostnameEmptyError: "ホスト名を空にすることはできません！",
    hostnameFormatError: "無効なホスト名です！\n\n1. ホスト名は63文字以内である必要があります！\n2. 英字（a-z）、数字（0-9）、ハイフン（-）、アンダースコア（_）のみ使用できます！\n3.「-」と「_」は連続、単独、または先頭/末尾に使用できません！",
    deleteCertConfirm: "アップロードしたHTTPS証明書を削除してもよろしいですか？",
    selectFile: "アップロードするファイルを選択してください！",
    uploadSuccess: "アップロードに成功しました！",
    uploadFailed: "アップロードに失敗しました！",
    fileSizeError: "画像ファイルサイズが制限を超えています！",
    fileResError: "画像の解像度が制限を超えています！",
    spaceError: "アップグレードファイルが大きすぎます。ストレージ容量が不足しています！",
    deleteSuccess: "削除に成功しました！",
    deleteFailed: "削除に失敗しました！",
    successReboot: "設定を保存しました。デバイスを再起動してください！",
    failed: "設定に失敗しました！"
  },

  // Output Settings Page (Stream Settings)
  output: {
    // Tab names
    tabs: {
      ndi: "NDI",
      encode: "エンコード",
      ts: "TS/マルチキャスト",
      mjpeg: "MJPEG",
      rtsp: "RTSP",
      rtmp: "RTMP",
      srt: "SRT",
      webrtc: "WebRTC",
      trtc: "TRTC",
      alirtc: "AliRTC",
      hls: "HLS",
      other: "MP4/FLV/その他"
    },

    // Encoding settings
    encode: {
      codecType: "コーデックタイプ：",
      frameRate: "フレームレート：",
      sameAsInput: "入力フレームレートと同じ",
      auto: "自動",
      customFrameRate: "カスタムフレームレート",
      customFrameRateLabel: "カスタムフレームレート：",
      gopInterval: "GOPインターバル（フレーム）：",
      bitrate: "ビットレート（kbit）：",
      qualityRange: "画質範囲：",
      qualityStrict: "厳格（高）",
      qualityTight: "やや厳格（やや高〜高）",
      qualityNormal: "普通（中〜高）",
      qualityLoose: "緩め（やや低〜高）",
      qualityWide: "広範囲（低〜高）",
      mjpegQuality: "MJPEG品質：",
      outputResolution: "出力解像度：",
      h264Profile: "H.264プロファイル：",
      bitrateControl: "ビットレート制御：",
      cbrStableRange: "CBR Stability Range:",
      cbrStableMin: "min",
      cbrStableMax: "max",
      bFramesMode: "B-Frame Mode:",
      bFramesDisable: "Disabled",
      bFramesIbp: "IBP",
      bFramesIbbp: "IBBP",
      // Tips
      tipCodec: "H.265はH.264より高画質です。デコーダーが対応している場合はH.265を使用してください。",
      tipVbr: "VBRモードでは、ビットレートは「画質範囲」で調整されます。画質範囲はQP値を制限します。<br>「やや高〜高」または「高」を選択すると実際のビットレートが非常に高くなり、設定ビットレートは意味をなさなくなります。<br>「やや低〜高」の場合のみビットレートに参考値があります。",
      tipCbr: "「強制CBR」はCATVシステム用で、安定したTSビットレートを確保します。1080Pでの「強制CBR」では、ビットレートは5000kbit/s以上、8000kbit/s推奨です。",
      tipGop: "入力映像フレームレートがnの場合、一般的な値は60、50、30、25です。<br>GOPインターバルは通常n × 2に設定し、一般的な値は120、100、60、50です。<br>フレームレートを自動に設定した場合、n > 30ならエンコードフレームレートはn / 2、それ以外はnと等しくなります。"
    },

    // TS/Multicast settings
    ts: {
      tsUri: "TSストリームURL：",
      multicastIp: "マルチキャストIP：",
      multicastPort: "マルチキャストポート：",
      sapName: "SAP名：",
      tsVideoPid: "TS映像PID：",
      tsAudioPid: "TS音声PID：",
      tsTransportStreamId: "TSトランスポートストリームID：",
      tsOriginalNetworkId: "TSオリジナルネットワークID：",
      tsPmtStartPid: "TS PMT開始PID：",
      tsStartPid: "TS開始PID：",
      tsTablesVersion: "TSテーブルバージョン：",
      tsServiceId: "TSサービスID：",
      tsServiceName: "TSサービス名：",
      tsProviderName: "TSプロバイダ名：",
      tsPcrPeriod: "TS PCR周期（ms）：",
      conformSystemB: "System B（DVB）準拠：",
      tsNullPacket: "TSヌルパケット：",
      noInsert: "挿入なし",
      insert12: "挿入（1.2倍）",
      insert13: "挿入（1.3倍）",
      insert15: "挿入（1.5倍）",
      insert20: "挿入（2倍）",
      insert25: "挿入（2.5倍）",
      tsTdt: "TS TDT：",
      // Tips
      tipMulticast: "マルチキャストアドレスにはブロードキャストまたはユニキャストアドレスも使用でき、システムが自動検出します。",
      tipVlc: "VLCでマルチキャストを再生できない場合、コンピュータに複数のネットワークアダプタがないか確認し、別のアダプタに切り替えてみてください。",
      tipSap: "SAP名はVLCのプレイリスト→ローカルネットワークなど、対応デバイスで確認できます。",
      tipAdvanced: "TS詳細設定は通常調整不要です。",
      tipIptv: "IPTVシステムに接続する場合、TSヌルパケットは1.3倍に調整してください。デバイスが自動的にヌルパケットを挿入し、安定したビットレートを確保します。<br>この設定は「強制CBR」モードにのみ適用されます。"
    },

    // MJPEG settings

    mjpeg: {

      jpgUri: "JPG Image URL:",

      mjpgUri: "MJPG Stream URL:",

      // Tips

      tipJpg: "JPG is a still image; MJPG is a motion image.",

      tipMjpg: "Both can be opened directly in a browser."

    },


    // RTSP settings
    rtsp: {
      rtspUri: "RTSPストリームURL：",
      enableMulticast: "有効（マルチキャスト）",
      enableTcpOnly: "有効（TCPのみ）",
      multicastIp: "RTSPマルチキャストIP：",
      multicastPort: "RTSPマルチキャストポート：",
      // Tips
      tipEnable: "有効を選択した場合、実際のトランスポート（UDPまたはTCP）はクライアントによって決定されます。例えば、VLCでは「RTP over RTSP(TCP)」にチェックを入れるとTCPを使用します。",
      tipTcpOnly: "有効（TCPのみ）を選択すると、デバイスは強制的にTCPを使用します。",
      tipUdp: "UDPはネットワークの問題により時々パケットをドロップする可能性があります。すべてのクライアントが対応している場合はTCPを推奨します。",
      tipMulticast: "有効（マルチキャスト）を選択すると、「RTSPマルチキャストポート」から始まる4つの連続ポートを使用します。"
    },

    // RTMP settings
    rtmp: {
      rtmpUri: "RTMPストリームURL：",
      publishUri0: "RTMP(S)/RTSP配信URL 0：",
      publishUri1: "RTMP(S)/RTSP配信URL 1：",
      publishUri2: "RTMP(S)/RTSP配信URL 2：",
      mode: "RTMP 配信モード：",
      modeStandard: "Standard (Enhanced RTMP)",
      modeLegacy: "Legacy (CodecID 12)",
      // Tips
      tipPublish: "配信URL 0-2は他のLANまたはパブリックRTMP/RTSPサーバーにストリームをプッシュするためのもので、H.265/H.264に対応しています。",
      tipBuiltin: "このデバイスにはH.264/H.265のプル再生に対応した内蔵RTMPサーバーがあります。<br>RTMP URLを「/live/0」に設定すると、PotPlayerは http://デバイスIP/live/0 で再生できます。",
      tipMode: "RTMP 配信モードはH.265にのみ有効で、FLVストリームにも影響します。"
    },

    // SRT settings
    srt: {
      listenerUri: "SRTリスナーURL：",
      callerUri: "SRTコーラーURL：",
      // Tips
      tipListener: "SRTリスナーモードはローカルポートでリッスンし、プレーヤーがストリームをプルするのを待ちます。<br>例えば、srt://0.0.0.0:9000 と設定します。<br>VLCは「srt://デバイスIP:9000」で再生できます。<br>streamid追加例：<br>srt://0.0.0.0:9000?streamid=channel100<br>パスワード追加例（最低10文字）：<br>srt://0.0.0.0:9000?passphrase=0123456789<br>streamidとパスワード両方追加：<br>srt://0.0.0.0:9000?streamid=channel100&passphrase=0123456789",
      tipCaller: "SRTコーラーモードは別のサーバーにストリームをプッシュします。例：<br>srt://live.example.com:9000?streamid=channel100&latency=120&maxbw=8000000",
      tipParams: "対応SRTパラメータ（詳細はSRTプロトコル参照）：<br>streamid - 多重化用ストリーム識別子<br>passphrase - 暗号化パスワード、SRTでは10-79文字<br>pbkeylen - 鍵長：16（AES-128）、24（AES-192）、32（AES-256）<br>latency - レイテンシ（ms）（20-8000ms）<br>maxbw - 最大帯域幅（バイト/秒）<br>rcvbuf - 受信バッファサイズ<br>sndbuf - 送信バッファサイズ<br>ipttl - IP TTL値<br>conntimeo - 接続タイムアウト（ms）"
    },

    ndi: {
      enable: "NDI出力：",
      name: "ソース名：",
      mainStream: "フル画質ストリーム：",
      previewStream: "プレビューストリーム（640x360固定）：",
      groups: "NDIグループ：",
      tipScope: "NDIを有効にすると、LAN内の受信側（NDI Studio Monitor、vMix、OBSなど）が自動検出し、「デバイス名 (ソース名)」として表示されます。",
      tipPreview: "NDIはフル画質ストリームに加えて幅640ピクセルのプレビューストリームを必要とします。有効にすると、選択したプレビューストリームの解像度は640x360に固定されます。",
      unlicensed: "ライセンスコードを入力して有効化してください。",
      unlicensedHint: "未ライセンス版のため最大30分まで使用できます。",
      licenseCode: "ライセンスコード：",
      activate: "有効化",
      deviceId: "デバイスID：",
      deviceTypeLabel: "デバイスタイプ：",
      globalTitle: "グローバル設定（全ポートに適用）",
      tabGlobal: "グローバル設定",
      gotoLicense: "ライセンス登録はこちら",
      discoveryEnable: "Discovery Server：",
      discoveryServer: "サーバーアドレス：",
      serverHint: "Discovery Server の既定ポートは 5959 です。",
      sendMode: "データ送信モード：",
      sendModeAuto: "自動（ユニキャスト）",
      sendModeMulticast: "マルチキャスト",
      multicastAddr: "マルチキャストアドレスプレフィックス：",
      multicastMask: "マルチキャストネットマスク：",
      tipDiscovery: "Discovery Server を有効にすると、本機は mDNS を使用しなくなります。受信側も同じ Discovery Server アドレスを設定しないとソースを発見できません。ルーティング環境やマルチキャスト制限のあるネットワークに適しています。複数サーバーはカンマ区切り。",
      tipMulticast: "マルチキャスト送信は複数の受信側が 1 本のストリームを共有できますが、スイッチで IGMP スヌーピングが正しく設定されている必要があります。未整備のネットワークで有効にすると輻輳の恐れがあります。管理されたネットワークでのみ使用してください。"
    },
    // WebRTC settings
    webrtc: {
      previewTitle: "Webプレビュー",
      previewNote: "（ステータスページで低遅延プレビュー）",
      whipTitle: "WHIP配信",
      whipNote: "（サーバーへ送信、多人数視聴向け）",
      p2pTitle: "P2Pリモート",
      p2pNote: "（NAT越え、少人数のリモート視聴向け）",
      optional: "空欄可",
      preview: "Webプレビュー",
      whipServer: "配信URL",
      whipToken: "Bearerトークン",
      p2pServer: "シグナリングサーバーURL",
      p2pUuid: "デバイスUUID",
      p2pToken: "P2P認証トークン：",
      p2pAuthToken: "認証トークン",
      regenerate: "再生成",
      // Tips
      tipPreview: "主要ブラウザでのWebRTCプレビューはH.264映像とOpus/G.711音声エンコードに対応しています。<br>音声をOpusに設定するとより良い結果が得られます。Opusに設定しない場合、デフォルトでG.711 8Kになります。",
      tipWhip: "WHIPストリーミングは標準WHIPサーバーに接続します。サーバーからアドレスをコピーしてください。<br>ベアラートークンは空でも可。",
      tipP2p: "P2Pサーバーを有効にすると、視聴URLがステータスページに表示されます。<br>P2P認証トークンは空でも可。",
      tipP2pNote: "複雑なイントラネット環境ではP2Pが接続できない場合があります。"
    },

    // TRTC settings
    trtc: {
      roomId: "TRTCルームID：",
      userId: "TRTCユーザー名：",
      roomKey: "TRTCルームキー：",
      userSig: "TRTC UserSig：",
      sdkAppId: "TRTC SDKAppID：",
      roomIdType: "TRTCルームIDタイプ：",
      roomIdNumber: "数値",
      roomIdString: "文字列",
      // Short enum labels for template use
      number: "数値",
      string: "文字列",
      // Tips
      tipTrtc: "Tencent TRTCサーバーにストリームをプッシュします。サーバーからアドレスをコピーしてください。<br>Tencent TRTCは現在H.264のみ対応しています。"
    },

    alirtc: {
      roomId: "AliRTCルームID：",
      userId: "AliRTCユーザーID：",
      userName: "AliRTCユーザー名：",
      region: "AliRTC 地域：",
      token: "AliRTC Token：",
      tipAliRtcToken: "Alibaba Cloud RTC サーバーへ配信し、H.265/H.264 をサポートします。<br>サービス側から提供された Token を直接入力することも、AliRTC Token をクリックして別ページで AppID/AppKey から Token を生成することもできます。<br>Token が空の場合、装置は起動時に別ページに保存された AppID/AppKey を使って自動生成を試みます。<br>ルームID、ユーザーID、ユーザー名が変更された場合は、token を再生成する必要がある場合があります。"
    },

    alirtcTokenPage: {
      title: "AliRTC Token",
      roomId: "AliRTCルームID：",
      userId: "AliRTCユーザーID：",
      userName: "AliRTCユーザー名：",
      appId: "AliRTC AppID：",
      appKey: "AliRTC AppKey：",
      token: "AliRTC Token：",
      generate: "Tokenを生成して保存",
      appFieldsRequired: "AliRTC AppID と AppKey は必須です。",
      identityRequired: "AliRTC のルームID、ユーザーID、ユーザー名は現在のストリーム出力設定で必須です。",
      generateSuccess: "AliRTC token を生成して保存しました。",
      generateFailed: "AliRTC token の生成に失敗しました。",
      unavailable: "このデバイスでは AliRTC を利用できません。"
    },

    // HLS settings
    hls: {
      hlsTsUri: "HLS TSストリームURL：",
      hlsMp4Uri: "HLS MP4ストリームURL：",
      hlsPushUri: "HLS配信URL：",
      hlsPushUrl: "HLS配信URL：",
      // Tips
      tipHls: "HLS TS/MP4を有効にすると、デバイスは詳細設定のセグメント時間とセグメント数に基づいてメモリにデータをバッファします。<br>セグメント時間とセグメント数の両方を3に設定するとメモリ使用量を削減できます。",
      tipPush: "HLS配信URLはYouTubeなどのサーバーにプッシュするためのものです。"
    },

    // MP4/FLV/Other settings
    other: {
      mp4Uri: "MP4ストリームURL：",
      flvUri: "FLVストリームURL：",
      icecastUri: "ICECAST配信URL：",
      icecastPushUrl: "ICECAST配信URL：",
      shoutcastUri: "Shoutcast配信URL：",
      shoutcastPushUrl: "Shoutcast配信URL：",
      // Tips
      tipMp4: "MP4ストリームを有効にすると、ブラウザで直接再生できます。<br>FLVストリームはこのデバイスでH.265/H.264に対応していますが、VLCなど他のプレーヤーは現在H.264のみ対応しています。<br>ICECAST/ShoutcastはMP3のみ対応で、音声サーバーへのプッシュ用です。",
      tipShoutcast: "Shoutcastはv1とv2に対応。<br>例：<br>http://password@shoutcast_server:8000<br>http://password@shoutcast_server:8000?sid=100<br>http://password@shoutcast_server:8000?icy-name=Stream&icy-genre=Pop<br>形式：<br>http://password@サーバーIP:リッスンポート[?パラメータ...]；ユーザー名は省略可（デフォルト「source」）。<br>サーバーの「リッスンポート」を使用し、デバイスは自動的にソースポート（リッスンポート+1）に接続します。<br>対応パラメータ：<br>sid：Shoutcast v2ストリームID（デフォルト1）<br>icy-name：ストリーム名（オプション）<br>icy-genre：ジャンル（オプション）<br>icy-url：ウェブサイトURL（オプション）<br>icy-pub：公開 0/1（オプション）"
    },

    // Common
    common: {
      save: "保存",
      disabled: "無効",
      enabled: "有効"
    },

    // Error and success messages
    messages: {
      success: "設定を保存しました！",
      failed: "設定に失敗しました！",
      emptyError: "設定を空にすることはできません！",
      trtcH264Only: "TRTCが有効な場合、H.264エンコードのみ対応しています。自動的に変更されました。",
      mp3Required: "音声エンコードをMP3に設定してください！",
      subStreamDisabled: "Sub-stream settings are disabled.",
      // Encoding validation
      frameRateError: "フレームレートは5〜60の整数である必要があります！",
      gopError: "GOPインターバルは5〜300の整数である必要があります！",
      mjpegQualityError: "MJPEG品質は10〜99の整数である必要があります！",
      hlsBitrateWarning: "ビットレートが32〜8000の範囲外のため、HLS TS/MP4/配信ストリームを無効にしました。",
      trtcCodecWarning: "コーデックがH.264でないため、TRTCを無効にしました。",
      alirtcFieldsRequired: "AliRTC を有効にする場合、AppID、AppKey、ルームID、ユーザーID、ユーザー名は必須です。",
      alirtcIdentityRequired: "AliRTC を有効にする場合、ルームID、ユーザーID、ユーザー名は空にできません。",
      hlsBitrateError: "ビットレートが32〜8000の範囲外のため、HLS TS/MP4/配信ストリームを有効にできません",
      // SRT validation
      srtListenerPortError: "SRTリスナーポートは1〜65535の整数である必要があります！",
      srtListenerFormatError: "無効なSRTリスナーURL形式です！",
      srtCallerFormatError: "無効なSRTコーラーURL形式です！",
      srtPasswordLengthError: "URLデコード後のSRTパスワードは10〜79バイトである必要があります！",
      srtLatencyError: "SRTレイテンシは1〜10000の整数である必要があります！",
      srtBandwidthError: "SRT帯域幅は0〜102400の整数である必要があります！",
      // RTMP validation
      rtmpFormatError: "配信URLはrtmp://、rtmps://、rtsp://、またはrtmpt://で始まる必要があります",
      // HLS validation
      hlsFormatError: "無効なHLS配信URL形式です！",
      // RTSP validation
      rtspMulticastIpError: "無効なRTSPマルチキャストIP形式です！",
      rtspMulticastPortError: "RTSPマルチキャストポートは1〜65535の整数である必要があります！",
      // TS validation
      multicastIpError: "無効なマルチキャストIP形式です！",
      multicastPortError: "マルチキャストポートは1〜65535の整数である必要があります！",
      tsTransportIdError: "TSトランスポートストリームIDは1〜65535の整数である必要があります！",
      tsNetworkIdError: "TSオリジナルネットワークIDは1〜65535の整数である必要があります！",
      tsPmtPidError: "TS PMT開始PIDは32〜8186の整数である必要があります！",
      tsStartPidError: "TS開始PIDは32〜3840の整数である必要があります！",
      tsPidConflict: "TS開始PIDとTS PMT開始PIDは異なる必要があります！",
      tsVersionError: "TSテーブルバージョンは0〜31の整数である必要があります！",
      tsServiceIdError: "TSサービスIDは1〜65535の整数である必要があります！",
      tsVideoPidError: "TS映像PIDは16〜8190の整数である必要があります！",
      tsAudioPidError: "TS音声PIDは16〜8190の整数である必要があります！",
      tsPcrPeriodError: "TS PCR周期は0〜100の整数である必要があります（0=自動）！",
      tsVideoPidConflict: "TS映像PIDとTS音声PIDは異なる必要があります！",
      tsAudioPmtConflict: "TS音声PIDとTS PMT開始PIDは異なる必要があります！",
      tsVideoPmtConflict: "TS映像PIDとTS PMT開始PIDは異なる必要があります！",
      // Other validation
      icecastFormatError: "無効なIcecast配信URL形式です！",
      shoutcastFormatError: "無効なShoutcast配信URL形式です！",
      ndiNameEmpty: "NDIソース名を入力してください！",
      ndiSameStream: "NDIのフル画質ストリームとプレビューストリームは別のストリームを選択してください！",
      ndiLicenseOk: "ライセンスが有効化されました",
      ndiLicenseFail: "ライセンスコードが無効です",
      ndiDiscoveryServerEmpty: "Discovery Server のアドレスを入力してください！",
      ndiMulticastAddrError: "マルチキャストアドレスまたはネットマスクが無効です！"
    }
  }
};
