diff --git a/dev-resources/Makefile.i18n b/dev-resources/Makefile.i18n index 8a068ac..5174650 100644 --- a/dev-resources/Makefile.i18n +++ b/dev-resources/Makefile.i18n @@ -4,12 +4,12 @@ # lein i18n init # -# The locale in which our messages are written, and for which we therefore -# have messages without any further effort -MESSAGE_LOCALE=en - # The name of the package into which the translations bundle will be placed BUNDLE=puppetlabs.http_client + +# The name of the POT file into which the gettext code strings (msgid) will be placed +POT_NAME=http-client.pot + # The list of names of packages covered by the translation bundle; # by default it contains a single package - the same where the translations # bundle itself is placed - but this can be overridden - preferably in @@ -17,7 +17,7 @@ BUNDLE=puppetlabs.http_client PACKAGES?=$(BUNDLE) LOCALES=$(basename $(notdir $(wildcard locales/*.po))) BUNDLE_DIR=$(subst .,/,$(BUNDLE)) -BUNDLE_FILES=$(patsubst %,resources/$(BUNDLE_DIR)/Messages_%.class,$(MESSAGE_LOCALE) $(LOCALES)) +BUNDLE_FILES=$(patsubst %,resources/$(BUNDLE_DIR)/Messages_%.class,$(LOCALES)) FIND_SOURCES=find src -name \*.clj # xgettext before 0.19 does not understand --add-location=file. Even CentOS # 7 ships with an older gettext. We will therefore generate full location @@ -27,7 +27,7 @@ LOC_OPT=$(shell xgettext --add-location=file -f - /dev/null 2>&1 && LOCALES_CLJ=resources/locales.clj define LOCALES_CLJ_CONTENTS { - :locales #{$(patsubst %,"%",$(MESSAGE_LOCALE) $(LOCALES))} + :locales #{$(patsubst %,"%",$(LOCALES))} :packages [$(patsubst %,"%",$(PACKAGES))] :bundle $(patsubst %,"%",$(BUNDLE).Messages) } @@ -37,10 +37,10 @@ export LOCALES_CLJ_CONTENTS i18n: msgfmt -# Update locales/messages.pot -update-pot: locales/messages.pot +# Update locales/.pot +update-pot: locales/$(POT_NAME) -locales/messages.pot: $(shell $(FIND_SOURCES)) | locales +locales/$(POT_NAME): $(shell $(FIND_SOURCES)) | locales @tmp=$$(mktemp $@.tmp.XXXX); \ $(FIND_SOURCES) \ | xgettext --from-code=UTF-8 --language=lisp \ @@ -68,29 +68,37 @@ locales/messages.pot: $(shell $(FIND_SOURCES)) | locales # Run msgfmt over all .po files to generate Java resource bundles # and create the locales.clj file -msgfmt: $(BUNDLE_FILES) $(LOCALES_CLJ) +msgfmt: $(BUNDLE_FILES) $(LOCALES_CLJ) clean-orphaned-bundles -# force rebuild of locales.clj if its contents is not the -# the desired one -ifneq ($(shell cat $(LOCALES_CLJ) 2> /dev/null),$(shell echo '$(subst ','\'',$(LOCALES_CLJ_CONTENTS))')) +# Force rebuild of locales.clj if its contents is not the the desired one. The +# shell echo is used to add a trailing newline to match the one from `cat` +ifneq ($(shell cat $(LOCALES_CLJ) 2> /dev/null),$(shell echo '$(LOCALES_CLJ_CONTENTS)')) .PHONY: $(LOCALES_CLJ) endif $(LOCALES_CLJ): | resources @echo "Writing $@" @echo "$$LOCALES_CLJ_CONTENTS" > $@ +# Remove every resource bundle that wasn't generated from a PO file. +# We do this because we used to generate the english bundle directly from the POT. +.PHONY: clean-orphaned-bundles +clean-orphaned-bundles: + @for bundle in resources/$(BUNDLE_DIR)/Messages_*.class; do \ + locale=$$(basename "$$bundle" | sed -E -e 's/\$$?1?\.class$$/_class/' | cut -d '_' -f 2;); \ + if [ ! -f "locales/$$locale.po" ]; then \ + rm "$$bundle"; \ + fi \ + done + resources/$(BUNDLE_DIR)/Messages_%.class: locales/%.po | resources msgfmt --java2 -d resources -r $(BUNDLE).Messages -l $(*F) $< -resources/$(BUNDLE_DIR)/Messages_$(MESSAGE_LOCALE).class: locales/messages.pot | resources - msgfmt --java2 -d resources -r $(BUNDLE).Messages -l $(MESSAGE_LOCALE) $< - # Use this to initialize translations. Updating the PO files is done # automatically through a CI job that utilizes the scripts in the project's # `bin` file, which themselves come from the `clj-i18n` project. locales/%.po: | locales @if [ ! -f $@ ]; then \ - touch $@ && msginit --no-translator -l $(*F) -o $@ -i $<; \ + touch $@ && msginit --no-translator -l $(*F) -o $@ -i locales/$(POT_NAME); \ fi resources locales: @@ -107,7 +115,7 @@ This Makefile assists in handling i18n related tasks during development. Files that need to be checked into source control are put into the locales/ directory. They are - locales/messages.pot - the POT file generated by 'make update-pot' + locales/$(POT_NAME) - the POT file generated by 'make update-pot' locales/$$LANG.po - the translations for $$LANG Only the $$LANG.po files should be edited manually; this is usually done by @@ -116,7 +124,7 @@ translators. You can use the following targets: i18n: refresh all the files in locales/ and recompile resources - update-pot: extract strings and update locales/messages.pot + update-pot: extract strings and update locales/$(POT_NAME) locales/LANG.po: create translations for LANG msgfmt: compile the translations into Java classes; this step is needed to make translations available to the Clojure code diff --git a/locales/eo.po b/locales/eo.po new file mode 100644 index 0000000..ec911dd --- /dev/null +++ b/locales/eo.po @@ -0,0 +1,22 @@ +# Esperanto translations for puppetlabs.http_client package. +# Copyright (C) 2017 Puppet +# This file is distributed under the same license as the puppetlabs.http_client package. +# Automatically generated, 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: puppetlabs.http_client \n" +"Report-Msgid-Bugs-To: docs@puppet.com\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/clj/puppetlabs/http/client/async.clj +msgid "Unsupported request method: {0}" +msgstr "" diff --git a/locales/messages.pot b/locales/http-client.pot similarity index 100% rename from locales/messages.pot rename to locales/http-client.pot diff --git a/project.clj b/project.clj index e2c3e75..d3538c0 100644 --- a/project.clj +++ b/project.clj @@ -5,7 +5,7 @@ :min-lein-version "2.7.1" - :parent-project {:coords [puppetlabs/clj-parent "0.3.3"] + :parent-project {:coords [puppetlabs/clj-parent "0.4.3"] :inherit [:managed-dependencies]} ;; Abort when version ranges or version conflicts are detected in @@ -54,4 +54,4 @@ :deploy-via :lein-deploy} :plugins [[lein-parent "0.3.1"] - [puppetlabs/i18n "0.6.0"]]) + [puppetlabs/i18n "0.7.1"]])