{
  "time": {
    "current_time_label": "現在時刻：",
    "input_label": "入力（タイムスタンプまたは日時）",
    "input_placeholder": "1690000000 / 1690000000000 / 2026-04-22T00:00:00Z",
    "convert": "変換",
    "copy_output": "出力をコピー",
    "output": "出力",
    "err_parse_timestamp": "タイムスタンプを解析できません。",
    "err_parse_date": "日付文字列を解析できません。",
    "copied": "コピーしました。"
  },
  "json_diff": {
    "intro": "jsondiffpatch によるオブジェクト単位の差分（行単位のテキスト diff ではありません）。配列の移動検出に対応。delta はパッチ構造です。",
    "left_json": "左の JSON",
    "right_json": "右の JSON",
    "compute": "差分を計算",
    "delta_title": "Delta（jsondiffpatch 形式）",
    "no_diff_comment": "// 差分なし（同一の JSON 構造）",
    "parse_failed": "解析に失敗しました"
  },
  "ascii": {
    "th_dec": "Dec",
    "th_hex": "Hex",
    "th_char": "文字",
    "th_note": "説明",
    "note_control": "制御",
    "note_printable": "印字可能"
  },
  "uuid": {
    "count_label": "生成数（1〜200）",
    "generate_uuid_v4": "UUID v4 を生成",
    "copy_all": "すべてコピー",
    "please_generate_first": "先に生成してください。",
    "copied_all": "すべてコピーしました。",
    "output": "出力",
    "output_placeholder": "生成をクリック。"
  },
  "ulid": {
    "count_label": "件数（1〜100）",
    "generate": "ULID を生成",
    "copy": "コピー",
    "placeholder": "時刻順に並ぶ 26 文字の ID"
  },
  "nanoid": {
    "length_label": "長さ（4〜64）",
    "alphabet_hint": "カスタムアルファベット（空なら nanoid の URL セーフ既定）",
    "generate": "生成",
    "copy": "コピー"
  },
  "units": {
    "css_title": "CSS：px ↔ rem",
    "root_px": "ルートのフォントサイズ（px）",
    "check_line": "検算：{px}px ÷ {root} = {rem} rem",
    "storage_title": "データサイズ",
    "iec_toggle": "IEC（1024 倍：KiB/MiB/GiB）",
    "bytes_label": "バイト数（整数）"
  },
  "color": {
    "picker": "カラーピッカー",
    "css": "CSS",
    "hex": "HEX",
    "rgb_title": "RGB（0〜255）",
    "hsl_title": "HSL",
    "h_label": "H（°）",
    "s_label": "S（%）",
    "l_label": "L（%）",
    "copy_all_formats": "すべての形式をコピー",
    "copied_line": "HEX / RGB / HSL の 1 行をコピーしました。"
  },
  "contrast": {
    "fg": "前景（文字）",
    "bg": "背景",
    "large_text_toggle": "大きい文字の閾値（≥18pt 太字または ≥24pt 通常）",
    "sample_text": "サンプル Aa 中文 123",
    "invalid_hex": "#RRGGBB または #RGB を使ってください。",
    "ratio_label": "コントラスト",
    "wcag_prefix": "WCAG 2.1："
  },
  "url_parse": {
    "parse": "解析",
    "err_invalid": "無効な URL",
    "url_object_fields": "URL オブジェクトのフィールド",
    "search_params": "クエリ（searchParams）",
    "key": "キー",
    "value": "値",
    "port_default": "（既定）",
    "page_intro": "ネイティブの <api>URL</api> と <usp>URLSearchParams</usp> を使用。ネットワーク通信はありません。"
  },
  "punycode": {
    "unicode_label": "Unicode ドメイン／ラベル（行またはドット区切り）",
    "to_punycode": "→ Punycode / ASCII",
    "puny_label": "Punycode（xn--…）",
    "to_unicode": "→ Unicode",
    "fail": "失敗"
  },
  "data_url": {
    "drop_label": "ファイル → Data URL",
    "drop_title": "ファイルを選択またはドロップ",
    "drop_desc": "FileReader.readAsDataURL。アップロードしません。",
    "data_url": "Data URL",
    "copy": "コピー",
    "decode_download": "デコードしてダウンロード",
    "err_format": "形式は data:[mime][;base64],データ である必要があります",
    "decode_failed": "デコードに失敗しました"
  },
  "mime_sniff": {
    "drop_label": "ファイル先頭を読む",
    "drop_title": "ファイルを選択またはドロップ",
    "drop_desc": "先頭 64 バイトのみ読み取り。アップロードしません。",
    "guess_type": "推定タイプ",
    "first_64_hex": "先頭 64 バイト（hex）"
  },
  "mime_types": {
    "search_ph": "拡張子または MIME を検索…",
    "col_ext": "拡張子",
    "col_mime": "MIME",
    "col_note": "メモ"
  },
  "html_format": {
    "format": "整形",
    "minify_simple": "簡易圧縮（コメント外の空白）",
    "output": "出力",
    "copy": "コピー",
    "fail": "失敗"
  },
  "svg_format": {
    "source": "SVG ソース",
    "validate_indent": "検証してインデント",
    "xml_parse_err": "XML の解析に失敗しました。タグを確認してください。",
    "fail": "失敗"
  },
  "markdown": {
    "render_failed": "レンダーに失敗しました",
    "label": "Markdown ソース",
    "export_html": "HTML をエクスポート",
    "copy_md": "Markdown をコピー",
    "preview": "リアルタイムプレビュー"
  },
  "http_codes": {
    "search_ph": "コード・名称・説明を検索…",
    "col_code": "コード",
    "col_name": "名前",
    "col_desc": "説明"
  },
  "ua_parse": {
    "fill_ua": "この端末の UA を入れる",
    "hint": "軽い正規表現の概略解析です。WebView 等は Other になることがあります。",
    "browser": "ブラウザ",
    "engine": "エンジン（概略）",
    "os": "OS",
    "mobile": "モバイル",
    "yes": "はい",
    "no": "いいえ"
  },
  "keycode": {
    "instructions": "下の領域をクリックしてからキーを押してください。",
    "capture_aria": "キー取得エリア",
    "focus_hint": "フォーカスしてからキーを押す…",
    "which_keycode": "which / keyCode（廃止予定）",
    "modifiers": "修飾キー"
  },
  "yaml_json": {
    "warning": "js-yaml はタグ解析を行います。信頼できない YAML は貼らないでください。",
    "yaml_to_json": "YAML → JSON",
    "json_to_yaml": "JSON → YAML",
    "parse_failed": "解析に失敗しました"
  },
  "toml_json": {
    "warning": "TOML の日付型は JSON 表現に写ります。信頼できない設定は貼らないでください。",
    "toml_to_json": "TOML → JSON",
    "json_to_toml": "JSON → TOML",
    "parse_failed": "解析に失敗しました"
  },
  "json_csv": {
    "json_label": "JSON（オブジェクトの配列）",
    "csv_label": "CSV（1 行目がヘッダ）",
    "json_to_csv": "JSON → CSV",
    "csv_to_json": "CSV → JSON",
    "need_object_array": "JSON はオブジェクトの配列である必要があります。",
    "parse_failed": "解析に失敗しました"
  },
  "jsonpath": {
    "expr_label": "JSONPath 式",
    "hint": "jsonpath-plus ベース（一部 jq に似た書き方）。",
    "query": "実行",
    "result_array": "結果（配列）",
    "fail": "失敗"
  },
  "json_to_ts": {
    "root_name": "ルートのインターフェース名",
    "generate": "型を生成",
    "typescript": "TypeScript",
    "fail": "失敗"
  },
  "jmespath": {
    "expr_label": "JMESPath 式",
    "hint": "AWS CLI 等と同じ。リテラルはバッククォートで囲みます。例:",
    "query": "実行",
    "result": "結果",
    "fail": "失敗"
  },
  "sql_format": {
    "dialect": "ダイアレクト",
    "dialect_sql": "標準 SQL",
    "beautify": "整形",
    "compress": "圧縮",
    "output": "出力",
    "format_failed": "整形に失敗しました"
  },
  "gitignore": {
    "templates": "テンプレートを選択",
    "merge": "マージして生成",
    "placeholder": "マージ後の .gitignore",
    "copy": "コピー"
  },
  "compress": {
    "warn": "CompressionStream を使用。Brotli はブラウザ依存。Base64 出力。",
    "algo": "アルゴリズム",
    "mode_compress": "圧縮",
    "mode_decompress": "展開",
    "utf8_text": "UTF-8 テキスト",
    "run_text_compress": "テキストを圧縮",
    "run_text_decompress": "展開（UTF-8 テキスト想定）",
    "file_label": "またはファイル（生バイト）",
    "file_title": "ファイルを選択",
    "file_desc": "バイナリで圧縮／展開。",
    "b64_label": "Base64 結果／入力",
    "copy_b64": "Base64 をコピー",
    "from_b64_compress": "Base64 から圧縮",
    "from_b64_decompress": "Base64 から展開",
    "unsupported_algo": "このアルゴリズムは未対応です。Chrome/Edge または gzip/deflate を試してください。",
    "done_bytes": "完了（{n} バイト）",
    "fail": "失敗",
    "b64_invalid": "無効な Base64"
  },
  "cron": {
    "label": "Cron（分 時 日 月 曜）",
    "hint": "cronstrue で説明。複雑な式はライブラリに従います。",
    "natural_language": "自然言語",
    "cannot_parse": "この式を解析できません。"
  },
  "chmod": {
    "oct_label": "8 進（例 644, 755）",
    "to_rwx": "→ rwx",
    "rwx_label": "rwxrwxrwx",
    "to_octal": "→ 8 進",
    "err_oct_range": "8 進は 0〜777 です。",
    "err_rwx": "rwx は 9 文字の r w x - のみ（setuid は簡易）。"
  },
  "cidr": {
    "label": "IPv4/CIDR",
    "calc": "計算",
    "err": "エラー",
    "network": "ネットワーク",
    "broadcast": "ブロードキャスト",
    "mask": "サブネットマスク",
    "first_host": "先頭ホスト",
    "last_host": "末尾ホスト",
    "total_addrs": "総アドレス数",
    "usable_hosts": "利用可能ホスト（/31,/32 は簡易）"
  },
  "ipv6": {
    "label": "IPv6 アドレスまたは CIDR",
    "parse": "解析",
    "err": "エラー",
    "correct_form": "正規化（correctForm）",
    "canonical_form": "完全展開（canonicalForm）",
    "prefix_len": "プレフィックス長",
    "subnet_start": "サブネット先頭",
    "subnet_end": "サブネット末尾",
    "addr_count": "アドレス数"
  },
  "ieee754": {
    "label": "数値（十進）",
    "need_finite": "有限の数を入力してください。",
    "float64": "Float64",
    "float32": "Float32",
    "hex_be": "16 進（ビッグエンディアン）",
    "detail_64": "符号 {sign} · 指数 {exp}（偏置 1023）· 仮数 {frac}",
    "detail_32": "符号 {sign} · 指数 {exp}（偏置 127）· 仮数 {frac}"
  },
  "num_base": {
    "from_radix": "元の基数（2〜36）",
    "digits": "桁列",
    "convert": "変換",
    "common_bases": "よく使う基数",
    "parse_err": "この基数では整数として解釈できません。"
  },
  "iban": {
    "label": "IBAN（スペース可）",
    "check": "mod 97 を検証",
    "ok": "チェック OK（mod 97 = 1）。正規化：{n}",
    "bad": "チェック不一致（余り {r}）。正規化：{n}"
  },
  "luhn": {
    "label": "数字列（スペース可）",
    "check": "Luhn 検証",
    "pass": "Luhn 合格（mod 10）",
    "fail": "不合格"
  },
  "phone": {
    "default_country": "既定の国（ISO 3166-1 alpha-2、+ なしで使用）",
    "number": "電話番号",
    "parse": "解析",
    "unparsed": "解析できません（既定の国を変えてください）。",
    "err": "エラー",
    "line_e164": "E.164: {v}",
    "line_intl": "国際形式: {v}",
    "line_nat": "国内形式: {v}",
    "line_country": "国: {c}（既定 {d}）",
    "line_type": "種別: {v}",
    "line_valid": "有効: {v}",
    "yes": "はい",
    "no": "いいえ",
    "dash": "—"
  },
  "letter_codes": {
    "input": "入力（英数字；モールスでスペースは /）",
    "nato": "NATO フォネティック",
    "morse": "モールス信号",
    "braille": "六点ブライユ（英字と数字）"
  },
  "barcode": {
    "format": "形式",
    "content": "内容（種類ごとに長さ・文字種が必要）",
    "download_png": "PNG をダウンロード",
    "cannot_generate": "生成できません"
  },
  "media_convert": {
    "intro": "実験的：CDN から ffmpeg wasm を読み込みます（大きい）。中小ファイル向け。",
    "load_btn_loading": "読み込み中…",
    "load_btn_ready": "準備完了",
    "load_btn_idle": "ffmpeg コアを読み込む",
    "media_file": "メディアファイル",
    "no_file": "メディアファイルが選ばれていません。",
    "out_ext": "出力拡張子",
    "convert_go": "変換",
    "converting": "変換中…",
    "download": "ダウンロード {name}",
    "log": "ログ",
    "load_failed": "読み込み失敗",
    "ffmpeg_loaded_log": "ffmpeg コアを読み込みました（unpkg CDN、このセッションのみ）",
    "ffmpeg_exit": "ffmpeg がコード {c} で終了。ログを確認してください。",
    "convert_failed": "変換に失敗しました",
    "moved_notice": "メディア変換は「動画ツール」に移行しました。新しい形式変換をご利用ください。",
    "moved_link": "動画形式変換へ →"
  },
  "video_common": {
    "intro": "ページを開くと ffmpeg コア（約 30MB、セッション内のみ）を自動読み込みします。ブラウザ内で処理し、アップロードしません。推奨上限 {mb}MB。",
    "core_loading": "動画処理コンポーネントを読み込み中…",
    "core_reload": "コンポーネントを再読み込み",
    "load_btn_loading": "読み込み中…",
    "load_btn_ready": "コア準備完了",
    "load_btn_idle": "ffmpeg コアを読み込む",
    "media_file": "動画または音声ファイル",
    "no_file": "ファイルが選ばれていません。",
    "converting": "処理中…",
    "download": "ダウンロード {name}",
    "log": "ログ",
    "load_failed": "ffmpeg コアの読み込みに失敗しました。",
    "load_failed_wasm": "ffmpeg-core.wasm（約 32MB）の読み込みに失敗しました。プロキシをオフにするか、ネットワークを変えて再試行してください。",
    "ffmpeg_exit": "ffmpeg 終了コード {c}。別の出力形式を試すか、先に「動画圧縮」で再エンコードしてください。",
    "convert_failed": "処理に失敗しました",
    "progress": "進捗 約 {n}%",
    "err_file_too_large": "ファイルが {mb}MB を超えています。"
  },
  "video_convert": {
    "page_intro": "MP4/WebM/MKV/GIF/M4A/WAV などに変換。wasm の制限で失敗する場合は別形式をお試しください。",
    "out_ext": "出力形式",
    "convert_go": "変換開始"
  },
  "video_to_mp4": {
    "page_intro": "一般的な動画・音声を MP4 に書き出し（H.264/AAC は ffmpeg が自動選択）。共有・モバイル再生向け。失敗時は「動画圧縮」をお試しください。"
  },
  "video_mov_to_mp4": {
    "page_intro": "QuickTime / iPhone の MOV を MP4 に変換。他形式も投入可。出力は常に MP4。"
  },
  "video_mkv_to_mp4": {
    "page_intro": "Matroska（.mkv）を MP4 に変換。出力は常に MP4。"
  },
  "video_webm_to_mp4": {
    "page_intro": "WebM を MP4 に変換。出力は常に MP4。"
  },
  "video_avi_to_mp4": {
    "page_intro": "旧式 AVI を MP4 に変換。出力は常に MP4。古いコーデックは先に圧縮が必要な場合があります。"
  },
  "video_to_webm": {
    "page_intro": "WebM を書き出し（VP8/VP9 等）。Web 埋め込み向け。"
  },
  "video_to_mkv": {
    "page_intro": "MKV コンテナを書き出し。共有には MP4 が一般的です。"
  },
  "video_trim": {
    "page_intro": "開始・終了秒で切り出し。「高速」はストリームコピー、「精密」は再エンコードです。",
    "duration_label": "長さ 約 {sec} 秒",
    "start_sec": "開始（秒）",
    "end_sec": "終了（秒）",
    "mode_label": "モード",
    "mode_copy": "高速（コピー）",
    "mode_encode": "精密（再エンコード）",
    "trim_go": "切り出してダウンロード"
  },
  "video_compress": {
    "page_intro": "解像度と CRF でサイズを削減。CRF が大きいほど小さく、画質は低下します。",
    "height_label": "最大高さ",
    "height_option": "{h}p",
    "crf_label": "CRF（現在 {crf}）",
    "crf_hint": "CRF が大きいほど強く圧縮されます。",
    "compress_go": "圧縮してダウンロード"
  },
  "video_to_gif": {
    "page_intro": "動画を GIF に変換。FPS と幅が大きいほどファイルも大きくなります。",
    "fps_label": "FPS",
    "width_label": "幅（px）",
    "convert_go": "GIF を生成"
  },
  "video_extract_audio": {
    "page_intro": "動画から音声トラックを抽出。M4A は小さく、WAV は非圧縮です。",
    "format_label": "出力形式",
    "format_m4a": "M4A (AAC)",
    "format_wav": "WAV (PCM)",
    "format_hint": "wasm では MP3 非対応のことがあります。M4A を推奨します。",
    "extract_go": "音声を抽出"
  },
  "x509_view": {
    "intro": "PEM または DER Base64 を貼り付け。SHA-256 は Web Crypto でローカル計算。",
    "cert": "証明書",
    "parse": "解析",
    "parsing": "解析中…",
    "fingerprint": "SHA-256 フィンガープリント（hex）",
    "structured": "構造化情報",
    "parse_failed": "解析に失敗しました"
  },
  "jwt": {
    "warning": "Base64URL デコードと JSON 整形のみ。<strong>署名は検証しません</strong>。機密トークンを信頼できない環境に貼らないでください。",
    "input_label": "JWT 文字列",
    "decode": "デコード",
    "err_empty": "JWT を入力してください。",
    "err_parts": "header.payload の少なくとも 2 セグメントが必要です。",
    "err_header_json": "Header が JSON として解析できません。",
    "err_payload_json": "Payload が JSON として解析できません。"
  },
  "base64": {
    "text_label": "テキスト",
    "text_to_base64": "テキスト → Base64",
    "base64_to_text": "Base64 → テキスト",
    "base64_field": "Base64",
    "base64_from_file": "ファイルから Base64",
    "select_or_drop_file": "ファイルを選択またはドロップ",
    "base64_from_file_desc": "生バイトをエンコード。アップロードしません。",
    "encoded_file": "エンコード済み: {name}",
    "copy": "コピー",
    "copied": "コピーしました。",
    "base64_to_download": "デコードしてダウンロード",
    "decode_failed": "デコードに失敗しました"
  },
  "base32": {
    "original_utf8": "元テキスト（UTF-8）",
    "text_to_base32": "テキスト → Base32",
    "base32_to_text": "Base32 → テキスト",
    "base32_rfc4648": "Base32（RFC 4648、パディングなし）",
    "copy": "コピー",
    "copied_base32": "Base32 をコピーしました。",
    "decode_failed": "デコードに失敗しました"
  },
  "base58": {
    "text_utf8": "テキスト（UTF-8）",
    "text_to_base58": "テキスト → Base58",
    "base58_to_text": "Base58 → テキスト",
    "base58_field": "Base58",
    "decode_failed": "デコードに失敗しました"
  },
  "url_encode": {
    "input": "入力",
    "output": "出力",
    "encode": "エンコード",
    "decode": "デコード",
    "copy_output": "出力をコピー",
    "copied": "コピーしました。",
    "decode_failed": "デコードに失敗しました"
  },
  "hex": {
    "text_utf8": "テキスト（UTF-8）",
    "text_to_hex": "テキスト → Hex",
    "hex_to_text": "Hex → テキスト",
    "hex_field": "16進数（空白・改行・0x はデコード時に除去）",
    "copy": "コピー",
    "copied_hex": "Hex をコピーしました。",
    "err_hex_odd_length": "16進数の長さは偶数である必要があります（空白と 0x は無視）。",
    "err_utf8_decode": "UTF-8 としてデコードできません"
  },
  "escape": {
    "mode": "モード",
    "html_entity_mode": "HTML エンティティ",
    "json_string_mode": "JSON 文字列エスケープ",
    "input": "入力",
    "encode_or_escape": "エンコード / エスケープ",
    "decode_or_restore": "デコード / 復元",
    "json_decode_not_string": "JSON の値が文字列ではありません。",
    "decode_failed": "デコードに失敗しました",
    "output": "出力",
    "copied_output": "出力をコピーしました。",
    "copy_output": "出力をコピー",
    "failed": "失敗",
    "page_intro": "一般的な Escape／エンティティツール相当：HTML は主要な文字参照、JSON モードは <jp>JSON.parse</jp> で解析できる文字列リテラルを生成します。"
  },
  "hash": {
    "select_file": "ファイルを選択",
    "select_or_drop_file": "ファイルを選択またはドロップ",
    "hash_local_desc": "ローカルでダイジェストを計算。アップロードしません。",
    "please_select_file": "先にファイルを選択してください。",
    "computing": "計算中…",
    "compute_digest": "ダイジェストを計算",
    "copy": "コピー",
    "computed_file": "計算済み: {name}（{size} バイト）",
    "compute_failed": "計算に失敗しました",
    "md5_label": "MD5",
    "sha256_label": "SHA-256",
    "dash": "—"
  },
  "hmac": {
    "hash_algorithm": "ハッシュアルゴリズム",
    "secret_key": "秘密鍵",
    "message": "メッセージ",
    "compute_hmac_hex": "HMAC を計算（16進数）",
    "output": "出力",
    "copy": "コピー",
    "failed": "失敗",
    "dash": "—"
  },
  "aes": {
    "aes_pbkdf2_note": "AES-256-GCM: ランダム salt + PBKDF2（{iter} 回、SHA-256）。鍵はブラウザ内のみで導出されます。",
    "passphrase": "パスフレーズ",
    "plaintext": "平文",
    "encrypt": "暗号化",
    "decrypt": "復号",
    "processing": "処理中…",
    "please_input_passphrase": "パスフレーズを入力してください。",
    "encrypt_success": "暗号化しました。",
    "encrypt_failed": "暗号化に失敗しました",
    "cipher_base64": "暗号文（Base64: salt ∥ IV ∥ data）",
    "cipher_too_short": "暗号文が短すぎるか壊れています。",
    "decrypt_success": "復号しました。",
    "decrypt_failed_bad_key": "復号に失敗しました（パスフレーズ違いまたはデータ異常）。",
    "copied_cipher": "暗号文をコピーしました。",
    "copy_cipher": "暗号文をコピー"
  },
  "password": {
    "select_charset": "文字種を 1 つ以上選んでください。",
    "length_4_to_256": "長さ（4–256）",
    "upper_az": "大文字 A–Z",
    "lower_az": "小文字 a–z",
    "digits": "数字",
    "symbols": "記号",
    "generate": "生成",
    "copy": "コピー",
    "copied": "コピーしました。",
    "result": "結果",
    "placeholder_click_generate": "「生成」をクリック",
    "footnote": "crypto.getRandomValues を使用。記号セットは代表的なキーボード文字の一部です。"
  },
  "crc32": {
    "text_utf8": "テキスト（UTF-8）",
    "compute_crc32": "CRC32 を計算",
    "label_from_file": "またはファイルから",
    "title_drop": "ファイルを選択またはドロップ",
    "desc_local": "生バイトで IEEE CRC-32。アップロードしません。",
    "crc32_title": "CRC32",
    "label_current_text": "現在のテキスト",
    "copy_hex": "16進数をコピー",
    "copied_hex_value": "16進数をコピーしました。",
    "msg_computed": "計算済み: {label}（{bytes} バイト）",
    "read_failed": "読み込みに失敗しました",
    "decode_failed": "失敗",
    "dash": "—"
  },
  "xor": {
    "warning": "XOR は対称で認証なし。実用途の秘匿には不向き。CTF や軽い難読化のデモ向け。",
    "encrypt_section": "暗号化",
    "decrypt_section": "復号",
    "plaintext_utf8": "平文（UTF-8）",
    "key_utf8_cyclic": "鍵（UTF-8、繰り返し）",
    "output_format": "出力形式",
    "opt_hex": "16進数",
    "opt_b64": "Base64",
    "xor_to_cipher": "XOR → 暗号文",
    "cipher_label": "暗号文",
    "cipher_input_label": "暗号文（{mode}）",
    "xor_to_plain": "XOR → 平文",
    "plaintext_result": "平文",
    "err_key_empty": "鍵を空にできません",
    "err_hex_odd": "16進数の長さは偶数である必要があります",
    "failed": "失敗"
  },
  "vigenere": {
    "intro": "ヴィジュネル暗号: A–Z / a–z のみ変換、その他はそのまま。鍵の非アルファベットは無視。",
    "text": "テキスト",
    "key_english": "鍵（アルファベット）",
    "encrypt": "暗号化",
    "decrypt": "復号",
    "result": "結果",
    "err_key_letters": "鍵には少なくとも 1 文字の A–Z が必要です",
    "error_generic": "エラー"
  },
  "rsa": {
    "intro": "ブラウザの <link>Web Crypto</link> による RSA-OAEP。短文や対称鍵のラップ向け。HTTPS または localhost が必要です。",
    "generate_keypair": "鍵ペアを生成",
    "pub_pem": "公開鍵（SPKI PEM）",
    "priv_pem": "秘密鍵（PKCS#8 PEM）",
    "encrypt_section": "暗号化",
    "plaintext_utf8": "平文（UTF-8）",
    "encrypt_public": "公開鍵で暗号化",
    "cipher_section": "暗号文と復号",
    "cipher_b64": "暗号文（Base64）",
    "decrypt_private": "秘密鍵で復号",
    "decrypted": "復号結果",
    "msg_generated": "2048 ビット RSA-OAEP（SHA-256）を生成。秘密鍵はメモリ内のみ—共有しないでください。",
    "msg_generate_fail": "生成に失敗しました（HTTPS / localhost などのセキュアコンテキストが必要な場合があります）。",
    "err_need_public_pem": "先に公開鍵 PEM を生成または貼り付けてください。",
    "err_plain_too_long": "平文が長すぎます: RSA-OAEP（2048 / SHA-256）は通常約 {max} バイト以下。現在 {current}。対称暗号（AES-256-GCM など）で鍵をラップしてください。",
    "encrypt_failed": "暗号化に失敗しました",
    "err_need_private_pem": "先に秘密鍵 PEM を生成または貼り付けてください。",
    "decrypt_failed": "復号に失敗しました",
    "err_pem_parse": "PEM を解析できません。BEGIN/END を確認してください。"
  },
  "qr_generate": {
    "content_label": "内容（テキスト / URL / Wi‑Fi）",
    "size_px": "サイズ（px）",
    "margin": "余白",
    "foreground": "前景色",
    "background": "背景色",
    "generate_preview": "プレビューを生成",
    "busy": "生成中…",
    "download_png": "PNG をダウンロード",
    "preview": "プレビュー",
    "qr_alt": "QRコード",
    "err_empty": "内容を空にできません",
    "err_generate": "生成に失敗しました"
  },
  "qr_decode": {
    "drop_label": "QR 入り画像をアップロード",
    "drop_title": "PNG / JPG などを選択またはドロップ",
    "drop_desc": "jsQR でローカル解析。アップロードしません。",
    "empty_hint": "画像が未選択です。",
    "parse_result": "解析結果",
    "copy": "コピー",
    "err_canvas": "Canvas が使えません",
    "err_not_found": "QR を検出できません（より鮮明・高コントラストの画像を試してください）",
    "err_decode": "デコードに失敗しました",
    "err_load_image": "画像を読み込めません",
    "dash": "—"
  },
  "text_case": {
    "mode_label": "変換",
    "mode_upper": "すべて大文字",
    "mode_lower": "すべて小文字",
    "mode_title": "タイトルケース（単語）",
    "mode_sentence": "文頭大文字（ヒューリスティック）",
    "mode_camel": "camelCase",
    "mode_constant": "CONSTANT_CASE",
    "mode_kebab": "kebab-case",
    "mode_snake": "snake_case",
    "source": "元テキスト",
    "result": "結果",
    "copy_result": "結果をコピー",
    "placeholder_source": "貼り付けまたは入力…"
  },
  "text_lines": {
    "sort_asc": "行を並べ替え（昇順）",
    "sort_desc": "行を並べ替え（降順）",
    "dedupe": "重複行を除去",
    "remove_empty": "空行を削除",
    "trim_lines": "各行を trim",
    "reverse": "行順を反転",
    "input": "入力",
    "result": "結果",
    "copy_result": "結果をコピー",
    "placeholder_input": "1 行 1 項目、またはリストを貼り付け…",
    "placeholder_result": "上のボタンで生成…"
  },
  "text_stats": {
    "label": "テキスト",
    "placeholder": "内容を貼り付けると統計が更新されます…",
    "lines": "行数",
    "chars_code_units": "文字数（コード単位）",
    "chars_no_ws": "文字数（空白除く）",
    "words_ws": "語数（空白区切り）",
    "graphemes": "書記素クラスタ（Intl、おおよそ「文字数」）",
    "bytes_utf8": "UTF-8 バイト",
    "footnote": "「語数」は主に英語向け。CJK などは書記素クラスタを参照。すべてローカルで計算。"
  },
  "text_replace": {
    "find": "検索",
    "replace_with": "置換",
    "use_regex": "正規表現を使う",
    "flags": "Flags",
    "source": "元テキスト",
    "result": "結果",
    "copy": "コピー",
    "footnote": "リテラルは全体置換、正規表現は String.replace と同様—エスケープと flags（g, i, m など）に注意。"
  },
  "text_split_join": {
    "delimiter": "区切り文字",
    "placeholder_delimiter": "例: , または | や任意",
    "split_lines": "分割 → 1 行ずつ",
    "join_lines": "結合 ← 行で連結",
    "copy_result": "結果をコピー",
    "help": "分割: 区切りで切って各行に。結合: 行ごとに読み、区切りでつなぐ。",
    "placeholder_input": "分割: カンマ区切り 1 行を貼付。結合: 1 行 1 項目…",
    "placeholder_output": "分割または結合をクリック…",
    "input": "入力",
    "output": "出力"
  },
  "text_regex": {
    "warn_truncated": "先頭 {max} 文字のみマッチ・ハイライトします。",
    "pattern": "正規表現",
    "flags": "Flags",
    "flags_ph": "gimsuy",
    "invalid": "正規表現が無効です",
    "text": "テキスト",
    "match_count": "{count} 件マッチ",
    "list_omitted": "… 残り省略"
  },
  "text_diff": {
    "text_a": "テキスト A",
    "text_b": "テキスト B",
    "line_diff": "行単位 diff"
  },
  "text_lorem": {
    "paragraphs": "段落数（1–50）",
    "generate": "生成",
    "copy": "コピー",
    "placeholder": "「生成」をクリック"
  },
  "text_rot13": {
    "label": "テキスト（A–Z を 13 シフト、もう一度で元に戻る）",
    "action": "ROT13"
  },
  "text_strip_html": {
    "warning": "DOMParser でテキストノードのみ。スクリプトは実行しませんが、信頼できない巨大 HTML は避けてください。",
    "html": "HTML",
    "plain": "プレーンテキスト",
    "extract": "プレーンを抽出",
    "placeholder_out": "左のボタンで生成"
  },
  "text_slug": {
    "input": "入力",
    "generate": "スラグを生成",
    "hint": "合成文字を除去し a–z 0–9 のみ残し記号はハイフン（SEO 一式ではありません）。",
    "result": "結果",
    "copy": "コピー",
    "dash": "—"
  },
  "text_indent": {
    "text": "テキスト",
    "use_tab": "Tab でインデント",
    "spaces_per_level": "レベルあたりのスペース数",
    "dedent_times": "アインデント回数",
    "indent_once": "ブロック全体を 1 段インデント",
    "dedent_tab": "各行先頭から最大 {n} つの Tab を除去",
    "dedent_space": "各行先頭から最大 {n} つのスペースを除去"
  },
  "text_sort_lines": {
    "label": "行で並べ替え",
    "desc": "降順",
    "natural": "自然順（数字は数値）",
    "trim_end": "並べ替え前行末を trim",
    "sort": "並べ替え",
    "page_intro": "「行の整理」の並べ替えとあわせて使えます。昇順／降順の切り替えと、<lc>localeCompare</lc> の数値に優しい並べ替えが可能で、バージョン番号やファイル名リストに向きます。"
  },
  "text_line_numbers": {
    "text": "テキスト",
    "start": "開始番号",
    "pad_width": "最小幅",
    "separator": "区切り",
    "add": "行番号を付与",
    "strip": "簡易「数字 | 」プレフィックスを除去",
    "footnote": "除去は単純な正規表現のみ。複雑な場合は手編集。"
  },
  "text_wrap": {
    "note": "幅は UTF-16 コード単位。ターミナル列や全角 CJK と一致しない場合があります。",
    "text": "テキスト",
    "max_width": "1 行あたりの最大文字数",
    "break_long": "長い無空白行も強制改行",
    "rewrap": "折り返しを適用（上書き）"
  },
  "csv_markdown": {
    "csv_to_md": "CSV → Markdown",
    "to_markdown": "Markdown 表へ",
    "md_to_csv": "Markdown 表 → CSV",
    "to_csv": "CSV へ",
    "failed": "失敗"
  },
  "fullwidth": {
    "source": "テキスト",
    "to_full": "全角へ",
    "to_half": "半角へ",
    "footnote": "印字可能 ASCII とスペース。CJK などは変更しません。"
  },
  "rmb_daxie": {
    "convert": "変換",
    "placeholder": "1234.56",
    "error": "エラー"
  },
  "ics": {
    "raw_label": "iCalendar テキスト",
    "parse": "解析",
    "no_events": "VEVENT がありません",
    "parse_failed": "解析に失敗しました",
    "no_title": "（無題）",
    "start": "開始",
    "end": "終了",
    "location": "場所",
    "dash": "—"
  },
  "vcard": {
    "raw_label": "vCard テキスト",
    "th_field": "フィールド",
    "th_value": "値",
    "empty": "有効な行がありません"
  },
  "email_headers": {
    "raw_label": "生ヘッダ（最初の空行まで）",
    "th_name": "名前",
    "th_value": "値",
    "empty": "解析結果がありません"
  },
  "docmind": {
    "privacy_title": "クラウド変換について",
    "privacy_body": "本ツールは当サイトの変換サービス経由で Alibaba Cloud ドキュメントインテリジェンス（中国本土）にファイルを送信します。機微な個人情報はアップロードしないでください。結果リンクの有効期限は約24時間です。",
    "err_no_file": "PDF ファイルを選択してください。",
    "err_file_too_large": "ファイルは {max}MB 以下にしてください。",
    "err_too_many_files": "1回につき PDF は1ファイルのみです。",
    "err_failed": "変換に失敗しました",
    "err_no_download_url": "変換は完了しましたがダウンロード URL がありません。再試行してください。",
    "err_proxy_unreachable": "変換サービスに接続できません（{base}）。docmind プロキシの起動と NEXT_PUBLIC_DOCMIND_API_URL を確認してください。",
    "msg_submitting": "変換ジョブを送信中…",
    "msg_processing": "クラウドで処理中。数十秒〜数分かかることがあります…",
    "msg_done": "変換が完了しました。下の一覧からダウンロードしてください。",
    "result_title": "変換結果",
    "download_hint": "ダウンロードリンクは Alibaba Cloud が提供します（有効期限は約24時間）。保存できない場合は新しいタブで開いてください。",
    "selected_file": "選択: {name}（約 {size} MB）",
    "poll_hint": "{count} 回確認済み。約10秒ごとに状態を更新",
    "limits_note": "制限: 1回1 PDF、10MB・1000ページ以内（Alibaba ドキュメントインテリジェンスの規定）。"
  },
  "pdf_to_word": {
    "drop_label": "PDF を選択",
    "drop_desc": "1回1 PDF・10MB まで。アップロード後、Alibaba で Word（.docx）に変換します。",
    "empty_hint": "ファイルが未選択です。",
    "btn_convert": "変換"
  },
  "pdf_to_excel": {
    "drop_label": "PDF を選択",
    "drop_desc": "1回1 PDF・10MB まで。アップロード後、Alibaba で Excel（.xlsx）に変換します。",
    "empty_hint": "ファイルが未選択です。",
    "btn_convert": "変換"
  },
  "pdf_roadmap": {
    "page_intro": "ユーザーへの約束は技術的な限界と一致させる必要があります。以下はレイアウトエンジン、フォントサブセット、法的コンプライアンスに関わり、ブラウザのみの pdf-lib だけではプロ品質には届きません。サーバー側・WASM・商用 SDK は別途評価してください。",
    "section_office_title": "Office 相互変換（Word / Excel / PPT）",
    "section_office_li1": "代表的な方法：自前の変換サービス（LibreOffice / OnlyOffice / 商用 API）、またはブラウザ内 WASM（バンドルサイズ・ライセンス・品質は別評価）。",
    "section_office_li2": "製品方針の例：高忠実度の変換で外部サービスへのアップロードが必要な場合は明示し、プライバシー条項を添える。",
    "section_edit_title": "テキストの一括編集／透かし除去",
    "section_edit_li1": "PDF のテキストは多くの場合描画命令であり、編集可能なドキュメントツリーではありません。「Word のように直す」にはプロ向け PDF エンジンや手作業が通常必要です。",
    "section_edit_li2": "任意ファイルからの透かし除去を保証することはできません。適切な範囲は、当サイトのツールで追加したレイヤーを除去し、条項で制限を明確にすることです。"
  },
  "pdf_merge": {
    "drop_label": "PDF を選択（リスト順に結合・複数回追加可）",
    "drop_desc": "複数選択可。下のリスト順で結合されます。再度ドラッグして追加できます。",
    "err_need_two": "PDF を 2 個以上選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "結合に失敗しました",
    "empty_hint": "まだファイルがありません。",
    "btn_merge_download": "結合してダウンロード",
    "download_name": "merged.pdf"
  },
  "pdf_batch": {
    "phase2_title": "フェーズ2：バッチキュー + Worker レンダリング（対応時）",
    "phase2_body": "OffscreenCanvas が使える場合は Worker でラスタ化し UI のカクつきを抑えます。未対応ではメインスレッドにフォールバックします。",
    "drop_label": "キューに PDF を追加（複数選択・複数回ドロップ可）",
    "drop_desc": "PDF 以外は除外されます。タスクは下のリストに表示されます。",
    "err_no_pdf": "PDF が見つかりません。",
    "err_no_pending": "未処理のタスクがありません（完了済みは再エクスポートしません）。",
    "log_started": "バッチ出力を開始…",
    "err_cancelled": "キャンセルしました",
    "err_failed_msg": "バッチ処理に失敗しました",
    "log_done_zip": "ZIP のダウンロードが完了しました。",
    "scale_label": "出力スケール（バッチ時は 1.4〜2.2 目安）",
    "fmt_label": "出力形式",
    "quality_label": "品質（0.1〜1.0）",
    "status_prefix": "状態:",
    "status_pending": "待機",
    "status_running": "処理中",
    "status_done": "完了",
    "status_error": "エラー",
    "btn_remove": "削除",
    "queue_empty": "キューは空です。",
    "btn_export_all": "すべて出力（未処理 {n} 件）",
    "btn_processing": "処理中…",
    "btn_cancel": "キャンセル",
    "btn_clear_queue": "キューをクリア",
    "log_page_progress": "{file}: {current}/{total}"
  },
  "pdf_compress": {
    "notice_title": "圧縮方針（説明）",
    "notice_body": "ラスタ圧縮：各ページを JPG でレンダリングして PDF を再構築します。スキャン向きで効果が大きく、テキスト PDF は肥大・ぼやけの可能性があります。",
    "drop_label": "PDF を選択",
    "drop_desc": "ブラウザ内でストリーミング再パックして縮小します。アップロードしません。",
    "compress_desc": "ブラウザ内でストリーミング再パックして縮小します。アップロードしません。",
    "empty_pdf": "PDF が未選択です。",
    "download_name": "compressed.pdf",
    "scale_label": "レンダリング倍率（高いほど鮮明・ファイル大）",
    "quality_label": "JPG 品質（0.1〜1.0）",
    "btn_compress": "圧縮してダウンロード",
    "msg_select_first": "先に PDF を選んでください。",
    "msg_done_hint": "ダウンロードしました（スキャンほど効果が出やすいです）。",
    "err_failed": "圧縮に失敗しました"
  },
  "pdf_crop": {
    "intro": "CropBox/MediaBox の余白を pt で調整します。ベクター内容を削除するのではなく表示領域とページ境界を変えます。",
    "drop_label": "PDF を選択",
    "drop_desc": "クロップはローカルで実行。ページは下で設定します。",
    "empty_pdf": "PDF が未選択です。",
    "left": "左余白（pt）",
    "right": "右余白（pt）",
    "top": "上余白（pt）",
    "bottom": "下余白（pt）",
    "mode_label": "クロップモード",
    "mode_crop_media": "CropBox + MediaBox（汎用）",
    "mode_crop_only": "CropBox のみ（保守的）",
    "btn_crop": "クロップしてダウンロード",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_pick_pages": "クロップするページを選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "クロップに失敗しました",
    "download_name": "cropped.pdf"
  },
  "pdf_decrypt": {
    "notice_title": "コンプライアンス注意",
    "notice_body": "実際に知っているパスワードの PDF のみ。ページはラスタ化して再構築するため、選択テキストやリンクは失われます。",
    "drop_encrypt_label": "暗号化 PDF を選択",
    "drop_desc": "パスワードでローカル復号。元ファイルは送信しません。",
    "empty_pdf": "PDF が未選択です。",
    "password_label": "開くパスワード",
    "scale_label": "レンダリング倍率",
    "quality_label": "JPG 品質（0.1〜1.0）",
    "btn_decrypt": "復号してダウンロード",
    "msg_select_first": "PDF を選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "復号に失敗しました",
    "download_name": "decrypted.pdf"
  },
  "pdf_delete_pages": {
    "drop_label": "PDF を選択",
    "drop_desc": "削除するサムネイルをクリック。未選択ページは残して新規ファイルに出力します。",
    "hint_short": "削除するページをクリック。未選択は PDF に残します。",
    "btn_delete": "選択ページを削除してダウンロード",
    "empty_pdf": "PDF が未選択です。",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_pick_delete": "削除するページを選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "削除に失敗しました",
    "thumb_title": "削除するページ",
    "download_name": "deleted-pages.pdf"
  },
  "pdf_extract_text": {
    "drop_label": "PDF を選択",
    "drop_desc": "ページごとにローカルでテキスト抽出。スキャンはテキストが無い場合があります。",
    "empty_pdf": "PDF が未選択です。",
    "btn_extract": "テキスト抽出（txt）",
    "msg_select_pdf": "PDF を選んでください。",
    "progress_page": "{current} / {total} ページを抽出中…",
    "msg_done_hint": "txt を出力しました。画像のみの PDF は空になることがあります。",
    "err_failed": "抽出に失敗しました"
  },
  "pdf_header_footer": {
    "intro": "フェーズ2：左・中央・右のヘッダー／フッターテンプレート。プレースホルダー '{'n'}' と '{'total'}' を置換。中国語は OSS の Source Han Sans サブセットを使用し、取得失敗時はフォールバックします。",
    "presets_heading": "プリセット",
    "drop_label": "PDF を選択",
    "drop_desc": "ヘッダー／フッターをローカルで適用。'{'n'}' / '{'total'}' に対応。",
    "empty_pdf": "PDF が未選択です。",
    "header_left": "ヘッダー左",
    "header_center": "ヘッダー中央",
    "header_right": "ヘッダー右",
    "footer_left": "フッター左",
    "footer_center": "フッター中央",
    "footer_right": "フッター右",
    "ph_company": "例：会社名",
    "ph_title": "例：ドキュメントタイトル",
    "ph_version": "例：バージョン",
    "footer_center_ph": "推奨: '{'n'}' / '{'total'}'",
    "font_size": "フォントサイズ",
    "margin_pt": "余白（pt）",
    "btn_apply": "適用してダウンロード",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_need_field": "ヘッダーまたはフッターを1つ以上入力してください。",
    "msg_pick_pages": "テンプレートを適用するページを選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "失敗しました",
    "preset_minimal_name": "シンプルフッター（n / total）",
    "preset_internal_name": "社外秘 + フッター",
    "preset_dual_name": "二段ヘッダー + 中央フッター",
    "preset_internal_header": "社外秘・持ち出し禁止",
    "preset_internal_footer": "第 '{'n'}' ページ / 全 '{'total'}' ページ",
    "preset_dual_footer": "機密",
    "download_name": "header-footer.pdf"
  },
  "images_to_pdf": {
    "intro": "PNG / JPEG。1画像＝1ページ。ページサイズはピクセル寸法に一致します。",
    "drop_label": "画像を選択（リスト順がページ順・複数回追加可）",
    "drop_desc": "PNG と JPEG のみ。リスト順がページ順です。",
    "empty_hint": "まだファイルがありません。",
    "btn_generate": "PDF を生成",
    "msg_need_image": "画像を1枚以上選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "生成に失敗しました",
    "download_name": "images-merged.pdf"
  },
  "pdf_metadata": {
    "drop_label": "PDF を選択",
    "drop_desc": "よく使う文書プロパティを読み取り、編集して新規ファイルに出力します。",
    "empty_pdf": "PDF が未選択です。",
    "label_title": "タイトル（Title）",
    "label_author": "作成者（Author）",
    "label_subject": "件名（Subject）",
    "label_keywords": "キーワード（Keywords）",
    "keywords_ph": "カンマ区切り",
    "label_creator": "作成アプリ（Creator）",
    "label_producer": "プロデューサー（任意）",
    "producer_ph": "空欄なら既存の Producer を維持",
    "label_language": "言語（任意）",
    "language_ph": "例: zh-CN, en-US。空欄なら Lang は変更しません",
    "checkbox_viewer_prefs": "対応ビューアでウィンドウタイトルにタイトルを優先（ViewerPreferences）",
    "btn_apply": "適用してダウンロード",
    "msg_loaded": "メタデータを読み込みました。編集して出力できます。",
    "msg_read_failed": "読み込みに失敗しました",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_done_verify": "メタデータを書き込んでダウンロードしました（ビューアによってはキャッシュで古いままのことがあります）。",
    "err_export_failed": "出力に失敗しました",
    "download_suffix": "-metadata",
    "page_intro": "ビューアの「文書プロパティ／概要」に相当するよくある項目です。変更は新しいファイルとして書き込まれ、サーバーへアップロードされません。処理には <pdflib>Hopding/pdf-lib</pdflib> を使用しています。"
  },
  "pdf_page_numbers": {
    "intro": "プレースホルダー: '{'n'}' 現在ページ、'{'total'}' 総ページ。日本語も可。OSS のフォントサブセットを使用し、失敗時はフォールバックします。",
    "drop_label": "PDF を選択",
    "drop_desc": "選択ページにフッター／端のページ番号をローカルで追加します。",
    "empty_pdf": "PDF が未選択です。",
    "start_number": "開始番号",
    "align_label": "配置",
    "align_left": "左",
    "align_center": "中央",
    "align_right": "右",
    "format_string": "書式文字列",
    "font_size": "フォントサイズ",
    "margin_x": "水平余白（pt）",
    "margin_y_footer": "フッター持ち上げ（pt・大きいほど上）",
    "btn_add": "ページ番号を付けてダウンロード",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_pick_pages": "番号を付けるページを選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "失敗しました",
    "download_name": "page-numbers.pdf"
  },
  "pdf_reverse": {
    "drop_label": "PDF を選択",
    "drop_desc": "ドキュメント全体のページ順を逆にします。内容は変わりません。",
    "empty_pdf": "PDF が未選択です。",
    "btn_reverse": "順序を反転してダウンロード",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_done": "ダウンロード準備ができました。",
    "err_failed": "処理に失敗しました",
    "download_suffix": "-reversed",
    "page_intro": "綴じ方向や読む順序を全体で逆にしたい場合に適しています。<pdflib>pdf-lib</pdflib> でページを複製する実装であり、ベクターコンテンツを再レンダリングしません。"
  },
  "pdf_rotate": {
    "drop_label": "PDF を選択",
    "drop_desc": "サムネイルでページを選び、相対回転を適用。ローカル処理です。",
    "empty_pdf": "PDF が未選択です。",
    "angle_label": "適用する回転（相対）",
    "btn_rotate": "回転を適用",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_pick_page": "ページを1ページ以上選んでください。",
    "msg_rotate_done": "回転が完了しました。ダウンロードできます。",
    "msg_download_done": "ダウンロードを開始しました。",
    "err_failed": "回転に失敗しました",
    "thumb_title": "回転するページ",
    "thumb_preview_hint": "プレビューはサムネイル表示です。書き出し結果には影響しません。",
    "download_name": "rotated.pdf"
  },
  "pdf_split": {
    "drop_label": "PDF を選択",
    "drop_desc": "「各ページ」または固定チャンクサイズで複数 PDF に分割（ZIP）。",
    "empty_pdf": "PDF が未選択です。",
    "legend_mode": "分割モード",
    "mode_each": "ページごとに1ファイル",
    "mode_chunk": "固定ページ数でグループ化",
    "chunk_size_label": "グループあたりのページ数",
    "hint_each": "各ページが別 PDF になります。",
    "hint_chunk": "{chunk} ページごとにグループ出力します。",
    "btn_split": "分割して ZIP をダウンロード",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_done_zip": "ZIP の生成を開始しました。",
    "err_failed": "分割に失敗しました",
    "thumb_preview_title": "プレビュー（参照のみ・分割は上の設定に従います）"
  },
  "pdf_stamp": {
    "drop_pdf_label": "PDF を選択",
    "drop_pdf_desc": "下地となる PDF。スタンプするページを選びます。",
    "drop_stamp_label": "スタンプ画像（PNG 推奨）",
    "drop_stamp_desc": "PNG または JPEG。透過 PNG が見やすいことが多いです。",
    "empty_pdf": "PDF が未選択です。",
    "empty_stamp": "スタンプ画像がありません。",
    "position_label": "位置",
    "scale_label": "スケール（画像幅に対する比率）",
    "margin_label": "余白（pt）",
    "pos_center": "中央",
    "pos_br": "右下",
    "pos_bl": "左下",
    "pos_tr": "右上",
    "pos_tl": "左上",
    "btn_apply": "スタンプしてダウンロード",
    "msg_need_both": "PDF とスタンプ画像（PNG/JPG）の両方を選んでください。",
    "msg_pick_pages": "スタンプするページを選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "失敗しました",
    "download_name": "stamped.pdf"
  },
  "pdf_to_images": {
    "hint_base": "画像として出力。解像度は倍率で調整。高いほど鮮明だがメモリ・時間がかかります。",
    "hint_fallback": " OffscreenCanvas 非対応のため一部形式は PNG にフォールバックします。",
    "drop_label": "PDF を選択",
    "drop_desc": "各ページを画像にし ZIP でダウンロード。すべてローカルです。",
    "empty_pdf": "PDF が未選択です。",
    "scale_label": "レンダリング倍率（目安 1.5〜3）",
    "fmt_label": "出力形式",
    "opt_png": "PNG（可逆）",
    "opt_jpeg": "JPG（小さめ）",
    "opt_webp": "WebP（小さめ）",
    "quality_label": "品質（0.1〜1.0）",
    "btn_export": "出力（ZIP）",
    "msg_select_pdf": "PDF を選んでください。",
    "progress_export": "{current} / {total} ページを出力中…",
    "msg_zip_done": "ZIP を開始しました。",
    "err_failed": "出力に失敗しました",
    "err_cancelled": "キャンセルしました"
  },
  "pdf_watermark": {
    "intro": "中国語テキストの透かしは OSS の Source Han Sans サブセットを使用。フォント取得に失敗するとビルトインにフォールバックし漢字が□になることがあります。",
    "drop_label": "PDF を選択",
    "drop_desc": "選択ページにテキスト透かしをローカルで追加します。",
    "empty_pdf": "PDF が未選択です。",
    "page_range_hint": "ヒント: all / odd / even / 1,3-5",
    "label_text": "透かしテキスト",
    "label_color": "色（#RRGGBB）",
    "label_font_size": "フォントサイズ",
    "label_opacity": "不透明度（0〜1）",
    "label_angle": "回転（度）",
    "btn_generate": "生成してダウンロード",
    "msg_select_pdf": "PDF を選んでください。",
    "msg_pick_pages": "透かしを付けるページを選んでください。",
    "msg_done": "ダウンロードしました。",
    "err_failed": "失敗しました",
    "download_name": "watermarked.pdf"
  },
  "json_format": {
    "indent_label": "インデント",
    "indent_2": "スペース 2",
    "indent_4": "スペース 4",
    "indent_tab": "タブ",
    "font_size_label": "フォントサイズ",
    "valid_ok": "✓ 有効",
    "valid_bad": "✗ 無効",
    "btn_escape": "エスケープ／解除",
    "btn_json_xml": "JSON ↔ XML",
    "btn_fold": "折りたたみ／展開",
    "hdr_src": "ソース",
    "hdr_result": "結果（編集可）",
    "ph_src": "JSON をここに貼り付けまたは入力…",
    "ph_result": "整形した JSON がここに表示されます…",
    "flash_unescape_fmt_ok": "アンエスケープして整形しました",
    "flash_unescape_ok_maybe": "アンエスケープしました（有効な JSON でない可能性あり）",
    "flash_unescape_fail": "アンエスケープに失敗しました",
    "flash_escape_ok": "エスケープしました",
    "flash_escape_ok_maybe": "エスケープしました（ソースが有効な JSON でない可能性あり）",
    "flash_escape_fail": "エスケープに失敗しました",
    "flash_please_data": "先にデータを入力してください",
    "flash_xml_bad": "変換失敗：XML が無効です",
    "flash_json_bad": "変換失敗：JSON が無効です",
    "hint_xml_done": "XML に変換しました",
    "hint_json_done": "JSON に変換しました",
    "flash_need_json_src": "ソースに JSON を入力してください",
    "flash_need_valid_json": "先に整形するか有効な JSON を入力してください",
    "hint_all_fold": "すべて折りたたみました",
    "hint_all_unfold": "すべて展開しました",
    "flash_result_empty": "結果が空です",
    "flash_clipboard_ok": "クリップボードにコピーしました",
    "flash_no_download": "ダウンロードできる内容がありません",
    "confirm_plain_download": "有効な JSON ではありません。それでもダウンロードしますか？",
    "suffix_json_invalid": "無効な JSON",
    "btn_copy_result": "結果をコピー"
  },
  "og_preview": {
    "mock_card_title": "シミュレーションカード（実クロールではありません）",
    "tag_snippet_title": "メタタグ断片",
    "demo_title": "ツール庫 | Tools Ku",
    "demo_desc": "ブラウザ内でローカル実行されるユーティリティの例です。"
  },
  "robots": {
    "chk_allow_site": "Allow: /（サイト全体を許可）",
    "lbl_disallow_paths": "Disallow パス（1 行に 1 つ）",
    "lbl_sitemap_urls": "Sitemap URL（1 行に 1 つ）",
    "hdr_preview": "robots.txt"
  },
  "sitemap": {
    "lbl_site_root": "サイトのルート URL",
    "lbl_paths": "パスまたは完全 URL（1 行に 1 つ）",
    "hdr_preview": "sitemap.xml"
  },
  "csp": {
    "opt_default": "default-src 'self'",
    "opt_script": "script-src 'self'",
    "opt_unsafe_inline": "インラインスクリプトを許可（弱い）",
    "opt_style": "style-src 'self' 'unsafe-inline'",
    "opt_img": "img-src * data:",
    "opt_font": "font-src 'self'",
    "opt_connect": "connect-src 'self'",
    "opt_frame": "frame-ancestors 'none'",
    "opt_base": "base-uri 'self'",
    "opt_form": "form-action 'self'",
    "opt_upgrade": "upgrade-insecure-requests",
    "lbl_extra_directives": "追加ディレクティブ（1 行に 1 つ、セミコロンで連結）",
    "hdr_preview": "Content-Security-Policy",
    "placeholder_extra": "report-uri https://..."
  },
  "permissions_policy": {
    "lbl_extra": "追加項目（カンマ区切り）",
    "hdr_preview": "Permissions-Policy",
    "placeholder_extra": "interest-cohort=()"
  },
  "env_parse": {
    "chk_mask": "値をマスク（表示のみ、元テキストは変更しません）",
    "lbl_raw": ".env の内容",
    "th_key": "キー",
    "th_value": "値",
    "empty_rows": "キー=値の行がありません"
  },
  "http_headers": {
    "intro": "よく使うセキュリティ向けレスポンスヘッダーの例です（Nginx / CDN / フレームワークのいずれかで設定）。",
    "hsts_title": "HSTS",
    "hsts_desc": "HTTPS を強制（max-age 1 年）",
    "xcto_title": "X-Content-Type-Options",
    "xcto_desc": "MIME スニッフィングを無効化",
    "xfo_title": "X-Frame-Options",
    "xfo_desc": "埋め込みを禁止（DENY と同等）",
    "ref_title": "Referrer-Policy",
    "ref_desc": "Referer を厳しめに",
    "pp_title": "Permissions-Policy（例）",
    "pp_desc": "一部の機密 API を無効化"
  },
  "graphql_format": {
    "lbl_input": "GraphQL",
    "syntax_error": "構文エラー"
  },
  "openapi_view": {
    "lbl_input": "OpenAPI（JSON）",
    "err_invalid_json": "JSON を解析できません",
    "root_label": "root"
  },
  "properties_json": {
    "lbl_properties": ".properties",
    "lbl_json": "JSON（文字列値 → properties）",
    "btn_to_json": "→ JSON",
    "btn_to_properties": "→ Properties",
    "footnote_flat": "ネストしたオブジェクトはフラット化されません。フラットな文字列マップ向けです。",
    "err_failed": "失敗"
  },
  "xml_format": {
    "lbl_xml": "XML",
    "btn_validate_indent": "検証してインデント",
    "err_parse_failed": "XML の解析に失敗しました",
    "err_failed": "失敗"
  },
  "semver": {
    "lbl_a": "バージョン A",
    "lbl_b": "バージョン B",
    "btn_compare": "比較",
    "invalid": "無効",
    "err_parse_line": "解析失敗：A={a}  B={b}",
    "cmp_before": "A は B より前",
    "cmp_after": "A は B より後",
    "cmp_equal": "等しい",
    "line_norm": "正規形：A={a}  B={b}",
    "line_cmp": "比較：{rel}",
    "line_diff": "semver.diff: {diff}",
    "diff_same": "diff:（同一バージョン）"
  },
  "mermaid": {
    "lbl_source": "Mermaid ソース",
    "btn_render": "レンダー",
    "btn_rendering": "レンダリング中…",
    "err_render": "レンダーに失敗しました"
  },
  "editorconfig": {
    "preset_web": "Web 既定（スペース 2）",
    "preset_py": "Python（スペース 4）",
    "preset_go": "Go（Tab）"
  },
  "image_compress": {
    "intro_note": "画像の圧縮はブラウザ内で完結しアップロードしません。寸法は元と同じです。PNG は変更なし・リサイズなしのとき Oxipng（WASM）で損失のない再パックし、多くの場合 canvas 再エンコードより小さくなります。JPG/WebP は品質指定で canvas 上で再エンコードします。同じ形式でサイズが縮まない場合は元ファイルを維持します。既定は各元画像の形式に従い、下で統一も選べます。",
    "drop_desc": "形式と品質を設定して「圧縮開始」で一括書き出し（縦横は元と同じ）。",
    "fmt_auto": "元画像と同じ",
    "fmt_jpeg": "JPG に統一",
    "fmt_webp": "WebP に統一",
    "fmt_png": "PNG に統一"
  },
  "image_exif": {
    "intro_note": "閲覧・削除はすべてブラウザ内で処理します。削除は再エクスポートによるため汎用的ですが、ファイルサイズや形式が変わります。",
    "drop_desc": "ローカルで EXIF を解析します。ファイルは送信されません。",
    "empty_hint": "画像が選択されていません。",
    "lbl_export_after_strip": "削除後の出力形式",
    "opt_jpeg_rec": "JPG（推奨）",
    "opt_png": "PNG",
    "opt_webp": "WebP",
    "btn_strip": "EXIF を削除してダウンロード",
    "details_raw": "EXIF 生データ",
    "msg_no_exif": "EXIF が検出されなかったか、この形式にはありません。",
    "msg_read_fail": "読み込みに失敗しました",
    "msg_exported_clean": "メタデータなし版を書き出しました。",
    "msg_strip_fail": "処理に失敗しました"
  },
  "image_crop": {
    "intro_note": "プレビュー上でドラッグして範囲指定するか、下でピクセルを入力します。処理はブラウザ内です。",
    "drop_desc": "1 枚をトリミングし PNG / JPG / WebP で出力。",
    "empty_hint": "画像が選択されていません。",
    "hint_canvas": "元画像 {w}×{h} px — 画像上でドラッグして選択",
    "lbl_left_x": "左 X",
    "lbl_top_y": "上 Y",
    "lbl_width": "幅",
    "lbl_height": "高さ",
    "btn_reset_full": "画像全体にリセット",
    "lbl_quality_short": "品質",
    "btn_export": "トリミングを書き出し",
    "msg_pick_area": "画像と切り抜き範囲を選択してください。",
    "msg_exported": "トリミング結果を書き出しました。",
    "msg_export_fail": "書き出しに失敗しました"
  },
  "image_resize": {
    "intro_note": "サイズ変更はブラウザ内で処理します。contain は全体を収めて余白、cover ははみ出しをトリミングします。",
    "drop_desc": "下でサイズと形式を設定し、「処理開始」で一括書き出し。"
  },
  "image_scale": {
    "intro_note": "長辺・固定幅・固定高でアスペクト比を保って拡大縮小します。長辺モードでは目標より小さい場合はそのまま；幅・高さ指定では拡大もあり得ます。ローカル処理です。",
    "drop_desc": "モードと目標ピクセルを設定して一括書き出し。",
    "lbl_scale_by": "基準",
    "mode_long_edge": "長辺（上限まで縮小のみ）",
    "mode_width": "幅（幅固定・高さは比率）",
    "mode_height": "高さ（高さ固定・幅は比率）",
    "dim_long_edge": "長辺の上限（px）",
    "dim_width": "目標幅（px）",
    "dim_height": "目標高さ（px）",
    "lbl_quality_01": "品質（0.1～1）"
  },
  "image_transform": {
    "intro_note": "Canvas と CSS フィルター（グレースケール／反転）でローカル処理。JPEG では透明部分を白で合成します。",
    "drop_desc": "一般的なラスタ形式に対応。変換設定後に一括書き出し。",
    "lbl_rotate": "回転",
    "rot_0": "なし",
    "rot_90": "時計回り 90°",
    "rot_180": "180°",
    "rot_270": "時計回り 270°",
    "lbl_export_fmt": "出力形式",
    "lbl_quality_short": "品質",
    "flip_h": "左右反転",
    "flip_v": "上下反転",
    "filter_gray": "グレースケール",
    "filter_invert": "色反転",
    "msg_need_transform": "回転・反転・フィルターのいずれかを選んでください。",
    "msg_summary": "完了：{ok}/{total} 件成功。",
    "btn_zip": "ZIP で一括ダウンロード"
  },
  "image_watermark": {
    "intro_note": "ウォーターマークはブラウザ内で合成します。アップロードはありません。",
    "drop_desc": "テキスト水印を設定して一括書き出し。",
    "lbl_text": "水印テキスト",
    "lbl_position": "位置",
    "pos_tl": "左上",
    "pos_tr": "右上",
    "pos_bl": "左下",
    "pos_br": "右下",
    "pos_center": "中央",
    "lbl_color": "色",
    "lbl_font_size": "フォントサイズ",
    "lbl_opacity": "不透明度（0～1）",
    "lbl_padding": "余白（px）",
    "msg_empty_text": "水印テキストを入力してください。"
  },
  "image_collage": {
    "intro_note": "結合はブラウザ内で行います。枚数が多いと画像が非常に大きくなります。",
    "drop_label": "画像を選択（一覧順が結合順）",
    "drop_desc": "複数選択可。下の順序が結合順です。項目削除で調整できます。",
    "empty_hint": "画像がありません。選択またはドロップするとこの順で結合します。",
    "lbl_direction": "方向",
    "dir_vertical": "縦（長尺）",
    "dir_horizontal": "横",
    "lbl_gap": "間隔（px）",
    "msg_started": "ダウンロードを開始しました。"
  },
  "image_convert": {
    "page_intro": "一般的なラスタ形式（ブラウザのデコード次第で <fmt>PNG、JPEG、WebP、GIF、BMP、ICO、AVIF</fmt> など）と <svg>SVG</svg> をローカルで相互変換します。アニメ GIF は先頭フレームのみ。JPEG へは透明領域を白で埋めます。HEIC などブラウザ未対応形式は読めません。",
    "common_uses_title": "よくある用途",
    "common_use_li1": "Web 素材を WebP または PNG に統一、印刷／アーカイブは JPEG に。",
    "common_use_li2": "SVG をラスタ化し、ラスタのみ対応のツールへ渡す。"
  },
  "image_convert_to_png": {
    "page_intro": "よくある画像形式をローカルで PNG に書き出します。変換は端末内のみで、クラウドへアップロードしません。PNG だけに揃えたいワークフローや受け側が PNG のみのとき向け。アニメは先頭フレームになります。",
    "common_notes_title": "注意",
    "common_notes_li1": "HEIC や一部メーカー形式はブラウザで開けないことがあります。先に OS 側で JPG などに変換してください。",
    "common_notes_li2": "非常に大きい画像はメモリを多く使います。失敗する場合は縮小するか分割してください。",
    "drop_subline": "複数形式を入力可。出力は常に PNG。"
  },
  "image_gif_to_png": {
    "drop_subline": "GIF を想定。1 フレームの PNG を出力。"
  },
  "image_jpg_to_png": {
    "page_intro": "<jpeg>JPEG</jpeg> はロッシーです。PNG にしても失われた細部は戻りませんが、さらなるロッシーは避けられます。PNG が前提の編集やバッチに便利です。複数選択・ドラッグ＆ドロップ可。",
    "notes_title": "補足",
    "notes_body": "一般的な JPEG 写真は不透明です。PNG にした後も通常は不透明のままです（もともと透明度があるソースは稀）。",
    "drop_subline": "JPG／JPEG を主対象。他ラスタも混在可。出力 PNG。"
  },
  "image_jpg_to_webp": {
    "drop_subline": "JPG／JPEG を主対象。その他ラスタから WebP も可。"
  },
  "image_png_to_jpg": {
    "drop_subline": "PNG を主対象。その他ラスタから JPG も可。"
  },
  "image_png_to_webp": {
    "drop_subline": "PNG を主対象。その他ラスタから WebP も可。"
  },
  "image_svg_to_png": {
    "drop_subline": ".svg を選択。出力は PNG。"
  },
  "image_webp_to_jpg": {
    "drop_subline": "WebP を主対象。その他ラスタから JPG も可。"
  },
  "image_webp_to_png": {
    "page_intro": "サイトやアプリは軽い <webp>WebP</webp> を配ることがよくあります。受け側が PNG だけのとき、このページでローカルにまとめて PNG にしてから取り込めます。複数ファイルを一度に選択できます。",
    "tips_title": "ヒント",
    "tips_body": "ロッシー／ロッシレス／透過の WebP はすべてブラウザでピクセルにデコードされてから PNG になります。デスクトップのアプリで書き出すのと近い結果になりやすいです。",
    "drop_subline": "WebP を主対象。他ラスタも可。出力は常に PNG。"
  },
  "image_ico": {
    "intro_note": "1 枚の画像からブラウザ内で favicon.ico を生成します（PNG を内包、現行ブラウザや Windows 向け）。",
    "drop_desc": "辺長を選んで favicon.ico をダウンロード。",
    "pick_label": "画像を選択（512×512 以上推奨）",
    "empty_hint": "画像が選択されていません。",
    "lbl_side": "出力の一辺（正方形）",
    "hint_one_size": "ICO に含まれるのは選択したサイズのみです。",
    "err_pick_first": "先に画像を選択してください。",
    "err_canvas": "キャンバスコンテキストを作成できません",
    "msg_download_started": "favicon.ico のダウンロードを開始しました。",
    "msg_generate_fail": "生成に失敗しました",
    "page_intro": "大きめの画像（512×512 以上推奨）を選び、出力の一辺を指定して <favicon>favicon.ico</favicon> をダウンロードします。"
  },
  "image_ocr": {
    "intro_note": "Tesseract のワーカー・コア・言語データを CDN から読み込みます（初回は時間がかかります）。画像はブラウザ内のみで処理されます。",
    "lbl_langs": "言語（Tesseract コード例：eng、chi_sim、eng+chi_sim）",
    "lbl_image": "画像",
    "hdr_result": "認識結果",
    "prog_initializing": "初期化中…",
    "prog_recognizing": "認識中 {pct}%",
    "empty_result": "（テキストが認識されませんでした）",
    "err_failed": "認識に失敗しました"
  },
  "bcrypt": {
    "text_label": "テキスト",
    "rounds_label": "ラウンド数（4-31）",
    "generate": "ハッシュ生成",
    "copy": "Copy",
    "verify_hash_label": "検証するハッシュ",
    "verify": "検証",
    "match": "一致",
    "not_match": "不一致"
  },
  "sm3": {
    "text_label": "入力テキスト",
    "compute": "計算",
    "copy": "Copy"
  },
  "sm4": {
    "key_label": "キー（32桁16進数）",
    "text_label": "入力テキスト",
    "encrypt": "Encrypt",
    "decrypt": "Decrypt",
    "process": "Process",
    "copy": "Copy",
    "error": "エラー"
  },
  "sm2": {
    "generate_keypair": "Generate Key Pair",
    "public_key": "Public Key",
    "private_key": "Private Key",
    "text_label": "入力テキスト",
    "encrypt": "Encrypt",
    "decrypt": "Decrypt",
    "copy": "Copy",
    "error": "エラー"
  },
  "password_strength": {
    "password_label": "パスワード",
    "level_0": "弱い",
    "level_1": "普通",
    "level_2": "強い",
    "level_3": "非常に強い",
    "length": "Length",
    "crack_time": "推定解除時間",
    "lower": "小文字",
    "upper": "大文字",
    "digit": "数字",
    "special": "特殊文字"
  },
  "wifi_qr": {
    "ssid": "SSID",
    "password": "Password",
    "encryption": "Encryption",
    "none": "None",
    "generate": "QRコード生成"
  },
  "json_to_go": {
    "struct_name": "Struct Name",
    "json_label": "Input JSON",
    "convert": "Convert",
    "copy": "Copy",
    "parse_error": "JSONパースエラー"
  },
  "json_to_java": {
    "class_name": "Class Name",
    "json_label": "Input JSON",
    "convert": "Convert",
    "copy": "Copy",
    "parse_error": "JSONパースエラー"
  },
  "json_to_sql": {
    "table_name": "Table Name",
    "json_label": "Input JSON Array",
    "convert": "Convert",
    "copy": "Copy",
    "parse_error": "JSONパースエラー",
    "not_array": "JSON配列ではありません"
  },
  "json_merge": {
    "json_a": "JSON A",
    "json_b": "JSON B",
    "merge": "Merge",
    "copy": "Copy",
    "parse_error": "JSONパースエラー"
  },
  "nginx_format": {
    "input_label": "Input Nginx Config",
    "format": "Format",
    "copy": "Copy"
  },
  "docker_to_compose": {
    "cmd_label": "Input docker run Command",
    "convert": "Convert",
    "copy": "Copy"
  },
  "regex_cheatsheet": {
    "copy": "Copy",
    "copied": "Copied"
  },
  "faker": {
    "generate": "Generate Fake Data"
  },
  "deobfuscate": {
    "input_label": "Input JS Code",
    "format": "Format",
    "copy": "Copy"
  },
  "text_pinyin": {
    "input_label": "Input Chinese",
    "copy": "Copy"
  },
  "text_zh_convert": {
    "s2t": "Simp→Trad",
    "t2s": "Trad→Simp",
    "input_label": "Input Text",
    "copy": "Copy"
  },
  "text_mask": {
    "input_label": "Input Text",
    "keep_first": "Keep First N",
    "keep_last": "Keep Last N",
    "mask_char": "Mask Char",
    "copy": "Copy"
  },
  "text_emoji": {
    "search_placeholder": "Search Emoji…",
    "copied": "Copied"
  },
  "text_synonym": {
    "input_label": "Input Word",
    "synonyms": "Synonyms",
    "antonyms": "Antonyms",
    "not_found": "Not found in dictionary"
  },
  "totp": {
    "secret_label": "Secret (Base32)",
    "remaining": "{sec}s remaining"
  },
  "basic_auth": {
    "username": "Username",
    "password": "Password",
    "copy": "Copy"
  },
  "cookie_parse": {
    "input_label": "Input Cookie String",
    "key": "Key",
    "value": "Value"
  },
  "jwt_generate": {
    "header": "Header (JSON)",
    "payload": "Payload (JSON)",
    "secret": "Secret",
    "generate": "Generate JWT",
    "copy": "Copy",
    "error": "生成失敗"
  },
  "svg_placeholder": {
    "width": "Width",
    "height": "Height",
    "text": "Text",
    "fg": "Foreground",
    "bg": "Background",
    "copy_svg": "Copy SVG",
    "copy_data_url": "Copy Data URL"
  },
  "stopwatch": {
    "start": "Start",
    "pause": "Pause",
    "resume": "Resume",
    "lap": "Lap",
    "reset": "Reset",
    "lap_n": "Lap {n}"
  },
  "date_calc": {
    "add_days": "Add/Subtract Days",
    "date_diff": "Date Difference",
    "date1": "Date",
    "date2": "Date 2",
    "days": "Days",
    "calc": "Calculate"
  },
  "percentage": {
    "mode_of": "X% of Y",
    "mode_is": "X is what % of Y",
    "mode_change": "Change Rate",
    "percent": "Percent",
    "of_value": "Value",
    "value": "Value",
    "total": "Total",
    "from": "From",
    "to": "To"
  },
  "temperature": {
    "value": "Temperature"
  },
  "roman_numeral": {
    "to_roman": "→ Roman",
    "from_roman": "→ Arabic",
    "arabic": "Arabic",
    "roman": "Roman"
  },
  "image_greyscale": {
    "process": "To Greyscale",
    "download": "Download"
  },
  "image_nine_grid": {
    "process": "Nine Grid Crop"
  },
  "mac_lookup": {
    "input_label": "Input MAC Address",
    "not_found": "Vendor not found"
  },
  "ipv4_range": {
    "start": "Start IP",
    "end": "End IP"
  },
  "port_reference": {
    "port": "Port",
    "proto": "Protocol",
    "name": "Name"
  },
  "math_eval": {
    "placeholder": "数式を入力（例: 2^10 + sqrt(16)）",
    "calc": "計算",
    "preview": "プレビュー",
    "supported": "対応演算",
    "history": "履歴",
    "clear": "クリア"
  },
  "eta_calc": {
    "total": "合計",
    "done": "完了",
    "elapsed": "経過時間",
    "elapsed_unit": "秒",
    "speed": "速度",
    "speed_unit": "個/秒",
    "remaining": "残り時間",
    "total_time": "合計推定"
  },
  "mac_gen": {
    "count": "数量",
    "separator": "区切り",
    "prefix": "プレフィックス（任意）",
    "uppercase": "大文字",
    "generate": "生成",
    "results": "結果",
    "copy_all": "全コピー"
  },
  "device_info": {
    "note": "現在のブラウザ環境情報を検出。",
    "property": "プロパティ",
    "value": "値"
  },
  "bip39": {
    "strength": "エントロピビット",
    "generate": "生成",
    "loading": "読込中…",
    "mnemonic": "ニーモニック",
    "copy": "コピー",
    "error": "生成失敗"
  },
  "rsa_keygen": {
    "key_size": "鍵長",
    "generate": "鍵ペア生成",
    "generating": "生成中…",
    "public_key": "公開鍵 (PEM)",
    "private_key": "秘密鍵 (PEM)",
    "copy": "コピー"
  },
  "xml_json": {
    "input": "入力",
    "output": "出力",
    "convert": "変換",
    "copy": "コピー"
  },
  "json_minify": {
    "input": "JSON入力",
    "minify": "最小化",
    "output": "出力",
    "copy": "コピー",
    "original": "元のサイズ",
    "minified_size": "圧縮後",
    "saved": "削減"
  },
  "numeronym": {
    "encode": "エンコード",
    "decode": "デコード",
    "examples": "よくある例"
  },
  "ascii_art": {
    "text": "テキスト",
    "char_set": "塗り文字",
    "result": "結果",
    "copy": "コピー",
    "hint": "英字・数字・一部記号対応、最大30文字。"
  },
  "idcard": {
    "input_label": "Input ID Card Number",
    "valid": "Valid",
    "invalid": "Invalid",
    "province": "Province",
    "birthday": "Birthday",
    "gender": "Gender",
    "male": "男性",
    "female": "女性",
    "unknown": "Unknown"
  },
  "chinese_colors": {
    "copied": "Copied"
  },
  "relationship": {
    "input_label": "Input relationship chain (e.g., father,mother)",
    "placeholder": "father,mother",
    "unknown": "Unknown"
  },
  "curl_to_code": {
    "input_label": "cURL コマンド",
    "lang_label": "対象言語",
    "convert": "変換",
    "output": "出力コード",
    "copy": "コピー",
    "copied": "コピー済み",
    "err_parse": "cURL コマンドを解析できません"
  },
  "box_shadow": {
    "layer": "レイヤー",
    "remove": "削除",
    "offsetX": "X オフセット",
    "offsetY": "Y オフセット",
    "blur": "ぼかし",
    "spread": "拡散",
    "color": "色",
    "add_layer": "レイヤー追加",
    "preview": "プレビュー",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "border_radius": {
    "top_left": "左上",
    "top_right": "右上",
    "bottom_right": "右下",
    "bottom_left": "左下",
    "preview": "プレビュー",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "flexbox": {
    "direction": "flex-direction",
    "justify_content": "justify-content",
    "align_items": "align-items",
    "flex_wrap": "flex-wrap",
    "gap": "gap",
    "add_child": "子要素追加",
    "remove_child": "子要素削除",
    "preview": "プレビュー",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "gradient": {
    "type": "タイプ",
    "angle": "角度",
    "color_stops": "カラーストップ",
    "remove": "削除",
    "add_stop": "ストップ追加",
    "preview": "プレビュー",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "css_animation": {
    "preset": "プリセット",
    "duration": "時間(s)",
    "timing": "タイミング",
    "iteration": "回数",
    "keyframes": "キーフレーム",
    "preview": "プレビュー",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "color_blindness": {
    "input_color": "入力色",
    "original": "元の色",
    "palette": "パレットプレビュー"
  },
  "token_count": {
    "input_label": "テキスト入力",
    "placeholder": "トークン数を推定するテキストを入力…",
    "chars": "文字",
    "words": "単語",
    "lines": "行",
    "estimate": "トークン推定",
    "tokens": "tokens",
    "of_context": "コンテキスト比",
    "disclaimer": "※ 近似推定です。実際のトークン数はトークナイザに依存します。"
  },
  "screenshot_beautify": {
    "upload": "スクリーンショットをアップロード",
    "bg_color": "背景色",
    "padding": "パディング",
    "border_radius": "角丸",
    "shadow_blur": "シャドウぼかし",
    "shadow_color": "シャドウ色",
    "preview": "プレビュー",
    "no_image": "スクリーンショットをアップロードしてください",
    "export_png": "PNG エクスポート"
  },
  "pangu_spacing": {
    "input_label": "テキスト入力",
    "placeholder": "Hello世界、これは123testテキスト",
    "output": "変換結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "aspect_ratio": {
    "width": "幅",
    "height": "高さ",
    "calc_ratio": "比を計算",
    "common_ratios": "一般的な比",
    "reverse_calc": "逆算",
    "ratio_w": "比 W",
    "ratio_h": "比 H",
    "known_side": "既知の辺",
    "known_value": "既知の値",
    "result": "結果"
  },
  "loan_calc": {
    "principal": "元本額",
    "annual_rate": "年利率(%)",
    "term": "返済期間(年)",
    "term_half_year": "半年 ({months}期)",
    "term_years": "{years}年 ({months}期)",
    "method": "返済方式",
    "equal_installment": "元利均等",
    "equal_principal": "元金均等",
    "monthly_payment": "月次返済額",
    "total_interest": "総利息",
    "total_payment": "返済総額",
    "schedule": "返済スケジュール",
    "month": "期",
    "payment": "返済額",
    "principal_part": "元本",
    "interest_part": "利息",
    "remaining": "残高"
  },
  "bmi": {
    "height": "身長",
    "weight": "体重",
    "underweight": "低体重",
    "normal": "正常",
    "overweight": "過体重",
    "obese": "肥満",
    "range_chart": "BMI 範囲図"
  },
  "work_hours": {
    "start_time": "開始時刻",
    "end_time": "終了時刻",
    "lunch_break": "休憩時間",
    "minutes": "分",
    "standard_hours": "標準勤務時間",
    "total_time": "総時間",
    "work_time": "勤務時間",
    "overtime": "残業時間",
    "salary_estimate": "給与推定",
    "hourly_rate": "時給",
    "regular_pay": "通常給与",
    "overtime_pay": "残業給与",
    "total_pay": "合計",
    "hour": "時間",
    "minute": "分"
  },
  "template_filler": {
    "template_label": "テンプレートテキスト",
    "template_placeholder": "テンプレートを入力、例：こんにちは、'{' '{' 'name' '}' '}'！",
    "variables": "変数",
    "fill_data": "データ入力",
    "add_row": "行を追加",
    "row": "行",
    "remove_row": "削除",
    "result": "結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "url_defang": {
    "defang": "デファング",
    "refang": "リファング",
    "input_label": "URL 入力",
    "output": "出力",
    "copy": "コピー",
    "copied": "コピー済み",
    "rules": "ルール",
    "rule1": ":// → [://]",
    "rule2": ". → [.]",
    "rule3": "リファングは逆操作"
  },
  "protobuf_decode": {
    "decode": "デコード",
    "invalid_hex": "無効な16進数入力",
    "result": "解析結果",
    "field": "フィールド",
    "wire_type": "型",
    "value": "値",
    "unknown_wire": "不明なワイヤタイプ"
  },
  "pdf_signature": {
    "upload": "PDF をアップロード",
    "checking": "確認中…",
    "signed": "署名あり",
    "not_signed": "署名なし",
    "file": "ファイル",
    "pages": "ページ数",
    "parse_error": "PDF 解析エラー"
  },
  "dev_string_obfuscator": {
    "input_label": "コード入力",
    "input_placeholder": "文字列リテラルを含む JavaScript コードを貼り付け…",
    "method_label": "難読化方式",
    "method_base64": "Base64",
    "method_hex": "Hex",
    "method_unicode": "Unicode",
    "method_charcode": "CharCode",
    "method_reverse": "反転",
    "obfuscate": "難読化",
    "output": "難読化結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "web_safelink_decode": {
    "input_label": "SafeLink URL 入力",
    "input_placeholder": "Outlook SafeLink URL を貼り付け…",
    "decode": "デコード",
    "original_url": "元の URL",
    "copy": "コピー",
    "copied": "コピー済み",
    "err_not_safelink": "有効な Outlook SafeLink ではありません",
    "err_no_url_param": "SafeLink に `url` クエリがありません",
    "err_invalid_url": "URL を解析できません"
  },
  "dev_git_cheatsheet": {
    "category_basic": "基本操作",
    "category_branch": "ブランチ管理",
    "category_remote": "リモートリポジトリ",
    "category_undo": "取り消し・ロールバック",
    "category_stash": "スタッシュ",
    "category_log": "ログ・履歴",
    "copy": "コピー",
    "copied": "コピー済み",
    "click_copy": "クリックでコピー"
  },
  "email_normalizer": {
    "input_label": "メールアドレス入力",
    "input_placeholder": "1行に1件…",
    "normalize": "正規化",
    "output": "正規化結果",
    "copy": "コピー",
    "copied": "コピー済み",
    "col_original": "変換前",
    "col_normalized": "変換後",
    "remove_dots": "Gmail ドット除去",
    "remove_plus": "+エイリアス除去",
    "lowercase": "小文字に変換"
  },
  "html_wysiwyg": {
    "bold": "太字",
    "italic": "斜体",
    "underline": "下線",
    "strikethrough": "取り消し線",
    "ordered_list": "順序付きリスト",
    "unordered_list": "順序なしリスト",
    "mode_edit": "ビジュアル",
    "source_view": "ソースビュー",
    "preview": "プレビュー",
    "copy_html": "HTML コピー",
    "copied": "コピー済み",
    "prompt_url": "リンク URL",
    "prompt_img_url": "画像 URL"
  },
  "dev_benchmark": {
    "add_snippet": "スニペット追加",
    "snippet_label": "スニペット {n}",
    "iterations_label": "イテレーション数",
    "run": "ベンチマーク実行",
    "running": "実行中…",
    "result": "結果",
    "avg_time": "平均時間",
    "rank": "順位",
    "copy": "コピー",
    "placeholder_name": "スニペット名",
    "placeholder_code": "ベンチマークする JavaScript コード…",
    "err_run": "ベンチマークの実行に失敗しました",
    "col_snippet": "スニペット",
    "col_bar": "相対"
  },
  "dev_css_unit_converter": {
    "context_title": "px 基準",
    "input_title": "入力",
    "value_label": "値",
    "from_unit": "変換元単位",
    "results_title": "換算結果",
    "col_unit": "単位",
    "col_value": "値",
    "base_size_label": "基准フォントサイズ（px）",
    "viewport_width": "ビューポート幅（px）",
    "viewport_height": "ビューポート高さ（px）",
    "result": "変換結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "random_port": {
    "count_label": "生成数",
    "min_label": "最小ポート",
    "max_label": "最大ポート",
    "exclude_system": "システム予約ポートを除外（0–1023）",
    "generate": "生成",
    "copy": "コピー",
    "copied": "コピー済み",
    "output": "結果",
    "click_copy": "クリックでコピー"
  },
  "ipv6_ula": {
    "mac_label": "MAC アドレス（任意）",
    "mac_placeholder": "例: aa:bb:cc:dd:ee:ff",
    "generate": "ULA 生成",
    "prefix": "ULA プレフィックス",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "ipv4_converter": {
    "input_label": "IPv4 アドレス入力",
    "input_placeholder": "例: 192.168.1.1",
    "dotted_decimal": "ドット区切り10進",
    "decimal": "10進整数",
    "hexadecimal": "16進数",
    "binary": "2進数",
    "octal": "8進数",
    "copy": "コピー",
    "copied": "コピー済み",
    "err_invalid": "無効な IPv4 アドレス"
  },
  "web_meta_tag_generator": {
    "general": "基本メタ",
    "title_label": "タイトル（Title）",
    "description_label": "説明（Description）",
    "viewport_label": "Viewport",
    "charset_label": "Charset",
    "author_label": "著者（Author）",
    "keywords_label": "キーワード（Keywords）",
    "robots_label": "Robots",
    "og_title": "OG Title",
    "og_description": "OG Description",
    "og_image": "OG Image URL",
    "og_url": "OG URL",
    "twitter_card": "Twitter Card タイプ",
    "generate": "生成",
    "output": "Meta タグコード",
    "preview": "プレビュー",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "encode_unicode": {
    "input_label": "テキスト入力",
    "output_label": "出力",
    "encode": "エンコード",
    "decode": "デコード",
    "format_label": "形式",
    "format_backslash_u": "\\uXXXX",
    "format_html_entity": "&#xXXXX;",
    "copy": "コピー",
    "copied": "コピー済み",
    "decode_failed": "デコードに失敗しました"
  },
  "encode_quoted_printable": {
    "input_label": "入力",
    "output_label": "出力",
    "line_len": "最大行長",
    "encode": "エンコード",
    "decode": "デコード",
    "copy": "コピー",
    "copied": "コピー済み",
    "encode_failed": "エンコードに失敗しました",
    "decode_failed": "デコードに失敗しました",
    "err_decode": "Quoted-Printable デコード失敗"
  },
  "encode_uuencode": {
    "input_label": "入力",
    "output_label": "出力",
    "encode": "UUEncode",
    "decode": "UUDecode",
    "filename_label": "ファイル名",
    "mode": "ファイルモード（例: 644）",
    "copy": "コピー",
    "copied": "コピー済み",
    "encode_failed": "エンコードに失敗しました",
    "decode_failed": "デコードに失敗しました",
    "err_decode": "UUDecode 失敗"
  },
  "encode_base85": {
    "input_label": "入力",
    "input_mode": "入力モード",
    "mode_text": "テキスト（UTF-8）",
    "mode_hex": "16 進バイト列",
    "delimiters": "<~ ~> で囲む",
    "output_label": "出力",
    "encode": "エンコード",
    "decode": "デコード",
    "copy": "コピー",
    "copied": "コピー済み",
    "invalid_hex": "16 進が無効です",
    "encode_failed": "エンコードに失敗しました",
    "decode_failed": "デコードに失敗しました",
    "err_decode": "Base85 デコード失敗"
  },
  "camera_recorder": {
    "select_device": "カメラデバイス",
    "default": "既定",
    "start_camera": "カメラ開始",
    "stop_camera": "カメラ停止",
    "take_photo": "撮影",
    "start_record": "録画開始",
    "stop_record": "録画停止",
    "pause": "一時停止",
    "resume": "再開",
    "recording": "録画中…",
    "paused": "一時停止中",
    "photo_result": "写真",
    "video_result": "動画",
    "export_photo": "PNG エクスポート",
    "export_video": "WebM エクスポート",
    "no_camera": "カメラにアクセスできません"
  },
  "docs_cheatsheet": {
    "title_label": "チートシートタイトル",
    "add_category": "カテゴリ追加",
    "category_label": "カテゴリ名",
    "content_label": "内容（Markdown）",
    "preview": "プレビュー",
    "export": "エクスポート",
    "export_md": "Markdown をエクスポート",
    "export_html": "HTML をエクスポート",
    "remove": "削除",
    "entry_title": "エントリタイトル",
    "add_entry": "エントリ追加",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "text_regex_memo": {
    "category_chars": "文字クラス",
    "category_quantifiers": "量指定子",
    "category_anchors": "アンカー",
    "category_groups": "グループと参照",
    "category_lookaround": "先読み・後読み（lookahead / lookbehind）",
    "category_flags": "フラグ",
    "copy": "コピー",
    "click_copy": "クリックでコピー",
    "copied": "コピー済み"
  },
  "dev_git_diff_viewer": {
    "input_label": "diff 出力を貼り付け",
    "input_placeholder": "git diff 出力テキストを貼り付け…",
    "parse": "解析",
    "files_changed": "変更ファイル",
    "additions": "追加",
    "deletions": "削除",
    "changes": "変更",
    "err_parse": "diff 出力を解析できません"
  },
  "web_url_query_editor": {
    "url_label": "URL 入力",
    "url_placeholder": "https://example.com?key=value&foo=bar",
    "parse": "解析",
    "url_encode": "生成時に URL エンコード",
    "params": "クエリパラメータ",
    "result": "生成された URL",
    "key": "キー",
    "value": "値",
    "add_param": "パラメータ追加",
    "remove_param": "削除",
    "preview": "URL プレビュー",
    "copy": "コピー",
    "copied": "コピー済み",
    "err_invalid_url": "無効な URL"
  },
  "tax_calc": {
    "income_label": "税前月薪（元）",
    "social_label": "五险一金（月，元）",
    "special_label": "专项附加扣除（月，元）",
    "calc": "计算",
    "taxable": "月应纳税所得额：",
    "annual_taxable": "年应纳税所得额：",
    "rate": "适用税率：",
    "monthly_tax": "月应扣税额：",
    "annual_tax": "年应扣税额：",
    "after_tax": "税后月薪："
  },
  "coord_convert": {
    "lng_label": "经度 (lng)",
    "lat_label": "纬度 (lat)",
    "from_label": "源坐标系",
    "to_label": "目标坐标系",
    "convert": "转换",
    "result_label": "结果",
    "copy": "复制"
  },
  "sensitive_words": {
    "placeholder": "公文・プレスリリース・告知文などを貼り付け…",
    "check": "厳格チェック",
    "found_prefix": "検出された禁止語（{count} 種類）：",
    "col_word": "禁止語",
    "col_count": "出現回数",
    "no_found": "辞書に未命中。公開前の人工審査は必須です。",
    "bank_count": "政府向け厳格辞書：{count} 語",
    "mode_hint": "回避検出：空白・ゼロ幅文字除去、全角正規化後に再スキャン。",
    "disclaimer": "本ツールは保密審査・最終承認の代替になりません。未検出でも公開可否を保証しません。",
    "custom_dict_title": "カスタム辞書",
    "custom_dict_hint": "UTF-8、1行1語。# で始まる行はコメント。ブラウザにローカル保存。",
    "upload_dict": "辞書をアップロード (.txt)",
    "upload_txt": "検査テキスト (.txt)",
    "clear_custom": "カスタム辞書をクリア",
    "custom_bank_count": "カスタム {count} 語",
    "active_bank_count": "有効 {count} 語",
    "source_file": "ソースファイル",
    "highlight_title": "ハイライトプレビュー",
    "col_position": "出現位置",
    "dict_imported": "{count} 語をインポートしました",
    "dict_cleared": "カスタム辞書をクリアしました",
    "err_dict_empty": "辞書ファイルが空または無効です",
    "err_dict_parse": "辞書の読み込みに失敗しました",
    "err_txt_read": "テキストの読み込みに失敗しました"
  },
  "signature": {
    "color_label": "笔触颜色",
    "width_label": "笔触粗细",
    "export": "导出 PNG",
    "clear": "清除"
  },
  "subtitle_convert": {
    "from_fmt": "源格式",
    "to_fmt": "目标格式",
    "input_placeholder": "粘贴字幕内容…",
    "convert": "转换",
    "output": "输出",
    "copy": "复制"
  },
  "htpasswd": {
    "username_label": "用户名",
    "password_label": "密码",
    "algorithm_label": "算法",
    "add": "添加",
    "copy": "复制全部"
  },
  "gcd_lcm": {
    "input_label": "输入数字（逗号分隔）",
    "input_placeholder": "如 12, 18, 24",
    "calc": "计算"
  },
  "periodic_table": {
    "atomic_number": "原子序数：",
    "atomic_mass": "相对原子质量：",
    "category": "分类："
  },
  "danmaku": {
    "text_label": "弹幕文字",
    "color_label": "颜色",
    "speed_label": "速度",
    "send": "发送"
  },
  "teleprompter": {
    "placeholder": "输入台词或脚本内容…",
    "speed_label": "速度",
    "font_size_label": "字号",
    "mirror_label": "镜像翻转",
    "play": "开始播放",
    "stop": "停止",
    "pause": "暂停"
  },
  "batch_rename": {
    "add_files": "添加文件",
    "prefix_label": "前缀",
    "start_num_label": "起始序号",
    "pad_len_label": "补零位数",
    "ext_label": "扩展名",
    "col_original": "原文件名",
    "col_renamed": "新文件名",
    "copy": "复制列表"
  },
  "bankcard_bin": {
    "card_label": "银行卡号",
    "placeholder": "输入至少6位卡号",
    "query": "查询",
    "bank_label": "发卡行：",
    "type_label": "卡类型：",
    "not_found": "未找到对应银行信息。"
  },
  "gif_frames": {
    "hint": "上传 GIF 文件以提取帧",
    "frame_count": "帧数："
  },
  "code_screenshot": {
    "lang_label": "语言",
    "bg_label": "背景色",
    "export": "导出 PNG"
  },
  "grid_paper": {
    "type_label": "格子类型",
    "type_tian": "田字格",
    "type_mi": "米字格",
    "type_fang": "方格纸",
    "type_dot": "点阵纸",
    "cell_size_label": "格大小 (px)",
    "rows_label": "行数",
    "cols_label": "列数",
    "generate": "生成",
    "export": "导出 PNG"
  },
  "exchange_rate": {
    "amount_label": "金额",
    "from_label": "源货币",
    "to_label": "目标货币",
    "convert": "换算",
    "disclaimer": "汇率为内置离线参考值，仅供参考。"
  },
  "hanzi_decompose": {
    "placeholder": "输入汉字…",
    "decompose": "拆字",
    "unknown": "未收录"
  },
  "audio_editor": {
    "start_label": "起始 (秒)",
    "end_label": "结束 (秒)",
    "duration": "总时长：",
    "clip": "裁剪并导出 WAV"
  },
  "csr_generate": {
    "key_size": "密钥长度",
    "generate": "生成",
    "private_key": "私钥"
  },
  "torrent_analyze": {
    "parse_error": "解析失败，请确认是有效的 .torrent 文件。",
    "name_label": "名称：",
    "total_size": "总大小：",
    "piece_length": "分片大小：",
    "info_hash": "Info Hash：",
    "files_label": "文件列表：",
    "trackers": "Tracker：",
    "magnet_link": "磁力链接：",
    "copy": "复制"
  },
  "pdf_encrypt": {
    "drop_label": "PDFを選択",
    "drop_desc": "未暗号化PDFに開くパスワードを設定",
    "empty_pdf": "PDF未選択",
    "password_label": "開くパスワード",
    "confirm_label": "パスワード確認",
    "btn_encrypt": "暗号化してダウンロード",
    "msg_select_first": "先にPDFファイルを選択してください。",
    "msg_password_required": "パスワードを入力してください。",
    "msg_password_mismatch": "パスワードが一致しません。",
    "msg_done": "暗号化PDFを生成し、ダウンロードを開始しました。",
    "err_encrypted_or_invalid": "このPDFを読み取れません（暗号化済み・破損・非対応の可能性）。パスワードがある場合は先に「PDF復号」をご利用ください。",
    "err_failed": "暗号化に失敗しました。ChromeまたはEdgeをお試しください。"
  },
  "heic_to_jpg": {
    "hint": "HEIC/HEIFはブラウザ内でJPGに変換されます。ファイルはアップロードされません。",
    "drop_label": "HEIC / HEIF 画像",
    "drop_desc": ".heic、.heif — 複数可",
    "empty": "HEICファイル未選択",
    "quality_label": "JPG品質（0.5–1）",
    "btn_convert": "JPGに変換",
    "msg_select": "先にHEIC/HEIF画像を選択してください。",
    "msg_done": "変換完了。ダウンロードを開始しました。",
    "err_convert": "このHEICファイルをデコードできません。",
    "err_failed": "変換に失敗しました。ChromeまたはEdgeをお試しください。"
  },
  "word_count": {
    "hint": "テキストを入力するとローカルで即時集計されます。"
  },
  "age_calc": {
    "birth_label": "生年月日",
    "ref_label": "基準日（任意）",
    "ref_hint": "空欄の場合は今日",
    "years": "年",
    "months": "月",
    "days": "日",
    "total_days": "総日数",
    "err_invalid_birth": "生年月日が無効です",
    "err_ref_before_birth": "基準日は生年月日より前にできません"
  },
  "random_number": {
    "min": "最小値",
    "max": "最大値",
    "count": "個数（1–500）",
    "integer": "整数のみ",
    "generate": "生成",
    "copy": "すべてコピー",
    "output": "結果",
    "err_range": "整数モードでは最小値が最大値を超えられません",
    "copied": "クリップボードにコピーしました。"
  },
  "caesar": {
    "input_text": "入力テキスト",
    "shift": "シフト量 (1-25)",
    "mode": "モード",
    "encrypt": "暗号化",
    "decrypt": "復号",
    "run": "実行",
    "result": "結果"
  },
  "des": {
    "input_text": "入力テキスト/16進数",
    "key": "鍵 (≥8バイト)",
    "mode": "モード",
    "action": "操作",
    "encrypt": "暗号化",
    "decrypt": "復号",
    "run": "実行",
    "result": "結果",
    "key_too_short": "鍵は8バイト以上必要",
    "invalid_hex": "16進数長が16の倍数ではありません"
  },
  "ripemd": {
    "input_text": "入力テキスト",
    "compute": "計算",
    "result": "RIPEMD-160 ハッシュ"
  },
  "bcc_lrc": {
    "input_hex": "16進数データ（スペース区切り）",
    "mode": "チェックモード",
    "compute": "計算",
    "result": "結果",
    "invalid_hex": "無効な16進数バイト",
    "no_data": "データを入力してください"
  },
  "iso_garble": {
    "input": "文字化けテキスト",
    "fix": "修正",
    "result": "修正結果",
    "not_iso": "非ISO-8859-1文字を含みます",
    "decode_failed": "UTF-8デコード失敗"
  },
  "emoji_encode": {
    "input": "入力テキスト",
    "mode": "エンコード方式",
    "core_values": "核心価値観",
    "action": "操作",
    "encode": "エンコード",
    "decode": "デコード",
    "run": "実行",
    "result": "結果",
    "decode_failed": "デコード失敗"
  },
  "code_playground": {
    "preview": "プレビュー"
  },
  "dir_tree": {
    "input": "ディレクトリパス（1行に1つ）",
    "generate": "生成",
    "result": "ディレクトリツリー"
  },
  "kv_to_code": {
    "input": "キー・バリューペア（key=value、1行に1つ）",
    "language": "対象言語",
    "convert": "変換",
    "result": "コード"
  },
  "file_hash": {
    "algorithm": "ハッシュアルゴリズム",
    "drop_here": "ファイルをドロップ",
    "browse": "ファイル参照"
  },
  "endianness": {
    "input_hex": "入力16進数バイト",
    "from": "入力エンディアン",
    "to": "出力エンディアン",
    "convert": "変換",
    "result": "結果"
  },
  "ones_complement": {
    "decimal": "10進整数",
    "bits": "ビット幅",
    "compute": "計算",
    "original": "原符号",
    "ones": "1の補数",
    "twos": "2の補数"
  },
  "ssl_generate": {
    "key_type": "鍵タイプ",
    "generate": "生成",
    "public_key": "公開鍵",
    "private_key": "秘密鍵",
    "fingerprint": "SHA-256 フィンガープリント"
  },
  "url_batch": {
    "template": "URLテンプレート（{id} または {param} プレースホルダ）",
    "params": "パラメータリスト（1行に1つ）",
    "generate": "生成",
    "result": "結果"
  },
  "line_filter": {
    "input": "入力テキスト",
    "min_len": "最小長",
    "max_len": "最大長",
    "action": "操作",
    "filter": "フィルタ",
    "truncate": "切詰",
    "pad": "パディング",
    "run": "実行",
    "result": "結果"
  },
  "tts": {
    "input": "入力テキスト",
    "voice": "音声",
    "rate": "速度",
    "volume": "音量",
    "play": "再生",
    "pause": "一時停止",
    "stop": "停止",
    "speaking": "読み上げ中..."
  },
  "whois": {
    "domain": "ドメイン",
    "query": "検索",
    "querying": "検索中...",
    "result": "結果"
  },
  "dns_query": {
    "domain": "ドメイン",
    "record_type": "レコードタイプ",
    "query": "検索",
    "querying": "検索中...",
    "result": "結果"
  },
  "icp_query": {
    "domain": "ドメイン",
    "query": "検索",
    "querying": "検索中...",
    "result": "結果",
    "api_error": "APIリクエスト失敗"
  },
  "my_ip": {
    "query": "IPを検索",
    "querying": "検索中..."
  },
  "browser_fingerprint": {
    "ua": "User-Agent",
    "language": "言語",
    "languages": "言語リスト",
    "platform": "プラットフォーム",
    "cookies": "Cookie",
    "do_not_track": "Do Not Track",
    "screen_res": "画面解像度",
    "avail_res": "利用可能解像度",
    "color_depth": "色深度",
    "pixel_depth": "ピクセル深度",
    "device_pixel_ratio": "デバイスピクセル比",
    "timezone": "タイムゾーン",
    "timezone_offset": "タイムゾーンオフセット",
    "max_touch": "タッチポイント",
    "hardware_concurrency": "CPUコア",
    "memory": "メモリ",
    "canvas": "Canvasフィンガープリント"
  },
  "doh": {
    "domain": "ドメイン",
    "server": "DoHサーバー",
    "query": "検索",
    "querying": "検索中...",
    "result": "結果"
  },
  "placeholder_img": {
    "width": "幅",
    "height": "高さ",
    "bg": "背景色",
    "fg": "前景色",
    "text": "テキスト",
    "generate": "生成",
    "download": "ダウンロード"
  },
  "privacy_policy": {
    "app_name": "アプリ名",
    "developer": "開発者",
    "collect_types": "収集データ種別",
    "generate": "生成",
    "result": "プライバシーポリシー",
    "title": "プライバシーポリシー",
    "default_types": "デバイス情報、位置情報、使用ログ",
    "section1_title": "1. 情報収集",
    "section1_body": "{appName}は{developer}により開発運営されています。サービス提供・改善のため以下の情報を収集します。",
    "section2_title": "2. 情報利用",
    "section2_body": "{appName}が収集する{types}はアプリ運営と体験改善のみに利用し、第三者に販売しません。",
    "section3_title": "3. 情報セキュリティ",
    "section3_body": "個人情報の安全を保護するための合理的な措置を講じています。",
    "section4_title": "4. あなたの権利",
    "section4_body": "個人情報へのアクセス、訂正、削除の権利があります。",
    "section5_title": "5. 連絡先",
    "section5_body": "ご質問は{developer}までご連絡ください。"
  },
  "pomodoro": {
    "work": "作業中",
    "break": "休憩中",
    "start": "開始",
    "pause": "一時停止",
    "reset": "リセット",
    "work_min": "作業(分)",
    "break_min": "休憩(分)",
    "completed": "完了"
  },
  "art_qr": {
    "text": "テキスト/URL",
    "fg": "前景色",
    "bg": "背景色",
    "style": "ドットスタイル",
    "square": "四角",
    "circle": "円",
    "generate": "生成",
    "download": "ダウンロード"
  },
  "ppi_calc": {
    "diagonal": "対角(インチ)",
    "horizontal": "水平px",
    "vertical": "垂直px",
    "compute": "計算",
    "result": "PPI"
  },
  "mortgage_calc": {
    "principal": "ローン金額",
    "rate": "年利率(%)",
    "years": "返済年数",
    "method": "返済方式",
    "equal_payment": "元利均等",
    "equal_principal": "元金均等",
    "compute": "計算",
    "monthly": "月額",
    "total": "総返済額",
    "interest": "総利息",
    "first_month": "初月返済額"
  },
  "gb_code": {
    "search": "文字またはコードを検索"
  },
  "solar_lunar": {
    "year": "年",
    "month": "月",
    "day": "日",
    "convert": "変換"
  },
  "world_clock": {},
  "chem_balance": {
    "input": "化学方程式（例: H2+O2=H2O）",
    "balance": "バランス"
  },
  "mic_test": {
    "enumerate": "デバイス一覧",
    "default": "デフォルトデバイス",
    "device": "デバイス",
    "status_label": "ステータス",
    "status_idle": "アイドル",
    "status_granted": "許可済み",
    "status_denied": "拒否",
    "status_recording": "録音中",
    "status_playing": "再生中",
    "record": "録音開始",
    "stop": "録音停止",
    "play": "録音再生",
    "download": "録音ダウンロード",
    "duration": "時間",
    "volume": "音量"
  },
  "keyboard_test": {
    "hint": "キーボードのキーを押してテストしてください",
    "current": "現在のキー",
    "history": "キー履歴"
  },
  "screen_test": {
    "color_red": "赤",
    "color_green": "緑",
    "color_blue": "青",
    "color_white": "白",
    "color_black": "黒",
    "click_exit": "クリックまたは ESC で全画面終了",
    "screen_info": "画面情報",
    "resolution": "解像度",
    "available": "使用可能領域",
    "pixel_ratio": "ピクセル比",
    "esc_hint": "ESC キーで全画面モードを終了"
  },
  "pfx_to_pem": {
    "select_file": "PFX/P12 ファイルを選択",
    "password": "パスワード",
    "parse": "解析",
    "parsing": "解析中...",
    "cert_pem": "証明書 PEM",
    "key_pem": "秘密鍵 PEM",
    "download": "ダウンロード",
    "parse_error": "解析失敗",
    "no_content": "証明書または秘密鍵が見つかりません",
    "forge_required": "node-forge ライブラリが必要です"
  },
  "http_request": {
    "headers": "リクエストヘッダー",
    "add_header": "ヘッダー追加",
    "body": "リクエストボディ",
    "send": "送信",
    "sending": "送信中...",
    "cors_warning": "注意：ブラウザの CORS ポリシーにより一部のリクエストが制限される場合があります",
    "status": "ステータス",
    "status_text": "ステータステキスト",
    "time": "所要時間",
    "response_headers": "レスポンスヘッダー",
    "response_body": "レスポンスボディ"
  },
  "doodle": {
    "color": "色",
    "size": "ブラシサイズ",
    "eraser": "消しゴム",
    "undo": "元に戻す",
    "clear": "クリア",
    "download": "PNGダウンロード",
    "reset": "キャンバスリセット"
  },
  "modpow": {
    "base": "底 (base)",
    "exponent": "指数 (exponent)",
    "modulus": "法 (modulus)",
    "calc": "計算",
    "result": "結果：",
    "err_modulus_zero": "法は 0 にできません",
    "err_negative_exp": "指数は負数にできません",
    "err_invalid": "入力が無効です。整数を入力してください",
    "note": "累乗剰余は RSA 暗号、Diffie-Hellman 鍵交換、楕円曲線暗号などで広く使われます。このツールは BigInt で平方乗算法を実装し、任意の大整数に対応します。"
  },
  "bit_reverse": {
    "input_label": "正の整数を入力",
    "width_label": "ビット幅",
    "calc": "計算",
    "step_original": "元の2進数：",
    "step_reversed": "反転2進数：",
    "result_dec": "結果（10進数）：",
    "result_hex": "結果（16進数）：",
    "err_negative": "非負整数を入力してください",
    "err_invalid": "入力が無効です"
  },
  "punctuation": {
    "cn2en": "全角→半角",
    "en2cn": "半角→全角",
    "input_label": "入力テキスト",
    "convert": "変換",
    "output_label": "出力結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "leap_year": {
    "mode_single": "単年チェック",
    "mode_range": "範囲チェック",
    "year_label": "年",
    "start_label": "開始年",
    "end_label": "終了年",
    "check": "チェック",
    "is_leap": "{year} 年は閏年です",
    "not_leap": "{year} 年は閏年ではありません",
    "range_result": "{start}–{end} の間に {count} 個の閏年があります：",
    "err_invalid": "有効な年を入力してください",
    "err_range": "有効な開始年と終了年を入力してください",
    "rule": "閏年のルール：4で割り切れる年は閏年ですが、100で割り切れて400で割り切れない年は平年です。例：2000年は閏年、1900年は平年、2024年は閏年。"
  },
  "reverse": {
    "mode_char": "文字反転",
    "mode_line": "行反転",
    "input_label": "入力テキスト",
    "action": "反転",
    "output_label": "出力結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "reaction_test": {
    "click_start": "クリックして開始",
    "wait_green": "緑色の信号を待つ…",
    "click_now": "今すぐクリック！",
    "your_time": "反応時間：{ms} ms",
    "too_early": "早すぎます！緑色の信号を待ってください。",
    "try_again": "もう一度",
    "stats_title": "統計",
    "avg": "平均",
    "best": "最速",
    "worst": "最遅",
    "history_title": "履歴（最近10回）"
  },
  "ipv4_ipv6": {
    "input_label": "アドレスを入力",
    "mode_auto": "自動",
    "mode_ipv4": "IPv4",
    "mode_ipv6": "IPv6",
    "invalid_ipv4": "無効なIPv4アドレス",
    "invalid_ipv6": "無効なIPv6アドレス",
    "invalid_input": "無効なアドレス入力",
    "mapped": "IPv6マップドアドレス",
    "mapped_hex": "IPv6マップド（16進数）",
    "compatible": "IPv4互換アドレス",
    "compatible_hex": "IPv4互換（16進数）",
    "six_to_four": "6to4アドレス",
    "expanded": "完全展開",
    "compressed": "圧縮形式",
    "extracted_ipv4": "抽出されたIPv4",
    "no_ipv4_mapping": "このIPv6アドレスにはIPv4マッピングが含まれていません"
  },
  "code_formatter": {
    "language": "プログラミング言語",
    "indent_size": "インデントサイズ",
    "wrap_length": "折り返し長さ",
    "input_label": "コードを入力",
    "input_placeholder": "コードを貼り付け…",
    "format": "フォーマット",
    "output_label": "フォーマット結果",
    "copy": "コピー",
    "copied": "コピー済み"
  },
  "port_check": {
    "host_label": "ホスト名 / IP",
    "port_label": "ポート番号",
    "check": "チェック",
    "check_common": "常用ポートチェック",
    "th_port": "ポート",
    "th_service": "サービス",
    "th_status": "ステータス",
    "status_checking": "チェック中…",
    "status_open": "オープン",
    "status_closed": "クローズ",
    "status_timeout": "タイムアウト",
    "status_error": "エラー",
    "limitation_note": "注意：ブラウザのCORSセキュリティ制限により、ポートチェック結果は参考値です。no-corsモードのfetchを使用し、opaqueレスポンスはサービスが応答している可能性を示しますが、確定できません。より正確な検出にはサーバー側ツールが必要です。"
  },
  "auto_refresh": {
    "url_label": "対象URL",
    "interval_label": "リフレッシュ間隔",
    "seconds": "秒（最小5秒）",
    "start": "開始",
    "stop": "停止",
    "countdown": "カウントダウン",
    "total_refreshes": "リフレッシュ回数",
    "last_refresh": "前回リフレッシュ",
    "preview": "ページプレビュー",
    "bookmarklet_title": "ブックマークレット",
    "bookmarklet_desc": "下のボタンをブックマークバーにドラッグすると、任意のページで自動リフレッシュ機能が使えます。",
    "bookmarklet_btn": "自動リフレッシュブックマークレット"
  },
  "text_to_html_table": {
    "inputLabel": "入力テキスト（CSV/TSV）",
    "placeholder": "名前,年齢,都市\n太郎,25,東京\n花子,30,大阪",
    "delimiter": "区切り文字",
    "hasHeader": "ヘッダー行を含む",
    "border": "ボーダー",
    "padding": "セルパディング",
    "className": "CSSクラス名",
    "htmlCode": "HTMLコード",
    "copy": "コードをコピー",
    "copied": "コピー済み",
    "preview": "プレビュー"
  },
  "font_preview": {
    "textLabel": "プレビューテキスト",
    "fontSize": "フォントサイズ",
    "customFont": "カスタムフォント"
  },
  "symbols": {
    "search": "検索",
    "searchPlaceholder": "記号または名前を検索…"
  },
  "rc4": {
    "key": "キー",
    "mode": "モード",
    "encrypt": "暗号化",
    "decrypt": "復号",
    "plaintext": "平文",
    "ciphertext": "暗号文",
    "inputEnc": "入力エンコーディング",
    "outputEnc": "出力エンコーディング",
    "result": "結果",
    "keyRequired": "キーを入力してください",
    "inputRequired": "内容を入力してください"
  },
  "clipboard_viewer": {
    "read": "クリップボードを読み取り",
    "hint": "ブラウザの許可が必要です。拒否された場合は下の貼り付けエリアを使用してください。",
    "pasteArea": "貼り付けエリア（Ctrl+V）",
    "pasteItems": "貼り付け内容"
  },
  "svg_editor": {
    "tool": "ツール",
    "add": "図形を追加",
    "properties": "プロパティ",
    "delete": "選択を削除",
    "svgCode": "SVGコード",
    "copy": "コピー",
    "copied": "コピー済み"
  }
}
