You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.1 KiB
126 lines
3.1 KiB
#!/bin/bash
|
|
function show_help
|
|
{
|
|
echo "$(basename $0) [--cleanup]"
|
|
echo ""
|
|
echo "Extract new strings from php files and regenerate po files."
|
|
echo ""
|
|
}
|
|
|
|
function run
|
|
{
|
|
local cleanup=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--help|-h|help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
|
|
--cleanup)
|
|
cleanup=true
|
|
;;
|
|
|
|
*)
|
|
die "unsupported parameter \"$1\"!"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
local workdir=$(realpath $(dirname $0)/..)
|
|
[[ -d "$workdir" ]] ||
|
|
die "cannot find \"$workdir\" working directory!"
|
|
cd "$workdir" || die
|
|
|
|
local pofiles=locale/*/LC_MESSAGES/frontend.po
|
|
local curpot=locale/en/LC_MESSAGES/frontend.pot
|
|
local oldpot=locale/old.pot
|
|
local newpot=locale/new.pot
|
|
local cur_msgids=locale/cur_msgids
|
|
local new_msgids=locale/new_msgids
|
|
local potlist=locale/POTFILES.in
|
|
|
|
# handle nonexistent potfile
|
|
mkdir -p $(dirname $curpot)
|
|
touch $curpot
|
|
|
|
# use xgettext on all php files
|
|
find . -type f -name '*.php' | sort -d -f > $potlist
|
|
|
|
# keyword "_n" is Zabbix frontend plural function
|
|
# keyword "_s" is Zabbix frontend placeholder function
|
|
# keyword "_x" is Zabbix frontend context function
|
|
# keyword "_xs" is Zabbix frontend context function
|
|
xgettext --files-from=$potlist \
|
|
--from-code=UTF-8 \
|
|
--output=$newpot \
|
|
--copyright-holder="Zabbix SIA" \
|
|
--no-wrap --sort-output \
|
|
--add-comments="GETTEXT:" \
|
|
--keyword=_n:1,2 \
|
|
--keyword=_s \
|
|
--keyword=_x:1,2c \
|
|
--keyword=_xs:1,2c \
|
|
--keyword=_xn:1,2,4c ||
|
|
die
|
|
|
|
rm $potlist
|
|
|
|
sed -i 's/^#, php-format/#, c-format/' $newpot || die
|
|
|
|
|
|
if $cleanup; then
|
|
mv $newpot $curpot
|
|
local num_msgids_not_removed=-1
|
|
else
|
|
# compute the number of strings that were repoved from php, but we still are keeping in po
|
|
grep msgid $curpot | sort > $cur_msgids
|
|
grep msgid $newpot | sort > $new_msgids
|
|
local num_msgids_not_removed=$(diff $cur_msgids $new_msgids | grep '^<' | wc -l)
|
|
[[ "$num_msgids_not_removed" =~ ^[0-9]+$ ]] ||
|
|
die "cannot compute number of msgids that were not removed!"
|
|
rm $cur_msgids $new_msgids
|
|
|
|
# make sure no string are removed or pontoon will die!
|
|
mv $curpot $oldpot
|
|
msgcat --use-first --no-wrap --sort-output $oldpot $newpot -o $curpot
|
|
rm $oldpot $newpot
|
|
fi
|
|
|
|
|
|
local translation=''
|
|
for translation in $pofiles; do
|
|
echo -n "$translation" | cut -d/ -f1
|
|
# fuzzy matching provides all kinds of interesting results, for example,
|
|
# "NTLM authentication" is translated as "LDAP-Authentifizierung" - thus
|
|
# it is disabled
|
|
msgmerge --no-fuzzy-matching --no-wrap --update --backup=off "$translation" "$curpot"
|
|
|
|
# dropping obsolete strings
|
|
msgattrib --no-obsolete --no-wrap --sort-output $translation -o $translation
|
|
done
|
|
|
|
for translation in $pofiles; do
|
|
echo -ne "$translation\t"
|
|
# setting output file to /dev/null so that unneeded messages.mo file
|
|
# is not created
|
|
msgfmt --use-fuzzy -c --statistics -o /dev/null $translation
|
|
done
|
|
|
|
if [[ $num_msgids_not_removed -gt 0 ]]; then
|
|
echo ""
|
|
echo "!! $num_msgids_not_removed strings are no longer present in php files, but have been preserved in po files !!"
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
function die
|
|
{
|
|
[[ -n "$@" ]] && >&2 echo -e "$@"
|
|
exit 1
|
|
}
|
|
|
|
run "$@"
|