diff --git a/scripts/build-docs-l10n.sh b/scripts/build-docs-l10n.sh index 237741116..301601881 100755 --- a/scripts/build-docs-l10n.sh +++ b/scripts/build-docs-l10n.sh @@ -65,17 +65,19 @@ for lang in "${!LANG_MAP[@]}"; do done # Merge translated FTL with English: translated keys take priority, -# English keys fill in any gaps (handles empty files, partial translations) -# Returns 0 if fully translated, 1 if English fallback was used +# English keys fill in any gaps (handles empty files, partial translations). +# Sets MERGE_HAD_FALLBACK=1 if any English fallback entries were added. merge_ftl() { local english="$1" local translated="$2" local output="$3" + MERGE_HAD_FALLBACK=0 # If translated file is empty or missing, keep English as-is if [ ! -s "$translated" ]; then cp "$english" "$output" - return 1 + MERGE_HAD_FALLBACK=1 + return 0 fi # Extract top-level message IDs from the translated file @@ -87,7 +89,6 @@ merge_ftl() { cp "$translated" "$output" # Append English entries whose keys are NOT in the translated file - local had_fallback=0 local current_key="" local entry_lines="" while IFS= read -r line || [ -n "$line" ]; do @@ -95,10 +96,9 @@ merge_ftl() { # Flush previous entry if it was missing from translation if [ -n "$current_key" ] && ! echo "$translated_keys" | grep -qxF "$current_key"; then printf '%s\n' "$entry_lines" >> "$output" - had_fallback=1 + MERGE_HAD_FALLBACK=1 fi - current_key="${line%%[[:space:]]*=*}" - # Trim: extract just the identifier + # Extract just the identifier current_key=$(echo "$line" | grep -oP '^[a-zA-Z][a-zA-Z0-9_-]*') entry_lines="$line" elif [[ "$line" =~ ^[[:space:]] ]] && [ -n "$current_key" ]; then @@ -108,7 +108,7 @@ merge_ftl() { # Blank line or comment — flush previous entry if needed if [ -n "$current_key" ] && ! echo "$translated_keys" | grep -qxF "$current_key"; then printf '%s\n' "$entry_lines" >> "$output" - had_fallback=1 + MERGE_HAD_FALLBACK=1 fi current_key="" entry_lines="" @@ -117,9 +117,8 @@ merge_ftl() { # Flush last entry if [ -n "$current_key" ] && ! echo "$translated_keys" | grep -qxF "$current_key"; then printf '%s\n' "$entry_lines" >> "$output" - had_fallback=1 + MERGE_HAD_FALLBACK=1 fi - return $had_fallback } restore_en() { @@ -127,12 +126,17 @@ restore_en() { for util_dir in "$COREUTILS_DIR"/src/uu/*/locales/; do util=$(basename "$(dirname "$util_dir")") backup="$TMPDIR/src-backup/uu/$util/locales/en-US.ftl" - [ -f "$backup" ] && cp "$backup" "${util_dir}en-US.ftl" + if [ -f "$backup" ]; then + cp "$backup" "${util_dir}en-US.ftl" + fi done - local uucore_backup="$TMPDIR/src-backup/uucore/locales/en-US.ftl" - [ -f "$uucore_backup" ] && cp "$uucore_backup" "$COREUTILS_DIR/src/uucore/locales/en-US.ftl" + if [ -f "$TMPDIR/src-backup/uucore/locales/en-US.ftl" ]; then + cp "$TMPDIR/src-backup/uucore/locales/en-US.ftl" "$COREUTILS_DIR/src/uucore/locales/en-US.ftl" + fi # Restore English tldr - [ -f "$EN_TLDR" ] && cp "$EN_TLDR" "$COREUTILS_DIR/docs/tldr.zip" + if [ -f "$EN_TLDR" ]; then + cp "$EN_TLDR" "$COREUTILS_DIR/docs/tldr.zip" + fi } cd "$COREUTILS_DIR" @@ -154,7 +158,8 @@ for lang in "${!LANG_MAP[@]}"; do if [ -f "${util_dir}${ftl_name}.ftl" ]; then util=$(basename "$(dirname "$util_dir")") en_backup="$TMPDIR/src-backup/uu/$util/locales/en-US.ftl" - if ! merge_ftl "$en_backup" "${util_dir}${ftl_name}.ftl" "${util_dir}en-US.ftl"; then + merge_ftl "$en_backup" "${util_dir}${ftl_name}.ftl" "${util_dir}en-US.ftl" + if [ "$MERGE_HAD_FALLBACK" = "1" ]; then fallback_utils[$util]=1 fi fi @@ -176,10 +181,11 @@ for lang in "${!LANG_MAP[@]}"; do weblate_lang="${ftl_name//-/_}" for util in "${!fallback_utils[@]}"; do md_file="docs/src/utils/${util}.md" - [ -f "$md_file" ] || continue - notice="