From 2b6bdbfc400781e0326fbbbd84bb7ae524fdcfd6 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Mon, 30 Jun 2014 14:29:57 +0200 Subject: [PATCH] Build/update translations through autoconf/automake. --- Makefile.am | 9 +++++++ configure.ac | 37 ++++++++++++++++++++++++++++ src/i18n/Makefile | 42 -------------------------------- src/i18n/Makefile.am | 58 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 42 deletions(-) delete mode 100644 src/i18n/Makefile create mode 100644 src/i18n/Makefile.am diff --git a/Makefile.am b/Makefile.am index 5f1d2ca9..b99180b5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -104,6 +104,15 @@ jsbeautify: @if [ "$(JS_BEAUTIFY)" = "" ]; then echo "Command 'js-beautify' not found"; exit 1; fi $(FIND) static/ \( -path static/js/libs -o -path static/translation \) -prune -o -name "*.js" -exec $(JS_BEAUTIFY) -t -o {}.new {} \; -exec mv -f {}.new {} \; +build-i18n: + cd $(CURDIR)/src/i18n && $(MAKE) build + +extract-i18n: + cd $(CURDIR)/src/i18n && $(MAKE) extract + +update-i18n: + cd $(CURDIR)/src/i18n && $(MAKE) update + release: GOPATH = "$(DIST):$(VENDOR):$(CURDIR)" release: LDFLAGS = -X main.version $(PACKAGE_VERSION) -X main.defaultConfig $(CONFIG_PATH)/$(CONFIG_FILE) release: OUTPUT = $(DIST_BIN) diff --git a/configure.ac b/configure.ac index 999748db..b2b56815 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,15 @@ AC_PREREQ([2.53]) AC_INIT([spreed-webrtc],[unknown],[opensource@struktur.de],[],[https://github.com/strukturag/spreed-webrtc]) +I18N_VERSION="1.0" +I18N_PROJECT="Spreed WebRTC" +I18N_COPYRIGHT="struktur AG" +I18N_EMAIL="simon@struktur.de" +AC_SUBST(I18N_VERSION) +AC_SUBST(I18N_PROJECT) +AC_SUBST(I18N_COPYRIGHT) +AC_SUBST(I18N_EMAIL) + # minimum required versions GO_VERSION_MIN=1.1 NODEJS_VERSION_MIN=0.6.0 @@ -43,19 +52,23 @@ AC_PROG_MKDIR_P AC_PROG_INSTALL AC_PROG_GREP AC_PROG_SED +AC_PROG_AWK AC_SUBST(MKDIR_P) AC_SUBST(INSTALL) AC_SUBST(GREP) AC_SUBST(SED) +AC_SUBST(AWK) AC_PATH_PROGS([FIND],[find]) AC_PATH_PROGS([JSHINT],[jshint]) AC_PATH_PROGS([JS_BEAUTIFY],[js-beautify]) +AC_PATH_PROGS([PYTHON],[python2 python]) AC_SUBST(FIND) AC_SUBST(JSHINT) AC_SUBST(JS_BEAUTIFY) +AC_SUBST(PYTHON) AC_PATH_PROGS([GO],[go]) if test x"${GO}" == x"" ; then @@ -118,6 +131,29 @@ if test x"${AUTOPREFIXER}" == x"" ; then fi AC_SUBST(AUTOPREFIXER) +AC_PATH_PROGS([PYBABEL],[pybabel]) +if test x"${PYBABEL}" == x"" ; then + AC_MSG_WARN([Please install pybabel before trying to build i18n.]) +fi +AC_SUBST(PYBABEL) + +AC_PATH_PROGS([NPM],[npm]) +NODEJS_SUPPORT_PO2JSON=no +if test x"${NPM}" != x"" ; then + AC_MSG_CHECKING([for po2json support in node.js]) + found_po2json=`$NPM list --global 2> /dev/null | $GREP po2json` + if test x"${found_po2json}" == x"" ; then + AC_MSG_RESULT([not available]) + AC_MSG_WARN([Please install the node.js module po2json to build i18n.]) + else + AC_MSG_RESULT([ok]) + NODEJS_SUPPORT_PO2JSON=yes + fi +else + AC_MSG_WARN([Please install npm and the the node.js module po2json to build i18n.]) +fi +AC_SUBST(NODEJS_SUPPORT_PO2JSON) + VERSION=`dpkg-parsechangelog | sed -n 's/^Version: //p'` PACKAGE_VERSION="$VERSION" PACKAGE_STRING="$PACKAGE_NAME $PACKAGE_VERSION" @@ -127,5 +163,6 @@ AC_DEFINE_UNQUOTED(PACKAGE_STRING, ["$PACKAGE_STRING"], [Define to the full name AC_CONFIG_FILES([ Makefile src/styles/Makefile + src/i18n/Makefile ]) AC_OUTPUT diff --git a/src/i18n/Makefile b/src/i18n/Makefile deleted file mode 100644 index be56e541..00000000 --- a/src/i18n/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -VERSION := "1.0" -PROJECT := "Spreed WebRTC" -COPYRIGHT := "struktur AG" -EMAIL := "simon@struktur.de" -ROOT := "$(CURDIR)/../.." -LANGUAGES := $(shell find ./ -iname '*.po' -printf '%f\n' | sed 's/\.po$$//' | sed 's/\messages-//') - -# Tools -NODEJS := nodejs -PYBABEL := pybabel -NODE_PATH := /usr/local/lib/node_modules:/usr/lib/node_modules -PYTHON := python - -build: update - for lang in $(LANGUAGES) ; do \ - NODE_PATH=$(NODE_PATH) $(NODEJS) helpers/po2json messages-$$lang.po $(ROOT)/static/translation/messages-$$lang.json ; \ - done - $(PYTHON) helpers/languages.py >$(ROOT)/static/translation/languages.js - -extract: - $(PYBABEL) extract -F babel.cfg --no-default-keywords -k _n:1,2 -k _ \ - --no-location --project=$(PROJECT) --version=$(VERSION) \ - --copyright-holder=$(COPYRIGHT) --msgid-bugs-address=$(EMAIL) \ - -o messages.pot \ - $(ROOT)/html \ - $(ROOT)/static/partials \ - $(ROOT)/static/partials/page \ - $(ROOT)/static/js/ \ - $(ROOT)/static/js/controllers \ - $(ROOT)/static/js/directives \ - $(ROOT)/static/js/services \ - $(ROOT)/static/js/filters - -update: - for lang in $(LANGUAGES) ; do \ - l=$$lang ; \ - if echo $$l | grep -q -; then \ - l=`echo $$lang | awk '{split($$0,a,"-"); printf "%s_%s", a[1],toupper(a[2])}'` ; \ - fi ; \ - $(PYBABEL) update -l $$l -i messages.pot -o messages-$$lang.po ; \ - done - diff --git a/src/i18n/Makefile.am b/src/i18n/Makefile.am new file mode 100644 index 00000000..f05f49aa --- /dev/null +++ b/src/i18n/Makefile.am @@ -0,0 +1,58 @@ +# +# Spreed WebRTC. +# Copyright (C) 2013-2014 struktur AG +# +# This file is part of Spreed WebRTC. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +AUTOMAKE_OPTIONS = -Wno-portability + +ROOT=$(CURDIR)/../.. + +build: LANGUAGES = $(shell $(FIND) ./ -iname '*.po' -printf '%f\n' | $(SED) 's/\.po$$//' | $(SED) 's/\messages-//') +build: update + @if [ "$(NODEJS_SUPPORT_PO2JSON)" = "no" ]; then echo "Node.js module 'po2json' not found, required when building i18n"; exit 1; fi + @if [ "$(PYTHON)" = "" ]; then echo "Command 'python' not found, required when building i18n"; exit 1; fi + for lang in $(LANGUAGES) ; do \ + $(NODEJS) "$(CURDIR)/helpers/po2json" "$(CURDIR)/messages-$$lang.po" "$(ROOT)/static/translation/messages-$$lang.json" ; \ + done + $(PYTHON) "$(CURDIR)/helpers/languages.py" > "$(ROOT)/static/translation/languages.js" + +extract: + @if [ "$(PYBABEL)" = "" ]; then echo "Command 'pybabel' not found, required when extracting i18n"; exit 1; fi + $(PYBABEL) extract -F babel.cfg --no-default-keywords -k _n:1,2 -k _ \ + --no-location --project="$(I18N_PROJECT)" --version="$(I18N_VERSION)" \ + --copyright-holder="$(I18N_COPYRIGHT)" --msgid-bugs-address="$(I18N_EMAIL)" \ + -o "$(CURDIR)/messages.pot" \ + "$(ROOT)/html" \ + "$(ROOT)/static/partials" \ + "$(ROOT)/static/partials/page" \ + "$(ROOT)/static/js" \ + "$(ROOT)/static/js/controllers" \ + "$(ROOT)/static/js/directives" \ + "$(ROOT)/static/js/services" \ + "$(ROOT)/static/js/filters" + +update: LANGUAGES = $(shell $(FIND) ./ -iname '*.po' -printf '%f\n' | $(SED) 's/\.po$$//' | $(SED) 's/\messages-//') +update: + @if [ "$(PYBABEL)" = "" ]; then echo "Command 'pybabel' not found, required when updating i18n"; exit 1; fi + for lang in $(LANGUAGES) ; do \ + l=$$lang ; \ + if echo $$l | grep -q -; then \ + l=`echo $$lang | $(AWK) '{split($$0,a,"-"); printf "%s_%s", a[1],toupper(a[2])}'` ; \ + fi ; \ + $(PYBABEL) update -l $$l -i "$(CURDIR)/messages.pot" -o "$(CURDIR)/messages-$$lang.po" ; \ + done