| 1 | # this is the makefile for generating wxstd.pot message catalog file and |
| 2 | # building lang.mo files from the translated lang.po catalogs |
| 3 | |
| 4 | # this makefile may be invoked to build either wxstd.pot or any lang.mo |
| 5 | |
| 6 | # Autodetect the languages we support. Currently this relies on make |
| 7 | # being called with this dir as the cwd, but if we generate this file |
| 8 | # with configure an explicit path should be specified -- RL. |
| 9 | |
| 10 | WX_LINGUAS := $(shell ls *.po */*.po 2> /dev/null | sed 's/wxstd.pot//g' | sed 's/.po//g') |
| 11 | WX_LINGUAS_UPDATE := $(shell ls *.po 2> /dev/null | sed 's/wxstd.pot//g' | sed 's/.po//g') |
| 12 | |
| 13 | # the programs we use (TODO: use configure to detect them) |
| 14 | MSGFMT=msgfmt --verbose |
| 15 | MSGMERGE=msgmerge |
| 16 | XGETTEXT=xgettext |
| 17 | XARGS=xargs |
| 18 | |
| 19 | # common xgettext args: C++ syntax, use the specified macro names as markers |
| 20 | XGETTEXT_ARGS=-C -k_ -kwxPLURAL:1,2 -kwxTRANSLATE -s -j |
| 21 | |
| 22 | # implicit rules |
| 23 | %.mo: %.po |
| 24 | $(MSGFMT) -c -o $@ $< |
| 25 | |
| 26 | # a PO file must be updated from wxstd.pot to include new translations |
| 27 | # (but not manually maintained platform-specific files like msw/it.po) |
| 28 | $(foreach lang,$(WX_LINGUAS_UPDATE),$(lang).po): wxstd.pot |
| 29 | |
| 30 | %.po: |
| 31 | if [ -f $@ ]; then $(MSGMERGE) $@ wxstd.pot > $@.new && mv $@.new $@; else cp wxstd.pot $@; fi |
| 32 | |
| 33 | # note the extra -kAddToPopUp used for Scintilla files: this is a hack to |
| 34 | # translate the popup menu items |
| 35 | wxstd.pot: |
| 36 | touch $@ |
| 37 | find ../include -name "*.h" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -o wxstd.pot |
| 38 | find ../src -name "*.cpp" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -o wxstd.pot |
| 39 | find ../src/stc/scintilla/src -name "*.cxx" | $(XARGS) $(XGETTEXT) $(XGETTEXT_ARGS) -kAddToPopUp -o wxstd.pot |
| 40 | |
| 41 | allpo: force-update |
| 42 | @-for t in $(WX_LINGUAS_UPDATE); do $(MAKE) $$t.po; done |
| 43 | |
| 44 | allmo: |
| 45 | @for t in $(WX_LINGUAS); do $(MAKE) $$t.mo; done |
| 46 | |
| 47 | force-update: |
| 48 | $(RM) wxstd.pot |
| 49 | |
| 50 | # print out the percentage of the translated strings |
| 51 | stats: FORCE |
| 52 | @for i in $(WX_LINGUAS); do \ |
| 53 | x=`$(MSGFMT) -o /dev/null "$$i.po" 2>&1 | sed -e 's/[,\.]//g' \ |
| 54 | -e 's/\([0-9]\+\) translated messages\?/TR=\1/' \ |
| 55 | -e 's/\([0-9]\+\) fuzzy translations\?/FZ=\1/' \ |
| 56 | -e 's/\([0-9]\+\) untranslated messages\?/UT=\1/'`; \ |
| 57 | TR=0 FZ=0 UT=0; \ |
| 58 | eval $$x; \ |
| 59 | TOTAL=`expr $$TR + $$FZ + $$UT`; \ |
| 60 | echo "$$i.po `expr 100 "*" $$TR / $$TOTAL`% of $$TOTAL strings"; \ |
| 61 | done |
| 62 | |
| 63 | FORCE: |
| 64 | |
| 65 | .PHONY: allpo allmo force-update percentage FORCE |
| 66 | |
| 67 | # $Id$ |