Change the `gettext` grep to also include a possible `g_dpgettext2`. This also changes the grep command to "normal" (extended) regex, which is perhaps easier to read without all the escaping backslashes.
88 lines
2.2 KiB
Bash
Executable file
88 lines
2.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
srcdirs="panels shell subprojects/gvc"
|
|
uidirs=$srcdirs
|
|
desktopdirs=$srcdirs
|
|
policydirs=$srcdirs
|
|
xmldirs=$srcdirs
|
|
|
|
# find source files that contain gettext functions with literal or GETTEXT_PACKAGE argument
|
|
files=$(grep -ElRs --include='*.c' 'gettext2? ?\(("|GETTEXT_PACKAGE,)' $srcdirs)
|
|
|
|
# find source files that contain gettext macros
|
|
files="$files "$(grep -lRs --include='*.c' --include='*.h' '[^I_)]_(' $srcdirs)
|
|
|
|
# find ui files that contain translatable string
|
|
files="$files "$(grep -lRis --include='*.ui' 'translatable="[ty1]' $uidirs)
|
|
|
|
# find .desktop files
|
|
files="$files "$(find $desktopdirs -name '*.desktop*')
|
|
|
|
# find .policy files
|
|
files="$files "$(find $policydirs -name '*.policy*')
|
|
|
|
# find .xml.in and .gschema.xml files
|
|
files="$files "$(find $xmldirs -not -name '*.gresource.xml*' \
|
|
-name '*.xml.in*' -o \
|
|
-name '*.gschema.xml')
|
|
|
|
# filter out excluded files
|
|
if [ -f po/POTFILES.skip ]; then
|
|
files=$(for f in $files; do
|
|
! grep -q "^$f" po/POTFILES.skip && echo "$f"
|
|
done)
|
|
fi
|
|
|
|
# find those that aren't listed in POTFILES.in
|
|
missing=$(for f in $files; do
|
|
! grep -q "^$f" po/POTFILES.in && echo "$f"
|
|
done)
|
|
|
|
# find those that are listed in POTFILES.in but do not contain translatable strings
|
|
invalid=$(while IFS= read -r f; do
|
|
! grep -q "$f" <<< "$files" && echo "$f"
|
|
done < <(grep '^[^#]' po/POTFILES.in))
|
|
|
|
# find out if POTFILES.in is sorted correctly, ignoring empty lines
|
|
sorted=$(grep '^[^#]' po/POTFILES.in | \
|
|
LC_ALL=en_US.UTF-8 sort -cu 2>&1 >/dev/null | \
|
|
awk -F ': *' '{print $5}')
|
|
|
|
if [ ${#missing} -eq 0 ] && [ ${#invalid} -eq 0 ] && [ ${#sorted} -eq 0 ]; then
|
|
exit 0
|
|
fi
|
|
|
|
if [ ${#missing} -ne 0 ]; then
|
|
cat >&2 << EOT
|
|
|
|
The following files are missing from po/POTFILES.in or po/POTFILES.skip:
|
|
|
|
EOT
|
|
for f in $missing; do
|
|
echo " $f" >&2
|
|
done
|
|
fi
|
|
|
|
if [ ${#invalid} -ne 0 ]; then
|
|
cat >&2 << EOT
|
|
|
|
The following files are in po/POTFILES.in but are missing or not translatable:
|
|
|
|
EOT
|
|
for f in $invalid; do
|
|
echo " $f" >&2
|
|
done
|
|
fi
|
|
|
|
if [ ${#sorted} -ne 0 ]; then
|
|
cat >&2 << EOT
|
|
|
|
The following file is not sorted properly in po/POTFILES.in:
|
|
|
|
EOT
|
|
echo " $sorted" >&2
|
|
fi
|
|
|
|
echo >&2
|
|
|
|
exit 1
|