aboutsummaryrefslogtreecommitdiff
path: root/aux/workflow/l10n.sh
blob: 1002adc69f6c094ac262200116ec9e72c80327df (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/sh
set -eu

LANGS=
while getopts 'l:L:' flag; do
	case "$flag" in
		l)
			LANGS="$OPTARG"
			;;
		L)
			CONTRIBLANGS="$OPTARG"
			;;
		*)
			exit 2
			;;
	esac
done
shift $((OPTIND - 1))

assert_arg() {
	if [ -z "$1" ]; then
		echo "Missing $2" >&2
		exit 2
	fi
}

assert_arg "${LANGS:-}" '-l LANGS'

for from_f in "$@"; do
	for lang in $LANGS ${CONTRIBLANGS:-}; do
		to_f="$(echo "$from_f" | sed "s/\.en\./.$lang./")"
		printf 'Generating %s...\n' "$to_f" >&2
		pofile="po/LC_MESSAGES/$from_f/$lang.po"
		mkdir -p "$(dirname "$pofile")"

		case "$from_f" in
			*.en.[1-9].in)
				po4a-updatepo -f man -m "$from_f" -p "$pofile"
				po4a-translate -f man -m "$from_f" \
					-p "$pofile" -l "$to_f" -k 0 -v >&2
				;;
			*.en.html)
				po4a-updatepo -f xhtml -m "$from_f" -p "$pofile"
				po4a-translate -f xhtml -m "$from_f" \
					-p "$pofile" -l "$to_f" -k 0 -v >&2
				;;
			*.en.md)
				touch "$pofile"
				md2po --include-codeblocks --quiet --save \
					--po-filepath "$pofile" < "$from_f"
				po2md --pofiles "$pofile" --save "$to_f" \
					--quiet < "$from_f"
				;;
			*)
				echo "Unsupported file format: $from_f" >&2
				exit 2
				;;
		esac
	done
done

end="\033[0m"
yellowb="\033[1;33m"
for lang in $LANGS; do
	# shellcheck disable=2044
	for pofile in $(find po/ -type f -name "$lang.po"); do
		if ! LANG=POSIX msgfmt --statistics "$pofile" 2>&1 |
				grep untranslated; then
			continue
		fi
		# shellcheck disable=2059
		printf "\n  ${yellowb}WARNING${end}!" >&2
		printf "\n  Missing translations for %s\n\n" "$pofile" >&2
	done
done