feat(i18n): Add Japanese (ja/) translation (#105)

- Translate all 101 markdown files: P1 core, all 10 modules, examples,
  auxiliary docs (CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, CLAUDE.md, etc.),
  peripheral docs (.github/, docs/, resources/, scripts/)
- Translate comments and user-facing messages in 06-hooks/*.sh examples
- Copy 05-mcp/*.json examples (standard JSON, no comments)
- Update root README.md language switcher to include 日本語
- Add ja/TRANSLATION_NOTES.md (glossary + style guide)

All translations pass pre-commit quality gates (markdown-lint,
cross-references, mermaid-syntax, link-check, build-epub).
This commit is contained in:
JiangCheng
2026-04-30 07:16:46 +09:00
committed by GitHub
parent 32212292df
commit 1d1df9235b
118 changed files with 30380 additions and 3 deletions

View File

@@ -0,0 +1,78 @@
#!/bin/bash
# ファイル書き込み時のセキュリティスキャン
# フックPostToolUse:Write
#
# ハードコードされたシークレット・API キー・認証情報をファイルからスキャンする。
# 検出時は additionalContext を介して非ブロッキングの警告を出力する。
#
# 対応macOS、Linux、WindowsGit Bash
# Claude Code フックプロトコルに従い、標準入力から JSON を読み取る
INPUT=$(cat)
# sed で file_path を抽出Windows Git Bash を含む全プラットフォーム互換)
# grep -PWindows Git Bash で使えない)と python3 依存を避ける
FILE_PATH=$(echo "$INPUT" | sed -n 's/.*"file_path"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p' | head -1)
if [ -z "$FILE_PATH" ] || [ ! -f "$FILE_PATH" ]; then
exit 0
fi
# バイナリファイル・ベンダディレクトリ・ビルド成果物はスキップ
case "$FILE_PATH" in
*.png|*.jpg|*.jpeg|*.gif|*.svg|*.ico|*.woff|*.woff2|*.ttf|*.eot) exit 0 ;;
*/node_modules/*|*/.git/*|*/dist/*|*/build/*) exit 0 ;;
esac
ISSUES=""
# ハードコードされたパスワードの検出
# JSON 形式("password": "value"とコード形式password = 'value')の両方に対応
# 区切り文字には \\n を使う — JSON の改行エスケープとして有効で、printf でも安全に通る
if grep -qiE '"password"[[:space:]]*:[[:space:]]*"[^"]+"' "$FILE_PATH" 2>/dev/null; then
ISSUES="${ISSUES}- 警告: ハードコードされたパスワードの可能性を検出\\n"
elif grep -qiE '(password|passwd|pwd)[[:space:]]*=[[:space:]]*'"'"'[^'"'"']+'"'"'' "$FILE_PATH" 2>/dev/null; then
ISSUES="${ISSUES}- 警告: ハードコードされたパスワードの可能性を検出\\n"
fi
# ハードコードされた API キーの検出
if grep -qiE '"(api[_-]?key|apikey|access[_-]?token)"[[:space:]]*:[[:space:]]*"[^"]+"' "$FILE_PATH" 2>/dev/null; then
ISSUES="${ISSUES}- 警告: ハードコードされた API キーの可能性を検出\\n"
fi
# ハードコードされたシークレット・トークンの検出
if grep -qiE '(secret|token)[[:space:]]*=[[:space:]]*['"'"'"][^'"'"'"]+['"'"'"]' "$FILE_PATH" 2>/dev/null; then
ISSUES="${ISSUES}- 警告: ハードコードされたシークレットまたはトークンの可能性を検出\\n"
fi
# 秘密鍵の検出
if grep -q "BEGIN.*PRIVATE KEY" "$FILE_PATH" 2>/dev/null; then
ISSUES="${ISSUES}- 警告: 秘密鍵を検出\\n"
fi
# AWS アクセスキーの検出
if grep -qE "AKIA[0-9A-Z]{16}" "$FILE_PATH" 2>/dev/null; then
ISSUES="${ISSUES}- 警告: AWS アクセスキーを検出\\n"
fi
# semgrep が利用可能ならスキャンJSON 出力との混在を避けるため stdout は抑止)
if command -v semgrep &> /dev/null; then
semgrep --config=auto "$FILE_PATH" --quiet >/dev/null 2>/dev/null
fi
# trufflehog が利用可能ならスキャンJSON 出力との混在を避けるため stdout は抑止)
if command -v trufflehog &> /dev/null; then
trufflehog filesystem "$FILE_PATH" --only-verified --quiet >/dev/null 2>/dev/null
fi
# 問題が見つかったら additionalContext として出力(非ブロッキング警告)
# Claude Code PostToolUse プロトコルが要求する hookSpecificOutput 形式を使う
if [ -n "$ISSUES" ]; then
# ファイルパスを JSON 用にエスケープ(バックスラッシュとダブルクォート)
# ISSUES は既に \\n を区切り文字に用いている(有効な JSON エスケープ)— ダブルクォートのみエスケープする
SAFE_PATH=$(printf '%s' "$FILE_PATH" | sed 's/\\/\\\\/g; s/"/\\"/g')
SAFE_ISSUES=$(printf '%s' "$ISSUES" | sed 's/"/\\"/g')
printf '{"hookSpecificOutput": {"hookEventName": "PostToolUse", "additionalContext": "セキュリティスキャンで %s に問題を検出しました:\\n%s環境変数の使用を検討してください。"}}' "$SAFE_PATH" "$SAFE_ISSUES"
fi
exit 0