freeipa/po/Makefile.hack.in
Alexander Bokovoy b4722f3917 Update translation infrastructure
1. Build po/ipa.pot every time we update PO files (each build)

2. Drop any rebuilt PO changes if the only difference is in the
   translation file's header in a timestamp or timestamp+bug report
   link.

3. Only apply the logic for dropping the changes if we are operating on
   a git tree checkout because there is no otherwise an easy way to
   detect the changes.

4. Hook strip-po target to the cleanup target to allow dropping unneeded
   translation changes automatically.

5. Finally, strip ipaclient/remote_plugins/* locations from the ipa.pot
   template. This saves us around 23,000 lines from the ipa.pot file and
   reduces visual clutter in the translation files.

This approach allows to avoid unneccesary commits because even when
there are no changes to translation files, po/ipa.pot header would be
updated with a new translation update timestamp.

Fixes: https://pagure.io/freeipa/issue/8159
Signed-off-by: Alexander Bokovoy <abokovoy@redhat.com>
Reviewed-By: Christian Heimes <cheimes@redhat.com>
2020-03-24 13:40:06 +01:00

58 lines
2.0 KiB
Makefile

# Auxiliary target for translation maintainer:
# Strip untranslated strings and comments with code lines from the po files
# to make them smaller before storage in SCM.
DISTFILES.common.extra3 = Makefile.hack.in
IPA_TEST_I18N = @top_srcdir@/ipatests/i18n.py
MSGATTRIB = @MSGATTRIB@
PYTHON = @PYTHON@
GIT_BRANCH = @GIT_BRANCH@
.PHONY: strip-po
strip-po:
grep -v '#: ipaclient/remote_plugins/' $(DOMAIN).pot > $(DOMAIN).pot.tmp || exit 1; \
mv $(DOMAIN).pot.tmp $(DOMAIN).pot || exit 1; \
for po_file in $(POFILES); do \
$(MSGATTRIB) --translated --no-fuzzy --no-location -s $$po_file > $$po_file.tmp || exit 1; \
mv $$po_file.tmp $$po_file || exit 1; \
if [ "$(GIT_BRANCH)" != "" ]; then \
export GIT_DIFF_PO_FILE=`git diff --numstat $$po_file | cut -f1,2 | tr '\t' ,` || :; \
if [ "$$GIT_DIFF_PO_FILE" = "2,2" -o "$$GIT_DIFF_PO_FILE" = "1,1" ]; then \
echo "No translation changes in $$po_file, restore the original"; \
git checkout -q -f $$po_file; \
fi; \
fi; \
done
if [ "$(GIT_BRANCH)" != "" ]; then \
export GIT_DIFF_IPA_POT=`git diff --numstat $(DOMAIN).pot | cut -f1,2 | tr '\t' ,` || :; \
if [ "$$GIT_DIFF_IPA_POT" = "2,2" -o "$$GIT_DIFF_IPA_POT" = "1,1" ]; then \
echo "No changes in $(DOMAIN).pot, restore the original"; \
git checkout -q -f $(DOMAIN).pot; \
fi; \
fi
export FILES_TO_REMOVE=`find $(srcdir) -name '*.po' -empty` || exit 1; \
if [ "$$FILES_TO_REMOVE" != "" ]; then \
rm -v $$FILES_TO_REMOVE || exit 1; \
echo; echo Please remove the deleted files from LINGUAS!; echo; \
fi
clean: strip-po mostlyclean
rm -f *~
all: $(DOMAIN).pot strip-po
# linters
test-gettext: $(DOMAIN).pot strip-po
$(PYTHON) $(IPA_TEST_I18N) --test-gettext
validate-pot: $(DOMAIN).pot strip-po
$(PYTHON) $(IPA_TEST_I18N) --show-strings --validate-pot $(DOMAIN).pot
validate-po: $(DOMAIN).pot strip-po
$(PYTHON) $(IPA_TEST_I18N) --show-strings --validate-po $(POFILES)
# forcefully re-generate .pot file and test it
validate-src-strings: $(DOMAIN).pot-update strip-po
$(MAKE) validate-pot