|
| 1 | +#!/bin/bash |
| 2 | +# Build coreutils mdbook docs for all languages |
| 3 | +# Usage: build-docs-l10n.sh <coreutils-dir> |
| 4 | +# |
| 5 | +# Expects: |
| 6 | +# - uudoc already built (cargo run --bin uudoc done previously) |
| 7 | +# - l10n locales already copied into coreutils/src/uu/*/locales/ |
| 8 | +# - English docs already built in coreutils/docs/book/ |
| 9 | +# |
| 10 | +# For each language, swaps the target locale's .ftl files into en-US.ftl |
| 11 | +# (since uudoc hardcodes that filename), re-runs uudoc, then builds mdbook. |
| 12 | + |
| 13 | +set -euo pipefail |
| 14 | + |
| 15 | +COREUTILS_DIR="${1:?Usage: $0 <coreutils-dir>}" |
| 16 | + |
| 17 | +# Languages to build (besides English which is already built) |
| 18 | +declare -A LANG_MAP=( |
| 19 | + [fr]="fr-FR" [de]="de" [es]="es-ES" [it]="it" [pt]="pt" [pt-BR]="pt-BR" |
| 20 | + [ja]="ja" [ko]="ko" [ru]="ru" [zh]="zh-Hans" [uk]="uk" [sv]="sv" |
| 21 | + [pl]="pl" [tr]="tr" [ar]="ar" [cs]="cs" [da]="da" [id]="id" |
| 22 | +) |
| 23 | + |
| 24 | +TMPDIR=$(mktemp -d) |
| 25 | +trap 'rm -rf "$TMPDIR"' EXIT |
| 26 | + |
| 27 | +# Save a copy of all en-US.ftl files for restoration |
| 28 | +cp -r "$COREUTILS_DIR/src" "$TMPDIR/src-backup" |
| 29 | + |
| 30 | +# Find uudoc binary (already built by the English docs step) |
| 31 | +UUDOC="$COREUTILS_DIR/target/debug/uudoc" |
| 32 | +if [ ! -x "$UUDOC" ]; then |
| 33 | + UUDOC="$COREUTILS_DIR/target/release/uudoc" |
| 34 | +fi |
| 35 | + |
| 36 | +# Save English tldr.zip for restoration |
| 37 | +EN_TLDR="$TMPDIR/tldr-en.zip" |
| 38 | +cp "$COREUTILS_DIR/docs/tldr.zip" "$EN_TLDR" 2>/dev/null || true |
| 39 | + |
| 40 | +# Download and repack translated tldr archives (uudoc expects pages/ prefix) |
| 41 | +echo "Downloading translated tldr archives..." |
| 42 | +for lang in "${!LANG_MAP[@]}"; do |
| 43 | + raw="$TMPDIR/tldr-raw-${lang}.zip" |
| 44 | + curl -sfL "https://github.com/tldr-pages/tldr/releases/download/v2.3/tldr-pages.${lang}.zip" \ |
| 45 | + -o "$raw" || true |
| 46 | + if [ -f "$raw" ]; then |
| 47 | + repack_dir="$TMPDIR/tldr-repack-${lang}" |
| 48 | + mkdir -p "$repack_dir/pages" |
| 49 | + (cd "$repack_dir" && unzip -o "$raw" -d pages/ > /dev/null 2>&1) |
| 50 | + (cd "$repack_dir" && zip -r "$TMPDIR/tldr-${lang}.zip" pages/ > /dev/null 2>&1) |
| 51 | + rm -rf "$repack_dir" "$raw" |
| 52 | + fi |
| 53 | +done |
| 54 | + |
| 55 | +restore_en() { |
| 56 | + # Restore all en-US.ftl files from backup |
| 57 | + for util_dir in "$COREUTILS_DIR"/src/uu/*/locales/; do |
| 58 | + util=$(basename "$(dirname "$util_dir")") |
| 59 | + backup="$TMPDIR/src-backup/uu/$util/locales/en-US.ftl" |
| 60 | + [ -f "$backup" ] && cp "$backup" "${util_dir}en-US.ftl" |
| 61 | + done |
| 62 | + local uucore_backup="$TMPDIR/src-backup/uucore/src/lib/mods/locales/en-US.ftl" |
| 63 | + [ -f "$uucore_backup" ] && cp "$uucore_backup" "$COREUTILS_DIR/src/uucore/src/lib/mods/locales/en-US.ftl" |
| 64 | + # Restore English tldr |
| 65 | + [ -f "$EN_TLDR" ] && cp "$EN_TLDR" "$COREUTILS_DIR/docs/tldr.zip" |
| 66 | +} |
| 67 | + |
| 68 | +cd "$COREUTILS_DIR" |
| 69 | + |
| 70 | +for lang in "${!LANG_MAP[@]}"; do |
| 71 | + echo "=== Building $lang docs ===" |
| 72 | + ftl_name="${LANG_MAP[$lang]}" |
| 73 | + |
| 74 | + # Swap in translated tldr.zip (fall back to English if unavailable) |
| 75 | + if [ -f "$TMPDIR/tldr-${lang}.zip" ]; then |
| 76 | + cp "$TMPDIR/tldr-${lang}.zip" docs/tldr.zip |
| 77 | + fi |
| 78 | + |
| 79 | + # uudoc hardcodes en-US.ftl — swap in the target locale temporarily |
| 80 | + for util_dir in src/uu/*/locales/; do |
| 81 | + if [ -f "${util_dir}${ftl_name}.ftl" ]; then |
| 82 | + cp "${util_dir}${ftl_name}.ftl" "${util_dir}en-US.ftl" |
| 83 | + fi |
| 84 | + done |
| 85 | + if [ -f "src/uucore/src/lib/mods/locales/${ftl_name}.ftl" ]; then |
| 86 | + cp "src/uucore/src/lib/mods/locales/${ftl_name}.ftl" "src/uucore/src/lib/mods/locales/en-US.ftl" |
| 87 | + fi |
| 88 | + |
| 89 | + # Re-generate markdown with swapped locale |
| 90 | + if ! "$UUDOC" 2>&1 | tail -3; then |
| 91 | + echo "WARNING: uudoc failed for $lang, skipping" |
| 92 | + restore_en |
| 93 | + continue |
| 94 | + fi |
| 95 | + |
| 96 | + # Build mdbook to a language-specific output directory |
| 97 | + sed -i '/^multilingual/d' docs/book.toml |
| 98 | + (cd docs && mdbook build -d "book-${lang}") |
| 99 | + |
| 100 | + # Restore en-US.ftl files for next iteration |
| 101 | + restore_en |
| 102 | + |
| 103 | + echo "Built $lang docs in docs/book-${lang}/" |
| 104 | +done |
| 105 | + |
| 106 | +echo "All translated docs built." |
0 commit comments