diff --git a/packages/shared/src/i18n/ja.ts b/packages/shared/src/i18n/ja.ts index 0cd449d6..12d9e680 100644 --- a/packages/shared/src/i18n/ja.ts +++ b/packages/shared/src/i18n/ja.ts @@ -12,7 +12,7 @@ export const ja: TranslationKeys = { search: "ツールを検索...", dropFiles: "ここにファイルをドロップするかアップロードボタンをクリック", loading: "読み込み中...", - saving: "Saving...", + saving: "保存中...", error: "エラーが発生しました", confirm: "確認", close: "閉じる", @@ -37,40 +37,40 @@ export const ja: TranslationKeys = { unexpectedError: "予期しないエラーが発生しました。", retry: "再試行", privacyPolicy: "プライバシーポリシー", - pageNotFound: "Page not found", - pageNotFoundDescription: "The page you are looking for does not exist or has been moved.", + pageNotFound: "ページが見つかりません", + pageNotFoundDescription: "お探しのページは存在しないか、移動された可能性があります。", }, categories: { essentials: "基本ツール", adjustments: "調整", - enhance: "Enhance & AI", + enhance: "補正 & AI", watermark: "ウォーターマークとオーバーレイ", layout: "レイアウトと構図", utilities: "ユーティリティ", optimization: "最適化", format: "フォーマットと変換", "video-edit": "Video", - "video-convert": "Convert", - "video-effects": "Effects & Compose", - "video-subtitles": "Subtitles", - "video-metadata": "Metadata", - "audio-edit": "Edit", - "audio-convert": "Convert", - "audio-effects": "Effects & Compose", - "audio-metadata": "Metadata", - "pdf-organize": "Organize", - "pdf-edit": "Edit & Annotate", - "pdf-security": "Security", - "pdf-optimize": "Optimize", - "doc-convert": "Convert", - data: "Files", - archives: "Archives", + "video-convert": "変換", + "video-effects": "エフェクト & 合成", + "video-subtitles": "字幕", + "video-metadata": "メタデータ", + "audio-edit": "編集", + "audio-convert": "変換", + "audio-effects": "エフェクト & 合成", + "audio-metadata": "メタデータ", + "pdf-organize": "整理", + "pdf-edit": "編集 & 注釈", + "pdf-security": "セキュリティ", + "pdf-optimize": "最適化", + "doc-convert": "変換", + data: "ファイル", + archives: "アーカイブ", }, modalities: { - image: "Image", + image: "画像", video: "Video", audio: "Audio", - documentsAndFiles: "PDF & Files", + documentsAndFiles: "PDF & ファイル", }, tools: { resize: { @@ -233,8 +233,8 @@ export const ja: TranslationKeys = { description: "カスタムカラー、パターン、ロゴ付きのQRコードを生成", }, "html-to-image": { - name: "HTML to Image", - description: "Capture webpages as high-quality images", + name: "HTML から画像", + description: "ウェブページを高品質な画像としてキャプチャ", }, "barcode-read": { name: "バーコードリーダー", @@ -262,40 +262,40 @@ export const ja: TranslationKeys = { "スクリーンショットにグラデーション背景、デバイスフレーム、シャドウ、SNSサイズを追加", }, "circle-crop": { - name: "Circle Crop", - description: "Crop image to a centered circle with transparent corners", + name: "円形クロップ", + description: "画像を中央の円形にクロップし、角を透明にする", }, duotone: { - name: "Duotone", - description: "Apply a two-color duotone effect with custom shadow and highlight colors", + name: "デュオトーン", + description: "カスタムのシャドウとハイライト色で2色デュオトーン効果を適用", }, "image-pad": { - name: "Image Pad", - description: "Pad image to a target aspect ratio with a solid color background", + name: "画像パディング", + description: "単色背景で画像を目標のアスペクト比にパディング", }, pixelate: { - name: "Pixelate", - description: "Apply a pixelation effect to the full image or a specific region", + name: "ピクセル化", + description: "画像全体または特定の領域にピクセル化効果を適用", }, vignette: { - name: "Vignette", - description: "Add a vignette effect with adjustable strength and color", + name: "ビネット", + description: "強さと色を調整できるビネット効果を追加", }, "gif-webp": { - name: "GIF/WebP Converter", - description: "Convert animated GIF to WebP and vice versa, preserving all frames", + name: "GIF/WebP コンバーター", + description: "アニメーション GIF と WebP を全フレーム保持で相互変換", }, histogram: { - name: "Histogram", - description: "Generate an RGB histogram chart from an image", + name: "ヒストグラム", + description: "画像から RGB ヒストグラムチャートを生成", }, "lqip-placeholder": { - name: "LQIP Placeholder", - description: "Generate a tiny low-quality image placeholder with base64 data URI", + name: "LQIP プレースホルダー", + description: "base64 データ URI 付きの低品質プレースホルダー画像を生成", }, "sprite-sheet": { - name: "Sprite Sheet", - description: "Combine multiple images into a single sprite sheet grid", + name: "スプライトシート", + description: "複数の画像を1枚のスプライトシートに結合", }, "svg-to-raster": { name: "SVGからラスター", @@ -314,380 +314,381 @@ export const ja: TranslationKeys = { description: "画像をBase64文字列に変換してHTML、CSS等に埋め込み", }, "barcode-generate": { - name: "Barcode Generator", - description: "Generate barcodes in Code 128, EAN-13, UPC-A, Code 39, ITF-14, and Data Matrix", + name: "バーコード生成", + description: "Code 128、EAN-13、UPC-A、Code 39、ITF-14、Data Matrix のバーコードを生成", }, "chart-maker": { - name: "Chart Maker", - description: "Create bar, line, or pie charts from CSV or JSON data", + name: "チャート作成", + description: "CSV または JSON データから棒グラフ、折れ線グラフ、円グラフを作成", }, "convert-video": { - name: "Convert Video", - description: "Convert videos between MP4, MOV, and WebM", + name: "動画変換", + description: "MP4、MOV、WebM 間で動画を変換", }, "compress-video": { - name: "Compress Video", - description: "Shrink video file size with quality control", + name: "動画圧縮", + description: "品質を調整して動画のファイルサイズを圧縮", }, "trim-video": { - name: "Trim Video", - description: "Cut a clip out of a video", + name: "動画トリミング", + description: "動画から必要な部分を切り出す", }, "mute-video": { - name: "Mute Video", - description: "Remove the audio track from a video", + name: "動画ミュート", + description: "動画から音声トラックを削除", }, "video-to-gif": { - name: "Video to GIF", - description: "Turn a video clip into an animated GIF", + name: "動画を GIF に変換", + description: "動画クリップをアニメーション GIF に変換", }, "resize-video": { - name: "Resize Video", - description: "Scale a video to a new resolution or preset size", + name: "動画リサイズ", + description: "動画を新しい解像度やプリセットサイズに拡大縮小", }, "crop-video": { - name: "Crop Video", - description: "Crop a region out of a video", + name: "動画クロップ", + description: "動画の一部分をクロップ", }, "rotate-video": { - name: "Rotate Video", - description: "Rotate or flip a video", + name: "動画回転", + description: "動画を回転または反転", }, "change-fps": { - name: "Change FPS", - description: "Change the frame rate of a video", + name: "FPS 変更", + description: "動画のフレームレートを変更", }, "video-color": { - name: "Video Color", - description: "Adjust brightness, contrast, saturation, and gamma", + name: "動画カラー調整", + description: "明るさ、コントラスト、彩度、ガンマを調整", }, "video-speed": { - name: "Video Speed", - description: "Speed up or slow down a video", + name: "動画速度", + description: "動画を加速または減速", }, "reverse-video": { - name: "Reverse Video", - description: "Play a video clip backwards", + name: "動画逆再生", + description: "動画クリップを逆方向に再生", }, "video-loudnorm": { - name: "Normalize Audio", - description: "Normalize video audio volume to broadcast standard", + name: "音声ノーマライズ", + description: "動画の音声を放送基準の音量に正規化", }, "aspect-pad": { - name: "Aspect Pad", - description: "Add solid-color bars to fit a target aspect ratio", + name: "アスペクトパディング", + description: "目標のアスペクト比に合わせて単色バーを追加", }, "blur-pad": { - name: "Blur Pad", - description: "Fill bars with a blurred copy of the video", + name: "ぼかしパディング", + description: "ぼかした動画のコピーで余白を埋める", }, "watermark-video": { - name: "Watermark Video", - description: "Burn a text watermark onto video frames", + name: "動画に透かし", + description: "動画フレームにテキストの透かしを焼き込む", }, "stabilize-video": { - name: "Stabilize Video", - description: "Reduce camera shake with two-pass stabilization", + name: "動画手ブレ補正", + description: "2パス処理でカメラの手ブレを軽減", }, "gif-to-video": { - name: "GIF to Video", - description: "Convert an animated GIF into an MP4 or WebM video", + name: "GIF を動画に変換", + description: "アニメーション GIF を MP4 または WebM 動画に変換", }, "video-to-webp": { - name: "Video to WebP", - description: "Convert a video clip into an animated WebP image", + name: "動画を WebP に変換", + description: "動画クリップをアニメーション WebP 画像に変換", }, "video-to-frames": { - name: "Video to Frames", - description: "Extract frames from a video as a ZIP of images", + name: "動画をフレームに変換", + description: "動画からフレームを画像の ZIP として抽出", }, "merge-videos": { - name: "Merge Videos", - description: "Join multiple video clips into one file", + name: "動画結合", + description: "複数の動画クリップを1つのファイルに結合", }, "replace-audio": { - name: "Replace Audio", - description: "Swap the audio track of a video with another file", + name: "音声差し替え", + description: "動画の音声トラックを別のファイルに差し替え", }, "burn-subtitles": { - name: "Burn Subtitles", - description: "Permanently render subtitles onto video frames", + name: "字幕焼き込み", + description: "動画フレームに字幕を恒久的に焼き込む", }, "embed-subtitles": { - name: "Embed Subtitles", - description: "Mux a subtitle track into the video container", + name: "字幕埋め込み", + description: "動画コンテナに字幕トラックを埋め込む", }, "extract-subtitles": { - name: "Extract Subtitles", - description: "Pull the subtitle track out of a video as an SRT file", + name: "字幕抽出", + description: "動画から字幕トラックを SRT ファイルとして抽出", }, "images-to-video": { - name: "Images to Video", - description: "Turn a set of images into a slideshow video", + name: "画像から動画", + description: "複数の画像からスライドショー動画を作成", }, "video-metadata": { - name: "Clean Video Metadata", - description: "Strip metadata from a video and report what was found", + name: "動画メタデータ削除", + description: "動画のメタデータを削除し、検出内容をレポート", }, "convert-audio": { - name: "Convert Audio", - description: "Convert audio between MP3, WAV, OGG, and more", + name: "音声変換", + description: "MP3、WAV、OGG などの音声形式を相互変換", }, "trim-audio": { - name: "Trim Audio", - description: "Cut a section out of an audio file", + name: "音声トリミング", + description: "音声ファイルの一部を切り出す", }, "extract-audio": { - name: "Extract Audio", - description: "Pull the audio track out of a video", + name: "音声抽出", + description: "動画から音声トラックを抽出", }, "volume-adjust": { - name: "Volume Adjust", - description: "Increase or decrease audio volume by a fixed gain", + name: "音量調整", + description: "固定ゲインで音声の音量を増減", }, "normalize-audio": { - name: "Normalize Audio", - description: "Even out loudness to broadcast standard levels", + name: "音声ノーマライズ", + description: "音量を放送基準レベルに均一化", }, "fade-audio": { - name: "Fade Audio", - description: "Add fade-in and fade-out effects to audio", + name: "音声フェード", + description: "音声にフェードイン・フェードアウト効果を追加", }, "reverse-audio": { - name: "Reverse Audio", - description: "Play audio backwards", + name: "音声逆再生", + description: "音声を逆方向に再生", }, "audio-speed": { - name: "Audio Speed", - description: "Speed up or slow down audio playback", + name: "音声速度", + description: "音声の再生速度を加速または減速", }, "pitch-shift": { - name: "Pitch Shift", - description: "Raise or lower pitch by semitones without changing speed", + name: "ピッチシフト", + description: "速度を変えずに半音単位でピッチを上下", }, "audio-channels": { - name: "Audio Channels", - description: "Convert between mono, stereo, or swap left and right channels", + name: "音声チャンネル", + description: "モノラル・ステレオの切り替えや左右チャンネルの入れ替え", }, "silence-removal": { - name: "Silence Removal", - description: "Strip silent sections from audio", + name: "無音除去", + description: "音声から無音部分を除去", }, "noise-reduction": { - name: "Noise Reduction", - description: "Reduce background noise with FFT-based denoising", + name: "ノイズ低減", + description: "FFT ベースのノイズ除去で背景ノイズを低減", }, "merge-audio": { - name: "Merge Audio", - description: "Combine multiple audio files into one", + name: "音声結合", + description: "複数の音声ファイルを1つに結合", }, "split-audio": { - name: "Split Audio", - description: "Split audio by time, equal parts, or silence detection", + name: "音声分割", + description: "時間、均等分割、または無音検出で音声を分割", }, "ringtone-maker": { - name: "Ringtone Maker", - description: "Create a ringtone clip from any audio file", + name: "着信音作成", + description: "音声ファイルから着信音クリップを作成", }, "waveform-image": { - name: "Waveform Image", - description: "Generate a waveform visualization as a PNG image", + name: "波形画像", + description: "波形ビジュアライゼーションを PNG 画像として生成", }, "audio-metadata": { - name: "Audio Metadata", - description: "View, edit, or strip audio tags (ID3)", + name: "音声メタデータ", + description: "音声タグ (ID3) の表示、編集、削除", }, "merge-pdf": { - name: "Merge PDFs", - description: "Combine multiple PDFs into one", + name: "PDF 結合", + description: "複数の PDF を1つに結合", }, "split-pdf": { - name: "Split PDF", - description: "Extract pages or split into parts", + name: "PDF 分割", + description: "ページを抽出または分割", }, "compress-pdf": { - name: "Compress PDF", - description: "Shrink PDF file size", + name: "PDF 圧縮", + description: "PDF のファイルサイズを圧縮", }, "rotate-pdf": { - name: "Rotate PDF", - description: "Rotate pages in a PDF", + name: "PDF 回転", + description: "PDF のページを回転", }, "convert-document": { - name: "Convert Document", - description: "Convert between Word, OpenDocument, RTF, and plain text formats", + name: "文書変換", + description: "Word、OpenDocument、RTF、プレーンテキスト形式を相互変換", }, "convert-presentation": { - name: "Convert Presentation", - description: "Convert between PowerPoint and OpenDocument presentation formats", + name: "プレゼンテーション変換", + description: "PowerPoint と OpenDocument プレゼンテーション形式を相互変換", }, "convert-spreadsheet": { - name: "Convert Spreadsheet", + name: "スプレッドシート変換", description: - "Convert between Excel, OpenDocument, and CSV formats. Multi-sheet workbooks export the first sheet to CSV.", + "Excel、OpenDocument、CSV 形式を相互変換。複数シートのブックは最初のシートを CSV に出力します。", }, "excel-to-pdf": { - name: "Excel to PDF", - description: "Convert spreadsheets to PDF. Wide sheets may paginate across multiple pages.", + name: "Excel を PDF に変換", + description: + "スプレッドシートを PDF に変換。幅の広いシートは複数ページに分割されることがあります。", }, "word-to-pdf": { - name: "Word to PDF", - description: "Convert Word documents to PDF", + name: "Word を PDF に変換", + description: "Word 文書を PDF に変換", }, "extract-pages": { - name: "Extract Pages", - description: "Pull selected pages into a new PDF", + name: "ページ抽出", + description: "選択したページを新しい PDF に抽出", }, "remove-pages": { - name: "Remove Pages", - description: "Delete specific pages from a PDF", + name: "ページ削除", + description: "PDF から指定ページを削除", }, "organize-pdf": { - name: "Organize PDF", - description: "Reorder pages with an explicit page order", + name: "PDF 整理", + description: "ページ順を指定して並べ替え", }, "protect-pdf": { - name: "Protect PDF", - description: "Add password protection (AES-256 encryption)", + name: "PDF 保護", + description: "パスワード保護を追加 (AES-256 暗号化)", }, "unlock-pdf": { - name: "Unlock PDF", - description: "Remove password protection from a PDF", + name: "PDF ロック解除", + description: "PDF のパスワード保護を解除", }, "repair-pdf": { - name: "Repair PDF", - description: "Attempt to repair a damaged or corrupted PDF", + name: "PDF 修復", + description: "破損した PDF の修復を試行", }, "linearize-pdf": { - name: "Web-Optimize PDF", - description: "Linearize a PDF for fast web viewing", + name: "PDF Web 最適化", + description: "Web 表示用に PDF をリニアライズ", }, "grayscale-pdf": { - name: "Grayscale PDF", - description: "Convert all colors to grayscale", + name: "PDF グレースケール化", + description: "すべての色をグレースケールに変換", }, "pdfa-convert": { - name: "PDF/A Convert", - description: "Convert to archival PDF/A-2", + name: "PDF/A 変換", + description: "長期保存用 PDF/A-2 に変換", }, "crop-pdf": { - name: "Crop PDF", - description: "Crop all pages with a uniform margin", + name: "PDF クロップ", + description: "全ページを均一な余白でクロップ", }, "nup-pdf": { - name: "N-up PDF", - description: "Arrange multiple pages per sheet", + name: "PDF 面付け", + description: "1枚のシートに複数ページを配置", }, "booklet-pdf": { - name: "Booklet PDF", - description: "Arrange pages for folding into a booklet", + name: "PDF 小冊子", + description: "折り込み小冊子用にページを配置", }, "watermark-pdf": { - name: "Watermark PDF", - description: "Add a text watermark to every page", + name: "PDF 透かし", + description: "全ページにテキストの透かしを追加", }, "pdf-page-numbers": { - name: "PDF Page Numbers", - description: "Add page numbers to every page", + name: "PDF ページ番号", + description: "全ページにページ番号を追加", }, "flatten-pdf": { - name: "Flatten PDF", - description: "Bake forms and annotations into page content", + name: "PDF フラット化", + description: "フォームと注釈をページコンテンツに固定", }, "redact-pdf": { - name: "Redact PDF", - description: "Permanently remove text occurrences (verified true redaction)", + name: "PDF 墨消し", + description: "テキストを完全に削除 (検証済みの墨消し)", }, "pdf-to-text": { - name: "PDF to Text", - description: "Extract plain text from a PDF", + name: "PDF からテキスト", + description: "PDF からプレーンテキストを抽出", }, "pdf-to-word": { - name: "PDF to Word", - description: "Best for text-based PDFs; scanned pages need OCR", + name: "PDF を Word に変換", + description: "テキストベースの PDF に最適。スキャンページには OCR が必要です。", }, "pdf-metadata": { - name: "PDF Metadata", - description: "Read and write PDF document metadata", + name: "PDF メタデータ", + description: "PDF 文書のメタデータを読み書き", }, "powerpoint-to-pdf": { - name: "PowerPoint to PDF", - description: "Convert presentations to PDF", + name: "PowerPoint を PDF に変換", + description: "プレゼンテーションを PDF に変換", }, "html-to-pdf": { - name: "HTML to PDF", - description: "Convert an HTML file to PDF. Remote resources are disabled for privacy.", + name: "HTML を PDF に変換", + description: "HTML ファイルを PDF に変換。プライバシー保護のため外部リソースは無効です。", }, "markdown-to-docx": { - name: "Markdown to Word", - description: "Convert a Markdown file to a Word document (DOCX)", + name: "Markdown を Word に変換", + description: "Markdown ファイルを Word 文書 (DOCX) に変換", }, "markdown-to-html": { - name: "Markdown to HTML", + name: "Markdown を HTML に変換", description: - "Convert a Markdown file to a standalone HTML page. Remote images in the source are left as-is in the output.", + "Markdown ファイルを単独の HTML ページに変換。ソース内の外部画像はそのまま出力されます。", }, "markdown-to-pdf": { - name: "Markdown to PDF", + name: "Markdown を PDF に変換", description: - "Convert a Markdown file to a styled PDF. Remote resources are disabled for privacy.", + "Markdown ファイルをスタイル付き PDF に変換。プライバシー保護のため外部リソースは無効です。", }, "epub-convert": { - name: "Convert EPUB", + name: "EPUB 変換", description: - "Convert an EPUB to PDF, DOCX, HTML, or Markdown. Remote resources inside the book are not fetched.", + "EPUB を PDF、DOCX、HTML、Markdown に変換。書籍内の外部リソースは取得されません。", }, "to-epub": { - name: "Convert to EPUB", - description: "Convert Word, Markdown, HTML, or plain text files to EPUB", + name: "EPUB に変換", + description: "Word、Markdown、HTML、プレーンテキストファイルを EPUB に変換", }, "csv-excel": { - name: "CSV to Excel", - description: "Convert between CSV and Excel (XLSX), both directions", + name: "CSV / Excel 変換", + description: "CSV と Excel (XLSX) を双方向で変換", }, "csv-json": { - name: "CSV to JSON", - description: "Convert between CSV and JSON, both directions", + name: "CSV / JSON 変換", + description: "CSV と JSON を双方向で変換", }, "json-xml": { - name: "JSON to XML", - description: "Convert between JSON and XML, both directions", + name: "JSON / XML 変換", + description: "JSON と XML を双方向で変換", }, "split-csv": { - name: "Split CSV", - description: "Split a CSV into smaller files by row count", + name: "CSV 分割", + description: "行数を指定して CSV を小さなファイルに分割", }, "merge-csvs": { - name: "Merge CSVs", - description: "Combine multiple CSV or TSV files with matching columns into one", + name: "CSV 結合", + description: "列が一致する複数の CSV または TSV ファイルを1つに結合", }, "yaml-json": { name: "YAML / JSON", - description: "Convert between YAML and JSON, both directions", + description: "YAML と JSON を双方向で変換", }, "xml-to-csv": { - name: "XML to CSV", - description: "Extract repeating elements from XML into a CSV table", + name: "XML を CSV に変換", + description: "XML から繰り返し要素を CSV テーブルに抽出", }, "create-zip": { - name: "Create ZIP", - description: "Bundle multiple files into a single ZIP archive", + name: "ZIP 作成", + description: "複数のファイルを1つの ZIP アーカイブにまとめる", }, "extract-zip": { - name: "Extract ZIP", + name: "ZIP 展開", description: - "Safely extract files from a ZIP archive with bomb protection. Single-file archives return the file directly.", + "爆弾保護付きで ZIP アーカイブからファイルを安全に展開。単一ファイルのアーカイブはそのまま返します。", }, pipeline: { name: "Pipelineビルダー", description: "複数のツールをワークフローに連結" }, - processing: { canceled: "Processing canceled" }, + processing: { canceled: "処理がキャンセルされました" }, mediaPlayer: { - unsupported: "Your browser does not support this media format.", + unsupported: "お使いのブラウザはこのメディア形式に対応していません。", }, documentView: { - loadFailed: "Failed to load document.", - previousPage: "Previous page", - nextPage: "Next page", - inputNotPreviewable: "Preview not available for this file type", + loadFailed: "文書の読み込みに失敗しました。", + previousPage: "前のページ", + nextPage: "次のページ", + inputNotPreviewable: "このファイル形式のプレビューは利用できません", }, }, toolSettings: { @@ -1012,13 +1013,13 @@ export const ja: TranslationKeys = { intensity: "強度", addShadow: "シャドウ追加", opacity: "不透明度", - outputFormat: "Output Format", - edgeSmoothing: "Edge Smoothing", - edgeSmoothingOff: "Off", - edgeSmoothingLight: "Light", - edgeSmoothingMedium: "Medium", - edgeSmoothingStrong: "Strong", - colorDecontamination: "Color Decontamination", + outputFormat: "出力形式", + edgeSmoothing: "エッジスムージング", + edgeSmoothingOff: "オフ", + edgeSmoothingLight: "弱", + edgeSmoothingMedium: "中", + edgeSmoothingStrong: "強", + colorDecontamination: "色にじみ除去", rendering: "レンダリング中...", submit: "背景を除去", submitBatch: "背景を除去({count}ファイル)", @@ -1378,8 +1379,8 @@ export const ja: TranslationKeys = { submit: "テキスト追加", submitBatch: "テキスト追加({count}ファイル)", progressLabel: "テキストオーバーレイを追加中", - download: "Download", - defaultText: "Your Text Here", + download: "ダウンロード", + defaultText: "ここにテキストを入力", }, compose: { uploadOverlay: "オーバーレイ画像をアップロード", @@ -1417,18 +1418,18 @@ export const ja: TranslationKeys = { bitDepth: "ビット深度", progressive: "プログレッシブ", pages: "ページ数", - hasAlpha: "Alpha", + hasAlpha: "アルファ", hasProfile: "プロファイル", hasExif: "EXIF", hasIcc: "ICC", hasXmp: "XMP", - readInfo: "Read Info", - reading: "Reading...", - channelStats: "Channel Stats", - yes: "Yes", - no: "No", + readInfo: "情報を取得", + reading: "読み込み中...", + channelStats: "チャンネル統計", + yes: "はい", + no: "いいえ", na: "N/A", - failedToRead: "Failed to read info", + failedToRead: "情報の読み取りに失敗しました", }, compare: { uploadSecondImage: "2枚目の画像をアップロード", @@ -1476,29 +1477,29 @@ export const ja: TranslationKeys = { }, "html-to-image": { modeUrl: "URL", - modeHtml: "HTML File", - htmlFile: "HTML File", + modeHtml: "HTML ファイル", + htmlFile: "HTML ファイル", url: "URL", urlPlaceholder: "https://snapotter.com", - format: "Output Format", - quality: "Quality", - devicePreset: "Device", - viewportWidth: "Width", - viewportHeight: "Height", - fullPage: "Full Page", - submit: "Capture", - download: "Download Screenshot", - capturing: "Capturing webpage...", - errorTimeout: "Page took too long to load", - errorBlocked: "This URL cannot be captured", - errorUnavailable: "Screenshot service is not available", - errorFailed: "Failed to capture the page", - placeholder: "Enter a URL and click Capture", + format: "出力形式", + quality: "品質", + devicePreset: "デバイス", + viewportWidth: "幅", + viewportHeight: "高さ", + fullPage: "ページ全体", + submit: "キャプチャ", + download: "スクリーンショットをダウンロード", + capturing: "ページをキャプチャ中...", + errorTimeout: "ページの読み込みがタイムアウトしました", + errorBlocked: "この URL はキャプチャできません", + errorUnavailable: "スクリーンショットサービスは利用できません", + errorFailed: "ページのキャプチャに失敗しました", + placeholder: "URL を入力して「キャプチャ」をクリック", presets: { desktop: "Desktop", tablet: "Tablet", mobile: "Mobile", - custom: "Custom", + custom: "カスタム", }, }, "barcode-read": { @@ -1590,61 +1591,61 @@ export const ja: TranslationKeys = { progressLabel: "スクリーンショットを美化中", }, "circle-crop": { - submit: "Circle Crop", - submitBatch: "Circle Crop ({count} files)", - progressLabel: "Cropping to circle", + submit: "円形クロップ", + submitBatch: "円形クロップ ({count} ファイル)", + progressLabel: "円形にクロップ中", }, duotone: { - shadow: "Shadow Color", - highlight: "Highlight Color", - submit: "Apply Duotone", - submitBatch: "Apply Duotone ({count} files)", - progressLabel: "Applying duotone", + shadow: "シャドウカラー", + highlight: "ハイライトカラー", + submit: "デュオトーンを適用", + submitBatch: "デュオトーンを適用 ({count} ファイル)", + progressLabel: "デュオトーンを適用中", }, "image-pad": { - target: "Target Ratio", - color: "Background Color", - submit: "Pad Image", - submitBatch: "Pad Image ({count} files)", - progressLabel: "Padding image", + target: "目標比率", + color: "背景色", + submit: "パディング", + submitBatch: "パディング ({count} ファイル)", + progressLabel: "画像をパディング中", }, pixelate: { - blockSize: "Block Size", - submit: "Pixelate", - submitBatch: "Pixelate ({count} files)", - progressLabel: "Pixelating", + blockSize: "ブロックサイズ", + submit: "モザイク化", + submitBatch: "モザイク化 ({count} ファイル)", + progressLabel: "モザイク化中", }, vignette: { - strength: "Strength", - color: "Vignette Color", - submit: "Apply Vignette", - submitBatch: "Apply Vignette ({count} files)", - progressLabel: "Applying vignette", + strength: "強度", + color: "ビネットカラー", + submit: "ビネットを適用", + submitBatch: "ビネットを適用 ({count} ファイル)", + progressLabel: "ビネットを適用中", }, "gif-webp": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting animation", + submit: "変換", + submitBatch: "変換 ({count} ファイル)", + progressLabel: "アニメーションを変換中", }, histogram: { - submit: "Generate Histogram", - submitBatch: "Generate Histogram ({count} files)", - progressLabel: "Generating histogram", + submit: "ヒストグラムを生成", + submitBatch: "ヒストグラムを生成 ({count} ファイル)", + progressLabel: "ヒストグラムを生成中", }, "lqip-placeholder": { - width: "Width", - blur: "Blur", - submit: "Generate Placeholder", - submitBatch: "Generate Placeholder ({count} files)", - progressLabel: "Generating placeholder", + width: "幅", + blur: "ぼかし", + submit: "プレースホルダーを生成", + submitBatch: "プレースホルダーを生成 ({count} ファイル)", + progressLabel: "プレースホルダーを生成中", }, "sprite-sheet": { - columns: "Columns", - padding: "Padding", - background: "Background Color", - submit: "Create Sprite Sheet", - submitBatch: "Create Sprite Sheet", - progressLabel: "Creating sprite sheet", + columns: "列数", + padding: "余白", + background: "背景色", + submit: "スプライトシートを作成", + submitBatch: "スプライトシートを作成", + progressLabel: "スプライトシートを作成中", }, "svg-to-raster": { outputFormat: "出力フォーマット", @@ -1728,21 +1729,21 @@ export const ja: TranslationKeys = { copyCssUrl: "CSS url()をコピー", }, "barcode-generate": { - text: "Text", - type: "Barcode Type", - scale: "Scale", - includeText: "Include Text", - submit: "Generate Barcode", - download: "Download Barcode", + text: "テキスト", + type: "バーコードの種類", + scale: "拡大率", + includeText: "テキストを表示", + submit: "バーコードを生成", + download: "バーコードをダウンロード", }, "chart-maker": { - kind: "Chart Type", - title: "Title", - width: "Width", - height: "Height", - submit: "Create Chart", - submitBatch: "Create Chart ({count} files)", - progressLabel: "Creating chart", + kind: "グラフの種類", + title: "タイトル", + width: "幅", + height: "高さ", + submit: "グラフを作成", + submitBatch: "グラフを作成 ({count} ファイル)", + progressLabel: "グラフを作成中", }, "enhance-faces-standalone": { model: "モデル", @@ -1751,623 +1752,623 @@ export const ja: TranslationKeys = { best: "最高", }, "convert-video": { - format: "Output format", - quality: "Quality", - high: "High", - balanced: "Balanced", - small: "Smallest", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + quality: "品質", + high: "高品質", + balanced: "バランス", + small: "最小サイズ", + submit: "変換", + submitBatch: "変換 ({count} ファイル)", + progressLabel: "変換中", }, "compress-video": { - quality: "Compression", - light: "Light", - balanced: "Balanced", - strong: "Strong", - resolution: "Resolution", - original: "Original", - submit: "Compress", - submitBatch: "Compress ({count} files)", - progressLabel: "Compressing", + quality: "圧縮レベル", + light: "軽め", + balanced: "バランス", + strong: "強め", + resolution: "解像度", + original: "オリジナル", + submit: "圧縮", + submitBatch: "圧縮 ({count} ファイル)", + progressLabel: "圧縮中", }, "trim-video": { - start: "Start (seconds)", - end: "End (seconds)", - precise: "Frame-accurate (re-encodes)", - submit: "Trim", - submitBatch: "Trim ({count} files)", - progressLabel: "Trimming", + start: "開始 (秒)", + end: "終了 (秒)", + precise: "フレーム単位 (再エンコード)", + submit: "トリミング", + submitBatch: "トリミング ({count} ファイル)", + progressLabel: "トリミング中", }, "mute-video": { - submit: "Remove audio", - submitBatch: "Remove audio ({count} files)", - progressLabel: "Muting", + submit: "音声を削除", + submitBatch: "音声を削除 ({count} ファイル)", + progressLabel: "ミュート中", }, "video-to-gif": { - fps: "Frames per second", - width: "Width (px)", - start: "Start (seconds)", - duration: "Duration (seconds)", - submit: "Create GIF", - submitBatch: "Create GIFs ({count} files)", - progressLabel: "Creating GIF", + fps: "フレームレート", + width: "幅 (px)", + start: "開始 (秒)", + duration: "長さ (秒)", + submit: "GIF を作成", + submitBatch: "GIF を作成 ({count} ファイル)", + progressLabel: "GIF を作成中", }, "resize-video": { preset: "Preset", - width: "Width (px)", - height: "Height (px)", - hint: "Leave one dimension empty to keep aspect ratio", - submit: "Resize", - submitBatch: "Resize ({count} files)", - progressLabel: "Resizing", + width: "幅 (px)", + height: "高さ (px)", + hint: "アスペクト比を維持するには片方を空欄にしてください", + submit: "リサイズ", + submitBatch: "リサイズ ({count} ファイル)", + progressLabel: "リサイズ中", }, "crop-video": { - width: "Width (px)", - height: "Height (px)", - x: "X offset", - y: "Y offset", - submit: "Crop", - submitBatch: "Crop ({count} files)", - progressLabel: "Cropping", + width: "幅 (px)", + height: "高さ (px)", + x: "X オフセット", + y: "Y オフセット", + submit: "クロップ", + submitBatch: "クロップ ({count} ファイル)", + progressLabel: "クロップ中", }, "rotate-video": { - transform: "Transform", - cw90: "Rotate 90 clockwise", - ccw90: "Rotate 90 counter-clockwise", - rotate180: "Rotate 180", - hflip: "Flip horizontal", - vflip: "Flip vertical", - submit: "Rotate", - submitBatch: "Rotate ({count} files)", - progressLabel: "Rotating", + transform: "変形", + cw90: "時計回りに90度回転", + ccw90: "反時計回りに90度回転", + rotate180: "180度回転", + hflip: "水平反転", + vflip: "垂直反転", + submit: "回転", + submitBatch: "回転 ({count} ファイル)", + progressLabel: "回転中", }, "change-fps": { - fps: "Frames per second", - submit: "Change FPS", - submitBatch: "Change FPS ({count} files)", - progressLabel: "Changing FPS", + fps: "フレームレート", + submit: "FPS を変更", + submitBatch: "FPS を変更 ({count} ファイル)", + progressLabel: "FPS を変更中", }, "video-color": { - brightness: "Brightness", - contrast: "Contrast", - saturation: "Saturation", + brightness: "明るさ", + contrast: "コントラスト", + saturation: "彩度", gamma: "Gamma", - submit: "Apply", - submitBatch: "Apply ({count} files)", - progressLabel: "Adjusting color", + submit: "適用", + submitBatch: "適用 ({count} ファイル)", + progressLabel: "色を調整中", }, "video-speed": { - factor: "Speed factor", - keepPitch: "Keep original pitch", - submit: "Change speed", - submitBatch: "Change speed ({count} files)", - progressLabel: "Changing speed", + factor: "速度倍率", + keepPitch: "元のピッチを維持", + submit: "速度を変更", + submitBatch: "速度を変更 ({count} ファイル)", + progressLabel: "速度を変更中", }, "reverse-video": { - hint: "Limited to clips up to 5 minutes", - submit: "Reverse", - submitBatch: "Reverse ({count} files)", - progressLabel: "Reversing", + hint: "5分以内のクリップに限られます", + submit: "逆再生", + submitBatch: "逆再生 ({count} ファイル)", + progressLabel: "逆再生処理中", }, "video-loudnorm": { - hint: "Normalizes audio to EBU R128 broadcast standard", - submit: "Normalize", - submitBatch: "Normalize ({count} files)", - progressLabel: "Normalizing", + hint: "EBU R128 放送規格に音声を正規化します", + submit: "正規化", + submitBatch: "正規化 ({count} ファイル)", + progressLabel: "正規化中", }, "aspect-pad": { - target: "Target ratio", - color: "Background color", - colorHint: "Hex color, e.g. #000000", - submit: "Pad", - submitBatch: "Pad ({count} files)", - progressLabel: "Padding", + target: "目標比率", + color: "背景色", + colorHint: "HEX カラー (例: #000000)", + submit: "パディング", + submitBatch: "パディング ({count} ファイル)", + progressLabel: "パディング中", }, "blur-pad": { - target: "Target ratio", - blur: "Blur strength", - submit: "Pad", - submitBatch: "Pad ({count} files)", - progressLabel: "Padding", + target: "目標比率", + blur: "ぼかし強度", + submit: "パディング", + submitBatch: "パディング ({count} ファイル)", + progressLabel: "パディング中", }, "watermark-video": { - text: "Watermark text", - position: "Position", - fontSize: "Font size", - opacity: "Opacity", - color: "Color", - colorHint: "Hex color, e.g. #ffffff", - submit: "Watermark", - submitBatch: "Watermark ({count} files)", - progressLabel: "Watermarking", + text: "ウォーターマークテキスト", + position: "位置", + fontSize: "フォントサイズ", + opacity: "不透明度", + color: "色", + colorHint: "HEX カラー (例: #ffffff)", + submit: "ウォーターマーク", + submitBatch: "ウォーターマーク ({count} ファイル)", + progressLabel: "ウォーターマーク処理中", }, "stabilize-video": { - smoothing: "Smoothing", - hint: "Runs two passes and takes longer than most tools", - submit: "Stabilize", - submitBatch: "Stabilize ({count} files)", - progressLabel: "Stabilizing", + smoothing: "スムージング", + hint: "2パス処理のため他のツールより時間がかかります", + submit: "手ぶれ補正", + submitBatch: "手ぶれ補正 ({count} ファイル)", + progressLabel: "手ぶれ補正中", }, "gif-to-video": { - format: "Output format", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + submit: "変換", + submitBatch: "変換 ({count} ファイル)", + progressLabel: "変換中", }, "video-to-webp": { - fps: "Frames per second", - width: "Width (px)", - quality: "Quality", - loop: "Loop animation", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + fps: "フレームレート", + width: "幅 (px)", + quality: "品質", + loop: "アニメーションをループ", + submit: "変換", + submitBatch: "変換 ({count} ファイル)", + progressLabel: "変換中", }, "video-to-frames": { - mode: "Extraction mode", - modeAll: "All frames", - modeNth: "Every Nth frame", - modeTimestamps: "Specific timestamps", - n: "Take every Nth frame", - timestamps: "Timestamps (seconds)", - timestampsHint: "Comma-separated, e.g. 0.5, 2, 4.5", - format: "Image format", - submit: "Extract Frames", - submitBatch: "Extract Frames ({count} files)", - progressLabel: "Extracting frames", + mode: "抽出モード", + modeAll: "全フレーム", + modeNth: "N フレームごと", + modeTimestamps: "指定タイムスタンプ", + n: "N フレームごとに抽出", + timestamps: "タイムスタンプ (秒)", + timestampsHint: "カンマ区切り (例: 0.5, 2, 4.5)", + format: "画像形式", + submit: "フレームを抽出", + submitBatch: "フレームを抽出 ({count} ファイル)", + progressLabel: "フレームを抽出中", }, "merge-videos": { - hint: "Files are joined in upload order", - submit: "Merge", - submitBatch: "Merge ({count} files)", - progressLabel: "Merging", + hint: "アップロード順に結合されます", + submit: "結合", + submitBatch: "結合 ({count} ファイル)", + progressLabel: "結合中", }, "replace-audio": { - hint: "Upload the video first, then the audio", - submit: "Replace Audio", - submitBatch: "Replace Audio ({count} files)", - progressLabel: "Replacing audio", + hint: "先に動画、次に音声をアップロードしてください", + submit: "音声を置換", + submitBatch: "音声を置換 ({count} ファイル)", + progressLabel: "音声を置換中", }, "burn-subtitles": { - fontSize: "Font size", - hint: "Upload a video and a subtitle file (.srt or .vtt)", - submit: "Burn Subtitles", - submitBatch: "Burn Subtitles ({count} files)", - progressLabel: "Burning subtitles", + fontSize: "フォントサイズ", + hint: "動画と字幕ファイル (.srt または .vtt) をアップロード", + submit: "字幕を焼き付け", + submitBatch: "字幕を焼き付け ({count} ファイル)", + progressLabel: "字幕を焼き付け中", }, "embed-subtitles": { - language: "Language code", - languageHint: "Three-letter ISO 639-2 code, e.g. eng, spa, fra", - submit: "Embed Subtitles", - submitBatch: "Embed Subtitles ({count} files)", - progressLabel: "Embedding subtitles", + language: "言語コード", + languageHint: "ISO 639-2 の3文字コード (例: eng, spa, fra)", + submit: "字幕を埋め込み", + submitBatch: "字幕を埋め込み ({count} ファイル)", + progressLabel: "字幕を埋め込み中", }, "extract-subtitles": { - submit: "Extract Subtitles", - submitBatch: "Extract Subtitles ({count} files)", - progressLabel: "Extracting subtitles", + submit: "字幕を抽出", + submitBatch: "字幕を抽出 ({count} ファイル)", + progressLabel: "字幕を抽出中", }, "images-to-video": { - secondsPerImage: "Seconds per image", - resolution: "Resolution", - fps: "Frames per second", - submit: "Create Video", - submitBatch: "Create Video ({count} files)", - progressLabel: "Creating slideshow", + secondsPerImage: "画像ごとの秒数", + resolution: "解像度", + fps: "フレームレート", + submit: "動画を作成", + submitBatch: "動画を作成 ({count} ファイル)", + progressLabel: "スライドショーを作成中", }, "video-metadata": { - hint: "Metadata report appears in the result", - submit: "Strip Metadata", - submitBatch: "Strip Metadata ({count} files)", - progressLabel: "Stripping metadata", + hint: "メタデータレポートが結果に表示されます", + submit: "メタデータを削除", + submitBatch: "メタデータを削除 ({count} ファイル)", + progressLabel: "メタデータを削除中", }, "convert-audio": { - format: "Output format", - bitrate: "Bitrate (kbps)", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + bitrate: "ビットレート (kbps)", + submit: "変換", + submitBatch: "変換 ({count} ファイル)", + progressLabel: "変換中", }, "trim-audio": { - start: "Start (seconds)", - end: "End (seconds)", - submit: "Trim", - submitBatch: "Trim ({count} files)", - progressLabel: "Trimming", + start: "開始 (秒)", + end: "終了 (秒)", + submit: "トリミング", + submitBatch: "トリミング ({count} ファイル)", + progressLabel: "トリミング中", }, "extract-audio": { - format: "Output format", - submit: "Extract", - submitBatch: "Extract ({count} files)", - progressLabel: "Extracting", + format: "出力形式", + submit: "抽出", + submitBatch: "抽出 ({count} ファイル)", + progressLabel: "抽出中", }, "volume-adjust": { - "gain-db": "Gain (dB)", - submit: "Adjust Volume", - submitBatch: "Adjust Volume ({count} files)", - progressLabel: "Adjusting volume", + "gain-db": "ゲイン (dB)", + submit: "音量を調整", + submitBatch: "音量を調整 ({count} ファイル)", + progressLabel: "音量を調整中", }, "normalize-audio": { - hint: "EBU R128 loudness normalization", - submit: "Normalize", - submitBatch: "Normalize ({count} files)", - progressLabel: "Normalizing", + hint: "EBU R128 ラウドネス正規化", + submit: "正規化", + submitBatch: "正規化 ({count} ファイル)", + progressLabel: "正規化中", }, "fade-audio": { - "fade-in-s": "Fade in (seconds)", - "fade-out-s": "Fade out (seconds)", - submit: "Apply Fade", - submitBatch: "Apply Fade ({count} files)", - progressLabel: "Applying fade", + "fade-in-s": "フェードイン (秒)", + "fade-out-s": "フェードアウト (秒)", + submit: "フェードを適用", + submitBatch: "フェードを適用 ({count} ファイル)", + progressLabel: "フェードを適用中", }, "reverse-audio": { - submit: "Reverse", - submitBatch: "Reverse ({count} files)", - progressLabel: "Reversing", + submit: "逆再生", + submitBatch: "逆再生 ({count} ファイル)", + progressLabel: "逆再生中", }, "audio-speed": { - factor: "Speed factor", - submit: "Change Speed", - submitBatch: "Change Speed ({count} files)", - progressLabel: "Changing speed", + factor: "速度倍率", + submit: "速度を変更", + submitBatch: "速度を変更 ({count}ファイル)", + progressLabel: "速度変更中", }, "pitch-shift": { - semitones: "Semitones", - hint: "0 semitones is not allowed", - submit: "Shift Pitch", - submitBatch: "Shift Pitch ({count} files)", - progressLabel: "Shifting pitch", + semitones: "半音", + hint: "0半音は指定できません", + submit: "ピッチをシフト", + submitBatch: "ピッチをシフト ({count}ファイル)", + progressLabel: "ピッチシフト中", }, "audio-channels": { - mode: "Channel mode", - "stereo-to-mono": "Stereo to mono", - "mono-to-stereo": "Mono to stereo", - swap: "Swap left/right", - submit: "Convert Channels", - submitBatch: "Convert Channels ({count} files)", - progressLabel: "Converting channels", + mode: "チャンネルモード", + "stereo-to-mono": "ステレオからモノラル", + "mono-to-stereo": "モノラルからステレオ", + swap: "左右を入れ替え", + submit: "チャンネルを変換", + submitBatch: "チャンネルを変換 ({count}ファイル)", + progressLabel: "チャンネル変換中", }, "silence-removal": { - "threshold-db": "Silence threshold (dB)", - "min-silence-s": "Minimum silence duration (seconds)", - submit: "Remove Silence", - submitBatch: "Remove Silence ({count} files)", - progressLabel: "Removing silence", + "threshold-db": "無音しきい値 (dB)", + "min-silence-s": "最小無音時間(秒)", + submit: "無音を削除", + submitBatch: "無音を削除 ({count}ファイル)", + progressLabel: "無音削除中", }, "noise-reduction": { - strength: "Strength", - light: "Light", - medium: "Medium", - strong: "Strong", - submit: "Reduce Noise", - submitBatch: "Reduce Noise ({count} files)", - progressLabel: "Reducing noise", + strength: "強度", + light: "弱", + medium: "中", + strong: "強", + submit: "ノイズを軽減", + submitBatch: "ノイズを軽減 ({count}ファイル)", + progressLabel: "ノイズ軽減中", }, "merge-audio": { - format: "Output format", + format: "出力形式", mp3: "MP3", wav: "WAV", flac: "FLAC", m4a: "M4A", - "order-hint": "Files will be joined in upload order", - submit: "Merge Audio", - submitBatch: "Merge Audio ({count} files)", - progressLabel: "Merging audio", + "order-hint": "アップロード順にファイルが結合されます", + submit: "音声を結合", + submitBatch: "音声を結合 ({count}ファイル)", + progressLabel: "音声結合中", }, "split-audio": { - mode: "Split mode", - time: "By time", - parts: "Equal parts", - silence: "By silence", - "segment-s": "Segment length (seconds)", - "num-parts": "Number of parts", - "threshold-db": "Silence threshold (dB)", - "min-silence-s": "Minimum silence duration (seconds)", - submit: "Split Audio", - submitBatch: "Split Audio ({count} files)", - progressLabel: "Splitting audio", + mode: "分割モード", + time: "時間で分割", + parts: "均等分割", + silence: "無音で分割", + "segment-s": "セグメント長(秒)", + "num-parts": "分割数", + "threshold-db": "無音しきい値 (dB)", + "min-silence-s": "最小無音時間(秒)", + submit: "音声を分割", + submitBatch: "音声を分割 ({count}ファイル)", + progressLabel: "音声分割中", }, "ringtone-maker": { - "start-s": "Start time (seconds)", - "duration-s": "Duration (seconds)", - "max-hint": "Maximum 30 seconds", - submit: "Create Ringtone", - submitBatch: "Create Ringtone ({count} files)", - progressLabel: "Creating ringtone", + "start-s": "開始時間(秒)", + "duration-s": "長さ(秒)", + "max-hint": "最大30秒", + submit: "着信音を作成", + submitBatch: "着信音を作成 ({count}ファイル)", + progressLabel: "着信音作成中", }, "waveform-image": { - width: "Width (px)", - height: "Height (px)", - color: "Waveform color", - submit: "Generate Waveform", - submitBatch: "Generate Waveform ({count} files)", - progressLabel: "Generating waveform", + width: "幅 (px)", + height: "高さ (px)", + color: "波形の色", + submit: "波形を生成", + submitBatch: "波形を生成 ({count}ファイル)", + progressLabel: "波形生成中", }, "audio-metadata": { - strip: "Strip all metadata", - title: "Title", - artist: "Artist", + strip: "すべてのメタデータを削除", + title: "タイトル", + artist: "アーティスト", album: "Album", - submit: "Apply Metadata", - submitBatch: "Apply Metadata ({count} files)", - progressLabel: "Applying metadata", + submit: "メタデータを適用", + submitBatch: "メタデータを適用 ({count}ファイル)", + progressLabel: "メタデータ適用中", }, "merge-pdf": { - addFiles: "Add PDFs to merge", - needTwo: "At least two PDFs are required", - orderHint: "{count} PDFs will merge in this order", - submit: "Merge", - submitBatch: "Merge ({count} files)", - progressLabel: "Merging", + addFiles: "結合するPDFを追加", + needTwo: "2つ以上のPDFが必要です", + orderHint: "{count}個のPDFがこの順序で結合されます", + submit: "結合", + submitBatch: "結合 ({count}ファイル)", + progressLabel: "結合中", }, "split-pdf": { - mode: "Split mode", - range: "Page range", - rangeHint: "e.g. 1-3, 5, 7-z", - everyN: "Pages per part", - submit: "Split", - submitBatch: "Split ({count} files)", - progressLabel: "Splitting", + mode: "分割モード", + range: "ページ範囲", + rangeHint: "例: 1-3, 5, 7-z", + everyN: "パートあたりのページ数", + submit: "分割", + submitBatch: "分割 ({count}ファイル)", + progressLabel: "分割中", }, "compress-pdf": { - preset: "Quality preset", - screen: "Screen (smallest)", - ebook: "Ebook (balanced)", - printer: "Printer (best quality)", - submit: "Compress", - submitBatch: "Compress ({count} files)", - progressLabel: "Compressing", + preset: "品質プリセット", + screen: "画面用(最小)", + ebook: "電子書籍用(バランス)", + printer: "印刷用(最高品質)", + submit: "圧縮", + submitBatch: "圧縮 ({count}ファイル)", + progressLabel: "圧縮中", }, "rotate-pdf": { - angle: "Rotation angle", - range: "Page range", - rangeHint: "e.g. 1-3, 5, 1-z (all pages)", - submit: "Rotate", - submitBatch: "Rotate ({count} files)", - progressLabel: "Rotating", + angle: "回転角度", + range: "ページ範囲", + rangeHint: "例: 1-3, 5, 1-z(全ページ)", + submit: "回転", + submitBatch: "回転 ({count}ファイル)", + progressLabel: "回転中", }, "convert-document": { - format: "Output format", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "convert-presentation": { - format: "Output format", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "convert-spreadsheet": { - format: "Output format", - hint: "Multi-sheet workbooks export the first sheet to CSV.", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + hint: "複数シートのブックはCSVへの変換時に最初のシートのみ出力されます。", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "excel-to-pdf": { - submit: "Convert to PDF", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "PDFに変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "powerpoint-to-pdf": { - submit: "Convert to PDF", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "PDFに変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "word-to-pdf": { - submit: "Convert to PDF", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "PDFに変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "extract-pages": { - range: "Page range", - rangeHint: "e.g. 1-3, 5, 7-z", - submit: "Extract", - submitBatch: "Extract ({count} files)", - progressLabel: "Extracting", + range: "ページ範囲", + rangeHint: "例: 1-3, 5, 7-z", + submit: "抽出", + submitBatch: "抽出 ({count}ファイル)", + progressLabel: "抽出中", }, "remove-pages": { - pages: "Pages to remove", - pagesHint: "e.g. 2, 4-6, z (last page)", - submit: "Remove", - submitBatch: "Remove ({count} files)", - progressLabel: "Removing", + pages: "削除するページ", + pagesHint: "例: 2, 4-6, z(最終ページ)", + submit: "削除", + submitBatch: "削除 ({count}ファイル)", + progressLabel: "削除中", }, "organize-pdf": { - order: "Page order", - orderHint: "e.g. 3,1,2 or 1-z (identity)", - submit: "Reorder", - submitBatch: "Reorder ({count} files)", - progressLabel: "Reordering", + order: "ページ順序", + orderHint: "例: 3,1,2 または 1-z(そのまま)", + submit: "並べ替え", + submitBatch: "並べ替え ({count}ファイル)", + progressLabel: "並べ替え中", }, "protect-pdf": { - userPassword: "User password", - ownerPassword: "Owner password (optional)", - ownerPasswordHint: "Defaults to user password if empty", - submit: "Protect", - submitBatch: "Protect ({count} files)", - progressLabel: "Encrypting", + userPassword: "ユーザーパスワード", + ownerPassword: "オーナーパスワード(任意)", + ownerPasswordHint: "空の場合はユーザーパスワードが使用されます", + submit: "保護", + submitBatch: "保護 ({count}ファイル)", + progressLabel: "暗号化中", }, "unlock-pdf": { password: "Password", - submit: "Unlock", - submitBatch: "Unlock ({count} files)", - progressLabel: "Decrypting", + submit: "ロック解除", + submitBatch: "ロック解除 ({count}ファイル)", + progressLabel: "復号中", }, "repair-pdf": { - submit: "Repair", - submitBatch: "Repair ({count} files)", - progressLabel: "Repairing", + submit: "修復", + submitBatch: "修復 ({count}ファイル)", + progressLabel: "修復中", }, "linearize-pdf": { - submit: "Optimize", - submitBatch: "Optimize ({count} files)", - progressLabel: "Linearizing", + submit: "最適化", + submitBatch: "最適化 ({count}ファイル)", + progressLabel: "リニアライズ中", }, "grayscale-pdf": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "pdfa-convert": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "crop-pdf": { - margin: "Margin (points)", - submit: "Crop", - submitBatch: "Crop ({count} files)", - progressLabel: "Cropping", + margin: "余白(ポイント)", + submit: "切り抜き", + submitBatch: "切り抜き ({count}ファイル)", + progressLabel: "切り抜き中", }, "nup-pdf": { - perSheet: "Pages per sheet", - submit: "Arrange", - submitBatch: "Arrange ({count} files)", - progressLabel: "Arranging", + perSheet: "1枚あたりのページ数", + submit: "配置", + submitBatch: "配置 ({count}ファイル)", + progressLabel: "配置中", }, "booklet-pdf": { - perSheet: "Pages per sheet", - submit: "Create Booklet", - submitBatch: "Create Booklet ({count} files)", - progressLabel: "Creating booklet", + perSheet: "1枚あたりのページ数", + submit: "冊子を作成", + submitBatch: "冊子を作成 ({count}ファイル)", + progressLabel: "冊子作成中", }, "watermark-pdf": { - text: "Watermark text", - position: "Position", - fontSize: "Font size", - opacity: "Opacity", - rotation: "Rotation", - submit: "Watermark", - submitBatch: "Watermark ({count} files)", - progressLabel: "Watermarking", + text: "透かしテキスト", + position: "位置", + fontSize: "フォントサイズ", + opacity: "不透明度", + rotation: "回転", + submit: "透かしを追加", + submitBatch: "透かしを追加 ({count}ファイル)", + progressLabel: "透かし追加中", }, "pdf-page-numbers": { - position: "Position", - fontSize: "Font size", - submit: "Add Numbers", - submitBatch: "Add Numbers ({count} files)", - progressLabel: "Numbering", + position: "位置", + fontSize: "フォントサイズ", + submit: "番号を追加", + submitBatch: "番号を追加 ({count}ファイル)", + progressLabel: "番号追加中", }, "flatten-pdf": { - submit: "Flatten", - submitBatch: "Flatten ({count} files)", - progressLabel: "Flattening", + submit: "フラット化", + submitBatch: "フラット化 ({count}ファイル)", + progressLabel: "フラット化中", }, "redact-pdf": { - terms: "Terms to redact", - termsHint: "One term per line (max 50)", - caseSensitive: "Case sensitive", - submit: "Redact", - submitBatch: "Redact ({count} files)", - progressLabel: "Redacting", + terms: "墨消しする語句", + termsHint: "1行に1語句(最大50件)", + caseSensitive: "大文字・小文字を区別", + submit: "墨消し", + submitBatch: "墨消し ({count}ファイル)", + progressLabel: "墨消し中", }, "pdf-to-text": { - submit: "Extract Text", - submitBatch: "Extract Text ({count} files)", - progressLabel: "Extracting", + submit: "テキストを抽出", + submitBatch: "テキストを抽出 ({count}ファイル)", + progressLabel: "抽出中", }, "pdf-to-word": { - hint: "Best for text-based PDFs; scanned pages need OCR", - submit: "Convert to Word", - submitBatch: "Convert to Word ({count} files)", - progressLabel: "Converting", + hint: "テキストベースのPDFに最適です。スキャンページにはOCRが必要です", + submit: "Wordに変換", + submitBatch: "Wordに変換 ({count}ファイル)", + progressLabel: "変換中", }, "pdf-metadata": { - title: "Title", - author: "Author", - subject: "Subject", - keywords: "Keywords", - submit: "Set Metadata", - submitBatch: "Set Metadata ({count} files)", - progressLabel: "Setting metadata", + title: "タイトル", + author: "著者", + subject: "件名", + keywords: "キーワード", + submit: "メタデータを設定", + submitBatch: "メタデータを設定 ({count}ファイル)", + progressLabel: "メタデータ設定中", }, "html-to-pdf": { - hint: "Remote resources are disabled for privacy.", - submit: "Convert to PDF", - submitBatch: "Convert to PDF ({count} files)", - progressLabel: "Converting", + hint: "プライバシー保護のため外部リソースは無効です。", + submit: "PDFに変換", + submitBatch: "PDFに変換 ({count}ファイル)", + progressLabel: "変換中", }, "markdown-to-docx": { - submit: "Convert to DOCX", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "DOCXに変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "markdown-to-html": { - hint: "Remote images in the source are left as-is in the output.", - submit: "Convert to HTML", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + hint: "ソース内の外部画像は出力にそのまま残ります。", + submit: "HTMLに変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "markdown-to-pdf": { - hint: "Remote resources are disabled for privacy.", - submit: "Convert to PDF", - submitBatch: "Convert to PDF ({count} files)", - progressLabel: "Converting", + hint: "プライバシー保護のため外部リソースは無効です。", + submit: "PDFに変換", + submitBatch: "PDFに変換 ({count}ファイル)", + progressLabel: "変換中", }, "epub-convert": { - format: "Output format", - hint: "Remote resources inside the book are not fetched.", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + format: "出力形式", + hint: "書籍内の外部リソースは取得されません。", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "to-epub": { - submit: "Convert to EPUB", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "EPUBに変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "csv-excel": { - sheet: "Worksheet number", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + sheet: "ワークシート番号", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "csv-json": { - pretty: "Pretty print", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + pretty: "整形出力", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "json-xml": { - pretty: "Pretty print", - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + pretty: "整形出力", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "split-csv": { - rowsPerFile: "Rows per file", - keepHeader: "Keep header in each file", - submit: "Split", - submitBatch: "Split ({count} files)", - progressLabel: "Splitting", + rowsPerFile: "1ファイルあたりの行数", + keepHeader: "各ファイルにヘッダーを残す", + submit: "分割", + submitBatch: "分割 ({count}ファイル)", + progressLabel: "分割中", }, "merge-csvs": { - submit: "Merge", - submitBatch: "Merge ({count} files)", - progressLabel: "Merging", + submit: "結合", + submitBatch: "結合 ({count}ファイル)", + progressLabel: "結合中", }, "yaml-json": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "xml-to-csv": { - submit: "Convert", - submitBatch: "Convert ({count} files)", - progressLabel: "Converting", + submit: "変換", + submitBatch: "変換 ({count}ファイル)", + progressLabel: "変換中", }, "create-zip": { - submit: "Create ZIP", - submitBatch: "Create ZIP ({count} files)", - progressLabel: "Zipping", + submit: "ZIPを作成", + submitBatch: "ZIPを作成 ({count}ファイル)", + progressLabel: "ZIP作成中", }, "extract-zip": { - submit: "Extract", - submitBatch: "Extract ({count} files)", - progressLabel: "Extracting", + submit: "解凍", + submitBatch: "解凍 ({count}ファイル)", + progressLabel: "解凍中", }, }, urlImport: { @@ -2410,35 +2411,35 @@ export const ja: TranslationKeys = { downloadAllZip: "一括ダウンロード(ZIP)", hideSettings: "設定を隠す", imageArea: "画像エリア", - disabledByAdmin: "This tool has been disabled by your administrator", - browseOtherTools: "Browse other tools", - privacyNote: "Files are processed on your server and never leave your network", + disabledByAdmin: "このツールは管理者によって無効化されています", + browseOtherTools: "他のツールを見る", + privacyNote: "ファイルはサーバー上で処理され、ネットワーク外に送信されません", applyAndDownload: "適用してダウンロード", - andMore: "and {count} more", - importFromFiles: "Import from Files", - saveToFiles: "Save to Files", - savedToFiles: "Saved to Files", - adjustSettings: "Adjust settings", - startOver: "Start over with a new file", - newFile: "New file", - previewUnavailable: "Preview will be available after processing", - generatePreview: "Generate Preview", - previewFailed: "Preview generation failed", - backToTools: "Back to Tools", - original: "Original", - processed: "Processed", - saved: "Saved", - noChange: "no change", - download: "Download", + andMore: "他 {count} 件", + importFromFiles: "ファイルからインポート", + saveToFiles: "ファイルに保存", + savedToFiles: "ファイルに保存しました", + adjustSettings: "設定を調整", + startOver: "新しいファイルでやり直す", + newFile: "新しいファイル", + previewUnavailable: "プレビューは処理後に表示されます", + generatePreview: "プレビューを生成", + previewFailed: "プレビューの生成に失敗しました", + backToTools: "ツール一覧に戻る", + original: "元画像", + processed: "処理済み", + saved: "保存済み", + noChange: "変更なし", + download: "ダウンロード", settingsSaved: "設定は保存されています。", tryAgain: "再試行", tryDifferentFile: "別のファイルを試す", - batchPartialSuccess: "{success} of {total} processed. {failed} failed.", - dataResultsHint: "Results shown above. Use the copy button in the results panel.", - downloadAsFile: "Download as file", - downloadAll: "Download All", - downloadFiles: "Download {count} files", - audioDecodeUnsupported: "This audio format cannot be previewed in the browser", + batchPartialSuccess: "{total} 件中 {success} 件処理完了。{failed} 件失敗。", + dataResultsHint: "結果は上部に表示されています。結果パネルのコピーボタンをご利用ください。", + downloadAsFile: "ファイルとしてダウンロード", + downloadAll: "すべてダウンロード", + downloadFiles: "{count} 件のファイルをダウンロード", + audioDecodeUnsupported: "この音声形式はブラウザでプレビューできません", }, homePage: { generatingPreview: "プレビューを生成中...", @@ -2446,20 +2447,20 @@ export const ja: TranslationKeys = { changeFile: "ファイルを変更", quickActions: "クイックアクション", allTools: "すべてのツール", - searchPlaceholder: "Search {count} tools...", - recent: "Recent", - popular: "Popular", - browseByCategory: "Browse by Category", - gettingStarted: "Getting Started", - noToolsMatch: "No tools match '{query}'", - clearSearch: "Clear search", - all: "All", + searchPlaceholder: "{count} 個のツールを検索...", + recent: "最近", + popular: "人気", + browseByCategory: "カテゴリで探す", + gettingStarted: "はじめに", + noToolsMatch: "'{query}' に一致するツールはありません", + clearSearch: "検索をクリア", + all: "すべて", documents: "PDF", - data: "Files", + data: "ファイル", pdf: "PDF", - files: "Files", - toolCount: "{count} tools", - heading: "SnapOtter Tools", + files: "ファイル", + toolCount: "{count} 個のツール", + heading: "SnapOtter ツール", }, fullscreenGrid: { searchPlaceholder: "ツールを検索...", @@ -2612,25 +2613,25 @@ export const ja: TranslationKeys = { serverDecodeFailed: "サーバーでのデコードに失敗しました", }, shapes: { - shape: "Shape", - fill: "Fill", - stroke: "Stroke", - strokeWidth: "Width", - cornerRadius: "Radius", - sides: "Sides", - points: "Points", - dashStyle: "Dash", - solid: "Solid", - dashed: "Dashed", - dotted: "Dotted", - none: "None", - opacity: "Opacity", - rectangle: "Rectangle", - ellipse: "Ellipse", - line: "Line", - arrow: "Arrow", - polygon: "Polygon", - star: "Star", + shape: "シェイプ", + fill: "塗りつぶし", + stroke: "枠線", + strokeWidth: "線幅", + cornerRadius: "角丸", + sides: "辺数", + points: "頂点数", + dashStyle: "線種", + solid: "実線", + dashed: "破線", + dotted: "点線", + none: "なし", + opacity: "不透明度", + rectangle: "四角形", + ellipse: "楕円", + line: "直線", + arrow: "矢印", + polygon: "多角形", + star: "星形", }, }, settings: { @@ -2643,7 +2644,7 @@ export const ja: TranslationKeys = { teams: "チーム", roles: "ロール", auditLog: "監査ログ", - usage: "Usage", + usage: "使用状況", apiKeys: "APIキー", aiFeatures: "AI機能", tools: "ツール", @@ -2703,10 +2704,10 @@ export const ja: TranslationKeys = { maxSplitGrid: "最大分割グリッド", maxPdfPages: "最大PDFページ数", sessionDuration: "セッション期間", - supportBundleButton: "Download Support Bundle", + supportBundleButton: "サポートバンドルをダウンロード", supportBundleDescription: - "Download a diagnostic zip with redacted config, logs, and job data for troubleshooting.", - supportBundleFailed: "Failed to download support bundle.", + "トラブルシューティング用の診断 ZIP(設定、ログ、ジョブデータを含む)をダウンロードします。", + supportBundleFailed: "サポートバンドルのダウンロードに失敗しました。", }, security: { heading: "セキュリティ", @@ -2722,33 +2723,33 @@ export const ja: TranslationKeys = { currentPasswordIncorrect: "現在のパスワードが正しくありません", changePasswordButton: "パスワード変更", loginAttemptLimitNote: "ログイン試行制限はシステム設定で構成できます。", - adminHeading: "Admin Security Settings", - adminDescription: "Enterprise security policy settings. These apply to all users.", - sessionIdleTimeout: "Session Idle Timeout (minutes)", - sessionIdleTimeoutDesc: "Automatically log out idle sessions. 0 = disabled.", - maxSessionsPerUser: "Max Sessions Per User", - maxSessionsPerUserDesc: "Limit concurrent sessions per user. 0 = unlimited.", - mfaPolicy: "MFA Policy", - mfaPolicyDesc: "Require multi-factor authentication for users.", - mfaPolicyOptional: "Optional", - mfaPolicyAdminsOnly: "Required for admins", - mfaPolicyRequired: "Required for all users", - ssoEnforcement: "SSO Enforcement", - ssoEnforcementDesc: "Require SSO login for all non-break-glass users.", - ssoBreakGlassUsername: "Break Glass Admin Username", - ssoBreakGlassUsernameDesc: - "This admin can still log in with local credentials when SSO is enforced.", - passwordMinLength: "Minimum Password Length", - passwordMinLengthDesc: "Minimum number of characters required for passwords.", - passwordRequireUppercase: "Require Uppercase", - passwordRequireUppercaseDesc: "Require at least one uppercase letter.", - passwordRequireNumber: "Require Number", - passwordRequireNumberDesc: "Require at least one number.", - passwordRequireSpecial: "Require Special Character", - passwordRequireSpecialDesc: "Require at least one special character.", - passwordPolicyHeading: "Password Policy", - securitySettingsSaved: "Security settings saved", - securitySettingsFailed: "Failed to save security settings", + adminHeading: "管理者セキュリティ設定", + adminDescription: + "エンタープライズセキュリティポリシー設定。すべてのユーザーに適用されます。", + sessionIdleTimeout: "セッションアイドルタイムアウト(分)", + sessionIdleTimeoutDesc: "アイドル状態のセッションを自動ログアウトします。0 = 無効。", + maxSessionsPerUser: "ユーザーあたりの最大セッション数", + maxSessionsPerUserDesc: "ユーザーあたりの同時セッション数を制限します。0 = 無制限。", + mfaPolicy: "MFA ポリシー", + mfaPolicyDesc: "ユーザーに多要素認証を要求します。", + mfaPolicyOptional: "任意", + mfaPolicyAdminsOnly: "管理者のみ必須", + mfaPolicyRequired: "全ユーザー必須", + ssoEnforcement: "SSO の強制", + ssoEnforcementDesc: "緊急アクセス用以外のすべてのユーザーに SSO ログインを要求します。", + ssoBreakGlassUsername: "緊急アクセス用管理者ユーザー名", + ssoBreakGlassUsernameDesc: "SSO 強制時でもローカル資格情報でログインできる管理者です。", + passwordMinLength: "パスワードの最小文字数", + passwordMinLengthDesc: "パスワードに必要な最小文字数です。", + passwordRequireUppercase: "大文字を必須にする", + passwordRequireUppercaseDesc: "大文字を1文字以上含める必要があります。", + passwordRequireNumber: "数字を必須にする", + passwordRequireNumberDesc: "数字を1文字以上含める必要があります。", + passwordRequireSpecial: "特殊文字を必須にする", + passwordRequireSpecialDesc: "特殊文字を1文字以上含める必要があります。", + passwordPolicyHeading: "パスワードポリシー", + securitySettingsSaved: "セキュリティ設定を保存しました", + securitySettingsFailed: "セキュリティ設定の保存に失敗しました", }, people: { heading: "メンバー", @@ -2830,12 +2831,11 @@ export const ja: TranslationKeys = { nameRequired: "チーム名は必須です", nameTooLong: "チーム名は50文字以内にしてください", duplicateName: "同じ名前のチームが既にあります", - teamStorageQuota: "Storage Quota (MB)", - teamStorageQuotaDesc: "Maximum storage for this team in MB. Leave empty for no limit.", - teamRetentionHours: "Retention (hours)", - teamRetentionHoursDesc: - "Processing file retention for this team. Leave empty to use global default.", - quotaSaved: "Team settings saved", + teamStorageQuota: "ストレージ容量(MB)", + teamStorageQuotaDesc: "チームの最大ストレージ容量(MB)。空欄で無制限。", + teamRetentionHours: "保持期間(時間)", + teamRetentionHoursDesc: "チームの処理ファイル保持期間。空欄でグローバルデフォルトを使用。", + quotaSaved: "チーム設定を保存しました", }, roles: { heading: "ロール", @@ -2892,35 +2892,35 @@ export const ja: TranslationKeys = { daysAgo: "{days}日前", }, usage: { - heading: "Usage", - description: "Local usage statistics from jobs and file storage.", - periodLabel: "Period", - days7: "7 days", - days30: "30 days", - days90: "90 days", - jobsPerDayHeading: "Jobs per day", - topToolsHeading: "Top tools", - perUserHeading: "Per-user volume", - durationsHeading: "Duration percentiles", - noData: "No data for this period.", - dayColumn: "Day", - totalColumn: "Total", - completedColumn: "Completed", - failedColumn: "Failed", - toolColumn: "Tool", - runsColumn: "Runs", - userColumn: "User", - bytesInColumn: "Bytes in", + heading: "使用状況", + description: "ジョブとファイルストレージのローカル使用統計。", + periodLabel: "期間", + days7: "7日間", + days30: "30日間", + days90: "90日間", + jobsPerDayHeading: "1日あたりのジョブ数", + topToolsHeading: "よく使うツール", + perUserHeading: "ユーザー別使用量", + durationsHeading: "処理時間パーセンタイル", + noData: "この期間のデータはありません。", + dayColumn: "日", + totalColumn: "合計", + completedColumn: "完了", + failedColumn: "失敗", + toolColumn: "ツール", + runsColumn: "実行回数", + userColumn: "ユーザー", + bytesInColumn: "入力バイト", poolColumn: "Pool", p50Column: "p50", p95Column: "p95", - storageHeading: "Library storage", - storageFiles: "{count} files", - unknownUser: "(unknown)", - storageByTeam: "Storage by Team", - teamColumn: "Team", - storageColumn: "Storage", - usersColumn: "Users", + storageHeading: "ライブラリストレージ", + storageFiles: "{count} ファイル", + unknownUser: "(不明)", + storageByTeam: "チーム別ストレージ", + teamColumn: "チーム", + storageColumn: "ストレージ", + usersColumn: "ユーザー", }, apiKeys: { heading: "APIキー", @@ -2965,14 +2965,13 @@ export const ja: TranslationKeys = { startupCleanupDescription: "サーバー起動時に古い一時ファイルをクリーンアップ", }, dataRetention: { - title: "Data Retention", - fileMaxAgeHours: "Processing file retention (hours)", - fileMaxAgeHoursDesc: "How long to keep uploaded and processed files. Default: 72 hours.", - jobsRetentionDays: "Job record retention (days)", - jobsRetentionDaysDesc: "How long to keep job metadata. 0 = keep forever. Default: 30 days.", - auditRetentionDays: "Audit log retention (days)", - auditRetentionDaysDesc: - "How long to keep audit log entries. 0 = keep forever. Default: forever.", + title: "データ保持", + fileMaxAgeHours: "処理ファイルの保持期間(時間)", + fileMaxAgeHoursDesc: "アップロードおよび処理済みファイルの保持期間。デフォルト: 72時間。", + jobsRetentionDays: "ジョブ記録の保持期間(日)", + jobsRetentionDaysDesc: "ジョブメタデータの保持期間。0 = 永久保持。デフォルト: 30日。", + auditRetentionDays: "監査ログの保持期間(日)", + auditRetentionDaysDesc: "監査ログエントリの保持期間。0 = 永久保持。デフォルト: 永久。", }, analytics: { heading: "プロダクト分析", @@ -2984,23 +2983,24 @@ export const ja: TranslationKeys = { learnMore: "詳しく見る", }, aiFeatures: { - title: "AI Features", + title: "AI 機能", description: "高度なファイル処理のためのAIモデルバンドルを管理します。", - installAll: "Install All", - diskUsage: "Disk usage:", - installed: "Installed", - notInstalled: "Not installed", - queued: "Queued", - install: "Install", - repair: "Repair", - uninstall: "Uninstall", - installing: "Installing...", - importBundle: "Import Bundle", - importDescription: "Upload a .tar.gz bundle archive exported from another installation.", - importButton: "Import from file", - importing: "Importing...", - importSuccess: "Bundle imported successfully.", - importError: "Bundle import failed: {error}", + installAll: "すべてインストール", + diskUsage: "ディスク使用量: {size}", + installed: "インストール済み", + notInstalled: "未インストール", + queued: "待機中", + install: "インストール", + repair: "修復", + uninstall: "アンインストール", + installing: "インストール中...", + importBundle: "バンドルをインポート", + importDescription: + "他のインストールからエクスポートした .tar.gz バンドルアーカイブをアップロードします。", + importButton: "ファイルからインポート", + importing: "インポート中...", + importSuccess: "バンドルのインポートに成功しました。", + importError: "バンドルのインポートに失敗しました: {error}", }, about: { heading: "SnapOtterについて", @@ -3012,9 +3012,9 @@ export const ja: TranslationKeys = { githubLink: "GitHubリポジトリ", docsLink: "ドキュメント", apiRefLink: "APIリファレンス(Swagger)", - licenseLabel: "License:", + licenseLabel: "ライセンス:", licenseDescription: - "SnapOtter is open-source software licensed under the GNU Affero General Public License v3 (AGPLv3).", + "SnapOtter は GNU Affero General Public License v3 (AGPLv3) に基づくオープンソースソフトウェアです。", }, }, auth: { @@ -3039,18 +3039,17 @@ export const ja: TranslationKeys = { "お使いのアカウントにはこのアプリケーションへのアクセス権がありません。管理者にお問い合わせください。", oidcUserLimitReached: "ユーザー上限に達しました。管理者にお問い合わせください。", oidcGenericError: "認証エラー。もう一度お試しください。", - samlAuthFailed: "SAML authentication failed. Please try again.", + samlAuthFailed: "SAML 認証に失敗しました。もう一度お試しください。", samlUserNotAuthorized: - "Your account is not authorized to access this application. Contact your administrator.", - samlUserLimitReached: "User limit reached. Contact your administrator.", - ssoEnforcedLocalRestricted: "Local login is restricted to authorized administrators.", - mfaRequired: "Enter your authentication code", - mfaRecoveryHint: "You can also use a recovery code", - verify: "Verify", - verifying: "Verifying...", - mfaInvalidCode: "Invalid code. Please try again.", - mfaEnrollmentRequired: - "Your organization requires multi-factor authentication. Please set up MFA in your account settings.", + "このアプリケーションへのアクセス権がありません。管理者にお問い合わせください。", + samlUserLimitReached: "ユーザー数の上限に達しました。管理者にお問い合わせください。", + ssoEnforcedLocalRestricted: "ローカルログインは許可された管理者のみ使用できます。", + mfaRequired: "認証コードを入力してください", + mfaRecoveryHint: "リカバリーコードも使用できます", + verify: "確認", + verifying: "確認中...", + mfaInvalidCode: "無効なコードです。もう一度お試しください。", + mfaEnrollmentRequired: "組織で多要素認証が必須です。アカウント設定で MFA を設定してください。", methodSaml: "SAML", passwordManagedByProvider: "パスワードはIDプロバイダーで管理されています。", enterUsername: "ユーザー名を入力", @@ -3169,8 +3168,8 @@ export const ja: TranslationKeys = { pipelineName: "Pipeline名", pipelineDescription: "説明(任意)", noStepsPrompt: "ステップを追加して自動化を構築", - noStepsHeading: "No steps yet", - searchToolsPlaceholder: "Search tools...", + noStepsHeading: "ステップがありません", + searchToolsPlaceholder: "ツールを検索...", step: "ステップ", }, nav: { @@ -3184,32 +3183,32 @@ export const ja: TranslationKeys = { grid: "グリッド", }, files: { - myFiles: "My Files", - recentTab: "Recent", - uploadTab: "Upload Files", - fileDetailsAriaLabel: "File Details", - fileDetailsHeading: "File Details", - searchPlaceholder: "Search files...", - selectedCount: "{count} selected", - fileCount: "{count} files", - fileCountSingular: "{count} file", - noFilesFound: "No files found", - selectFilePrompt: "Select a file to view details", - openFile: "Open File", - selectFile: "Select File", - openInPipeline: "Open in Pipeline", - dropFilesHere: "Drop files here", - orClickToSelect: "or click to select files", - name: "Name", - format: "Format", - size: "Size", - dimensions: "Dimensions", - version: "Version", - toolsUsed: "Tools Used", - none: "None", - delete: "Delete", + myFiles: "マイファイル", + recentTab: "最近", + uploadTab: "ファイルをアップロード", + fileDetailsAriaLabel: "ファイル詳細", + fileDetailsHeading: "ファイル詳細", + searchPlaceholder: "ファイルを検索...", + selectedCount: "{count} 件選択中", + fileCount: "{count} ファイル", + fileCountSingular: "{count} ファイル", + noFilesFound: "ファイルが見つかりません", + selectFilePrompt: "ファイルを選択して詳細を表示", + openFile: "ファイルを開く", + selectFile: "ファイルを選択", + openInPipeline: "パイプラインで開く", + dropFilesHere: "ここにファイルをドロップ", + orClickToSelect: "またはクリックして選択", + name: "名前", + format: "形式", + size: "サイズ", + dimensions: "寸法", + version: "バージョン", + toolsUsed: "使用ツール", + none: "なし", + delete: "削除", pipeline: "Pipeline", - download: "Download", + download: "ダウンロード", }, dropzone: { unsupportedFileType: "このツールではサポートされていないファイルタイプです", @@ -3247,9 +3246,10 @@ export const ja: TranslationKeys = { retryButton: "再試行", queued: "インストール待ちです...", enableButton: "{name}を有効化", - repairRequired: "Repair Required", - repairDescription: "Some model files are missing or corrupted. Repair will re-download them.", - repairButton: "Repair {name}", + repairRequired: "修復が必要", + repairDescription: + "一部のモデルファイルが見つからないか破損しています。修復すると再ダウンロードされます。", + repairButton: "{name} を修復", lessThanMinute: "残り1分未満", oneMinuteLeft: "約1分", minutesLeft: "約{mins}分", @@ -3363,66 +3363,66 @@ export const ja: TranslationKeys = { mobileNavSettings: "設定", }, a11y: { - skipToContent: "Skip to main content", - openSidebar: "Open sidebar", - closeSidebar: "Close sidebar", - closeSettings: "Close settings", - closeHelp: "Close help", - closeDialog: "Close dialog", - zoomIn: "Zoom in", - zoomOut: "Zoom out", - fitToView: "Fit to view", - actualSize: "Actual size", + skipToContent: "メインコンテンツへスキップ", + openSidebar: "サイドバーを開く", + closeSidebar: "サイドバーを閉じる", + closeSettings: "設定を閉じる", + closeHelp: "ヘルプを閉じる", + closeDialog: "ダイアログを閉じる", + zoomIn: "拡大", + zoomOut: "縮小", + fitToView: "画面に合わせる", + actualSize: "実寸表示", previousImage: "Previous image", nextImage: "Next image", imageArea: "Image area", imageViewer: "Image viewer", - fileDropZone: "File drop zone", + fileDropZone: "ファイルドロップゾーン", imageDropZone: "Image drop zone", - beforeAfterSlider: "Before/after comparison slider", + beforeAfterSlider: "処理前後の比較スライダー", imageControls: "Image controls", - zoomControls: "Zoom controls", - dragToReorder: "Drag to reorder", - whiteBackground: "White background", - blackBackground: "Black background", - expandPanel: "Expand panel", - collapsePanel: "Collapse panel", - swapDimensions: "Swap dimensions", - applyCrop: "Apply crop", - cancelCrop: "Cancel crop", - fontFamily: "Font family", - textColor: "Text color", - flipHorizontal: "Flip horizontal", - flipVertical: "Flip vertical", - hexColorValue: "Hex color value", - backgroundColor: "Background color", - foregroundColor: "Foreground color", - swapColors: "Swap foreground and background colors", - resetColors: "Reset to default black and white", - foregroundHex: "Foreground color hex value", - undo: "Undo", - redo: "Redo", - layers: "Layers", - addLayer: "Add layer", - deleteLayer: "Delete layer", - cancelOperation: "Cancel operation", - fill: "Fill", - fileDetails: "File details", - language: "Language", - selected: "Selected", - deleteKey: "Delete key", - editRole: "Edit role", - deleteRole: "Delete role", - notInstalled: "Not installed", - queued: "Queued for install", - installing: "Installing", - imageNOfTotal: "Image {n} of {total}", - processingComplete: "Image processed successfully", - processingFailed: "Processing failed", - settingsDialog: "Settings", - helpDialog: "Help", - navigationMenu: "Navigation", - homeLink: "SnapOtter home", + zoomControls: "ズームコントロール", + dragToReorder: "ドラッグして並べ替え", + whiteBackground: "白背景", + blackBackground: "黒背景", + expandPanel: "パネルを展開", + collapsePanel: "パネルを折りたたむ", + swapDimensions: "縦横を入れ替え", + applyCrop: "切り抜きを適用", + cancelCrop: "切り抜きをキャンセル", + fontFamily: "フォント", + textColor: "文字色", + flipHorizontal: "左右反転", + flipVertical: "上下反転", + hexColorValue: "HEX カラー値", + backgroundColor: "背景色", + foregroundColor: "前景色", + swapColors: "前景色と背景色を入れ替え", + resetColors: "デフォルトの白黒にリセット", + foregroundHex: "前景色の HEX 値", + undo: "元に戻す", + redo: "やり直し", + layers: "レイヤー", + addLayer: "レイヤーを追加", + deleteLayer: "レイヤーを削除", + cancelOperation: "操作をキャンセル", + fill: "塗りつぶし", + fileDetails: "ファイル詳細", + language: "言語", + selected: "選択中", + deleteKey: "キーを削除", + editRole: "ロールを編集", + deleteRole: "ロールを削除", + notInstalled: "未インストール", + queued: "インストール待ち", + installing: "インストール中", + imageNOfTotal: "画像 {n}/{total}", + processingComplete: "処理が完了しました", + processingFailed: "処理に失敗しました", + settingsDialog: "設定", + helpDialog: "ヘルプ", + navigationMenu: "ナビゲーション", + homeLink: "SnapOtter ホーム", }, } as const;