Skip to content

Commit 6e9e149

Browse files
committed
Add build-docs-l10n.sh for multi-language mdbook docs
Generates translated documentation by swapping locale .ftl files into en-US.ftl (since uudoc hardcodes that filename), re-running uudoc with translated tldr examples, and building mdbook per language.
1 parent 3d55b20 commit 6e9e149

1 file changed

Lines changed: 106 additions & 0 deletions

File tree

scripts/build-docs-l10n.sh

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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

Comments
 (0)