jw-pkg/make/gettext.mk
Jan Lindemann e53032ab9c gettext.mk: Support GETTEXT_INPUT_EXTS
GETTEXT_INPUT_EXTS takes a whitespace separated list of extensions which are
subsequently passed to find -name to locate source files which are meant to be
run through xgettext.

The first argument to find, translateme, is not really meant to exist, it's
just there to allow adding multiple extensions preceded by -o in a $(foreach)
loop.

Signed-off-by: Jan Lindemann <jan@janware.com>
2025-02-22 08:41:13 +00:00

91 lines
2.9 KiB
Makefile

GETTEXT_LOCALE ?= $(notdir $(shell $(PWD)))
include $(JWBDIR)/make/defs.mk
include $(JWBDIR)/make/rules.mk
include $(JWBDIR)/make/dev-utils.mk
GETTEXT_PROJECT_PO ?= $(PROJECT).po
GETTEXT_PROJECT_POT ?= $(PROJECT).pot
GETTEXT_POT ?= $(wildcard *.pot)
GETTEXT_PO ?= $(patsubst %.pot,%.po,$(GETTEXT_POT))
GETTEXT_MO ?= $(patsubst %.po,%.mo,$(GETTEXT_PO))
GETTEXT_INPUT_DIRS ?= $(wildcard $(TOPDIR)/tools $(TOPDIR)/src $(TOPDIR)/conf)
GETTEXT_INPUT_EXTS ?= php cpp conf
GETTEXT_INPUT_FILES ?= $(foreach d,$(GETTEXT_INPUT_DIRS),\
$(shell find $d -name translate-me $(foreach ext,$(GETTEXT_INPUT_EXTS),-o -name '*.$(ext)')))
GETTEXT_KEYWORDS ?= htr ehtr $(GETTEXT_EXTRA_KEYWORDS)
GETTEXT_LINKS ?= LC_MESSAGES
all: $(GETTEXT_MO) | $(GETTEXT_LINKS)
clean: clean-mo
$(RM) -rf *~ .*.swp
install: install_MO
distclean: clean
test:
extract: $(GETTEXT_POT)
clean-mo:
$(RM) -f *.mo *.tmp
$(GETTEXT_PROJECT_POT): $(GETTEXT_INPUT_FILES)
xgettext --from-code=utf-8 --package-name $(PROJECT) --package-version $(DIST_VERSION) \
--default-domain $(PROJECT) $(addprefix -k,$(GETTEXT_KEYWORDS)) \
--output $@.tmp $(XGETTEXT_EXTRA_OPTS) $(GETTEXT_INPUT_FILES)
mv $@.tmp $@
init: $(GETTEXT_PROJECT_POT)
msginit --no-translator --locale $(GETTEXT_LOCALE) \
--output-file $(GETTEXT_PROJECT_PO).tmp --input $<
sed -i 's/charset=ASCII/charset=UTF-8/' $(GETTEXT_PROJECT_PO).tmp
mv $(GETTEXT_PROJECT_PO).tmp $(GETTEXT_PROJECT_PO)
merge: $(GETTEXT_PROJECT_POT)
msgmerge -v --lang $(GETTEXT_LOCALE) --output-file $(GETTEXT_PROJECT_PO).tmp \
$(wildcard $(GETTEXT_PROJECT_PO)) $<
mv $(GETTEXT_PROJECT_PO).tmp $(GETTEXT_PROJECT_PO)
merge-pot: $(GETTEXT_POT)
msgmerge -v --lang $(GETTEXT_LOCALE) --output-file $(GETTEXT_PROJECT_PO).tmp \
$(wildcard $(GETTEXT_PROJECT_PO)) $<
mv $(GETTEXT_PROJECT_PO).tmp $(GETTEXT_PROJECT_PO)
$(GETTEXT_PROJECT_PO): $(GETTEXT_POT)
msgcat --lang $(GETTEXT_LOCALE) --output-file $@.tmp $^
mv $@.tmp $@
edit: merge $(GETTEXT_PROJECT_POT)
poedit $(GETTEXT_PROJECT_PO)
%.mo: %.po
msgfmt --check --verbose --output-file $@.tmp $<
mv $@.tmp $@
LC_%:
ln -s . $@
clean.lc-links:
rm -f $(GETTEXT_LINKS)
clean: clean.lc-links
#msginit --no-translator --locale es_MX --output-file $(PROJECT)_spanish.po --input $(PROJECT).pot
#sed --in-place $(PROJECT)_spanish.po --expression = '/"hello, world!"/,/#: / s/""/"hola mundo"/'
#mkdir --parents ./es_MX.utf8/LC_MESSAGES
#msgfmt --check --verbose --output-file ./es_MX.utf8/LC_MESSAGES/$(PROJECT).mo $(PROJECT)_spanish.po
GETTEXT_TMP = $(patsubst %.php,%.htr,$(GETTEXT_PREPROCESS))
GETTEXT_INPUT_FILES += $(GETTEXT_TMP)
all: htr
clean: htr-tmp-clean
htr: $(GETTEXT_TMP)
htr-tmp-clean:
$(RM) -f *.htr
define copy_rule
./%.htr.tmp: $(1)/%.php
cp $$< $$@
endef
$(foreach d, $(HTR_SOURCE_DIRS), $(eval $(call copy_rule,$(d))))