[tor-launcher/master] Improve how we import, bundle and register translations.
commit 951b654f29868d8b52c1c8a0713346678a64fde6 Author: Tails developers <amnesia@boum.org> Date: Wed Mar 12 15:10:05 2014 +0100 Improve how we import, bundle and register translations. Previously chrome.manifest defined locales for pretty much every existing locale. Many of these were out-of-date (lacking entities, which results in fatal XUL errors) or completely absent (also fatal). Instead of maintaining a static list of which locales to register we generate it programatically, making sure that only those that seem complete are included. We also make sure to register "en-US" since it's the hardcoded fallback for unregistered locales. Note that it's currently called "en" in the Transifex translation repos. The BUNDLE_LOCALES environment variable can be set to specify a list of which locales to bundle ("en-US" is always implied). If it's empty we optimistically try to include all locales. For this reason import-translations.sh imports all translations from Transifex, and it's important to run it before packaging since up-to-date translations are necessary to avoid the issues mentioned above. --- Makefile | 43 +++++++++-- chrome.manifest.in | 16 +++++ localization/import-translations.sh | 41 +++++------ src/chrome.manifest | 136 ----------------------------------- 4 files changed, 73 insertions(+), 163 deletions(-) diff --git a/Makefile b/Makefile index 3d3a857..b698f4e 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,7 @@ VERSION:=`grep em:version src/install.rdf | sed -e 's/[<>]/ /g' | cut -f3` XPI_NAME:=$(shell echo "$(EXT_NAME)-$(VERSION).xpi") STANDALONE_NAME=$(EXT_NAME)-standalone STANDALONE_TARBALL=$(shell echo "$(STANDALONE_NAME)-$(VERSION).tar.gz") +REQUIRED_TRANSLATION_FILES=$(shell ls -1 src/chrome/locale/en/) AVAIL_TARGETS=help package standalone clean @@ -25,15 +26,49 @@ help: pkg-prepare: clean @mkdir -p pkg + $(eval TMP="$(shell mktemp -d "/tmp/$(EXT_NAME).XXXXXX")") + @cp -a "src" "$(TMP)/$(EXT_NAME)" + @cp -a chrome.manifest.in "$(TMP)/$(EXT_NAME)"/chrome.manifest + @mv "$(TMP)/$(EXT_NAME)"/chrome/locale/en \ + "$(TMP)/$(EXT_NAME)"/chrome/locale/en-US + @for d in "$(TMP)/$(EXT_NAME)"/chrome/locale/*; do \ + if [ "`basename "$${d}"`" = "en-US" ]; then \ + continue; \ + fi; \ + for f in $(REQUIRED_TRANSLATION_FILES); do \ + if [ ! -e "$${d}/$${f}" ] || \ + ( \ + [ -n "$(BUNDLE_LOCALES)" ] && \ + ! echo $(BUNDLE_LOCALES) | grep -qw `basename "$${d}"` \ + ); then \ + rm -rf "$${d}"; \ + break; \ + fi \ + done \ + done + @for l in $(BUNDLE_LOCALES); do \ + if [ ! -d "$(TMP)/$(EXT_NAME)"/chrome/locale/"$${l}" ]; then \ + echo "Requested locale '$${l}' is missing or incomplete" >&2; \ + exit 1; \ + fi \ + done + @for d in "$(TMP)/$(EXT_NAME)"/chrome/locale/*; do \ + locale="`basename $${d}`"; \ + echo "locale torlauncher $${locale} chrome/locale/$${locale}/" >> \ + "$(TMP)/$(EXT_NAME)"/chrome.manifest; \ + done package: pkg-prepare - @(cd src; $(ZIP) -X9r "../pkg/$(XPI_NAME)" ./ -x "*.diff") + @( \ + CURDIR="$(shell pwd)"; \ + cd "$(TMP)/$(EXT_NAME)"; \ + $(ZIP) -X9r "$(CURDIR)/pkg/$(XPI_NAME)" ./ -x "*.diff" \ + ) + @rm -rf "$(TMP)" @echo "Created package pkg/$(XPI_NAME)" standalone: pkg-prepare - $(eval TMP="$(shell mktemp -d "/tmp/$(STANDALONE_NAME).XXXXXX")") - @mkdir -p "$(TMP)/$(STANDALONE_NAME)" - @cp -a "src/"* "$(TMP)/$(STANDALONE_NAME)" + @mv "$(TMP)/$(EXT_NAME)" "$(TMP)/$(STANDALONE_NAME)" @cp application.ini.in "$(TMP)/$(STANDALONE_NAME)/application.ini" @sed -i -e "s/__VERSION__/$(VERSION)/" \ -e "s/__DATE__/`date '+%Y%m%d'`/" \ diff --git a/chrome.manifest.in b/chrome.manifest.in new file mode 100644 index 0000000..a869569 --- /dev/null +++ b/chrome.manifest.in @@ -0,0 +1,16 @@ +### Copyright (c) 2013, The Tor Project, Inc. +### See LICENSE for licensing information. + +content torlauncher chrome/content/ + +skin torlauncher classic/1.0 chrome/skin/ + +resource torlauncher ./ + +# Firefox 4-style component registration +component {4F476361-23FB-43EF-A427-B36A14D3208E} components/tl-protocol.js +contract @torproject.org/torlauncher-protocol-service;1 {4F476361-23FB-43EF-A427-B36A14D3208E} + +component {FE7B4CAF-BCF4-4848-8BFF-EFA66C9AFDA1} components/tl-process.js +contract @torproject.org/torlauncher-process-service;1 {FE7B4CAF-BCF4-4848-8BFF-EFA66C9AFDA1} +category profile-after-change TorProcessService @torproject.org/torlauncher-process-service;1 diff --git a/localization/import-translations.sh b/localization/import-translations.sh index 32ea177..0c81aa6 100755 --- a/localization/import-translations.sh +++ b/localization/import-translations.sh @@ -1,13 +1,10 @@ #!/bin/sh -BUNDLE_LOCALES="ar de es fa fr it ko nl pl pt ru tr vi zh-CN" - -# XXX: Basque (eu) by request in #10687. -# This is not used for official builds, but should remain -# so Basque XPIs can be build independently. We can do -# this for other languages too, if anyone requests this -# and translations are available. -BUNDLE_LOCALES="$BUNDLE_LOCALES eu ja sv" +TRANSLATION_BRANCHES=" +tor-launcher-network-settings +tor-launcher-progress +tor-launcher-properties +" if [ -d translation ]; then @@ -19,20 +16,18 @@ else fi cd translation -for i in $BUNDLE_LOCALES +for branch in ${TRANSLATION_BRANCHES} do - UL="`echo $i|tr - _`" - mkdir -p ../../src/chrome/locale/$i/ - - git checkout tor-launcher-network-settings - git merge origin/tor-launcher-network-settings - cp $UL/network-settings.dtd ../../src/chrome/locale/$i/ - - git checkout tor-launcher-progress - git merge origin/tor-launcher-progress - cp $UL/progress.dtd ../../src/chrome/locale/$i/ - - git checkout tor-launcher-properties - git merge origin/tor-launcher-properties - cp $UL/torlauncher.properties ../../src/chrome/locale/$i/ + git checkout ${branch} + git merge origin/${branch} + for locale in * + do + if [ ! -d "${locale}" ] + then + continue + fi + target="../../src/chrome/locale/$(echo "${locale}" | tr _ -)" + mkdir -p "${target}" + cp -f "${locale}"/* "${target}"/ + done done diff --git a/src/chrome.manifest b/src/chrome.manifest deleted file mode 100644 index 786bae8..0000000 --- a/src/chrome.manifest +++ /dev/null @@ -1,136 +0,0 @@ -### Copyright (c) 2013, The Tor Project, Inc. -### See LICENSE for licensing information. - -content torlauncher chrome/content/ - -locale torlauncher af chrome/locale/af/ -locale torlauncher ak chrome/locale/ak/ -locale torlauncher am chrome/locale/am/ -locale torlauncher ar chrome/locale/ar/ -locale torlauncher arn chrome/locale/arn/ -locale torlauncher ast chrome/locale/ast/ -locale torlauncher az chrome/locale/az/ -locale torlauncher be chrome/locale/be/ -locale torlauncher bg chrome/locale/bg/ -locale torlauncher bms chrome/locale/bms/ -locale torlauncher bn chrome/locale/bn/ -locale torlauncher bn-IN chrome/locale/bn-IN/ -locale torlauncher bo chrome/locale/bo/ -locale torlauncher br chrome/locale/br/ -locale torlauncher bs chrome/locale/bs/ -locale torlauncher ca chrome/locale/ca/ -locale torlauncher cs chrome/locale/cs/ -locale torlauncher csb chrome/locale/csb/ -locale torlauncher cy chrome/locale/cy/ -locale torlauncher da chrome/locale/da/ -locale torlauncher de chrome/locale/de/ -locale torlauncher dz chrome/locale/dz/ -locale torlauncher el chrome/locale/el/ -locale torlauncher en chrome/locale/en/ -locale torlauncher eo chrome/locale/eo/ -locale torlauncher es chrome/locale/es/ -locale torlauncher et chrome/locale/et/ -locale torlauncher eu chrome/locale/eu/ -locale torlauncher fa chrome/locale/fa/ -locale torlauncher fi chrome/locale/fi/ -locale torlauncher fil chrome/locale/fil/ -locale torlauncher fo chrome/locale/fo/ -locale torlauncher fr chrome/locale/fr/ -locale torlauncher fur chrome/locale/fur/ -locale torlauncher fy chrome/locale/fy/ -locale torlauncher ga chrome/locale/ga/ -locale torlauncher gl chrome/locale/gl/ -locale torlauncher gu chrome/locale/gu/ -locale torlauncher gun chrome/locale/gun/ -locale torlauncher ha chrome/locale/ha/ -locale torlauncher he chrome/locale/he/ -locale torlauncher hi chrome/locale/hi/ -locale torlauncher hr chrome/locale/hr/ -locale torlauncher ht chrome/locale/ht/ -locale torlauncher hu chrome/locale/hu/ -locale torlauncher hy chrome/locale/hy/ -locale torlauncher id chrome/locale/id/ -locale torlauncher is chrome/locale/is/ -locale torlauncher it chrome/locale/it/ -locale torlauncher ja chrome/locale/ja/ -locale torlauncher jv chrome/locale/jv/ -locale torlauncher ka chrome/locale/ka/ -locale torlauncher km chrome/locale/km/ -locale torlauncher kn chrome/locale/kn/ -locale torlauncher ko chrome/locale/ko/ -locale torlauncher ku chrome/locale/ku/ -locale torlauncher kw chrome/locale/kw/ -locale torlauncher ky chrome/locale/ky/ -locale torlauncher lb chrome/locale/lb/ -locale torlauncher lg chrome/locale/lg/ -locale torlauncher ln chrome/locale/ln/ -locale torlauncher lo chrome/locale/lo/ -locale torlauncher lt chrome/locale/lt/ -locale torlauncher lv chrome/locale/lv/ -locale torlauncher mg chrome/locale/mg/ -locale torlauncher mi chrome/locale/mi/ -locale torlauncher mk chrome/locale/mk/ -locale torlauncher ml chrome/locale/ml/ -locale torlauncher mn chrome/locale/mn/ -locale torlauncher mr chrome/locale/mr/ -locale torlauncher ms chrome/locale/ms/ -locale torlauncher mt chrome/locale/mt/ -locale torlauncher my chrome/locale/my/ -locale torlauncher nah chrome/locale/nah/ -locale torlauncher nap chrome/locale/nap/ -locale torlauncher nb chrome/locale/nb/ -locale torlauncher ne chrome/locale/ne/ -locale torlauncher nl chrome/locale/nl/ -locale torlauncher nn chrome/locale/nn/ -locale torlauncher nso chrome/locale/nso/ -locale torlauncher oc chrome/locale/oc/ -locale torlauncher or chrome/locale/or/ -locale torlauncher pa chrome/locale/pa/ -locale torlauncher pap chrome/locale/pap/ -locale torlauncher pl chrome/locale/pl/ -locale torlauncher pms chrome/locale/pms/ -locale torlauncher ps chrome/locale/ps/ -locale torlauncher pt chrome/locale/pt/ -locale torlauncher pt-BR chrome/locale/pt-BR/ -locale torlauncher ro chrome/locale/ro/ -locale torlauncher ru chrome/locale/ru/ -locale torlauncher sco chrome/locale/sco/ -locale torlauncher sk chrome/locale/sk/ -locale torlauncher sl chrome/locale/sl/ -locale torlauncher so chrome/locale/so/ -locale torlauncher son chrome/locale/son/ -locale torlauncher sq chrome/locale/sq/ -locale torlauncher sr chrome/locale/sr/ -locale torlauncher st chrome/locale/st/ -locale torlauncher su chrome/locale/su/ -locale torlauncher sv chrome/locale/sv/ -locale torlauncher sw chrome/locale/sw/ -locale torlauncher ta chrome/locale/ta/ -locale torlauncher te chrome/locale/te/ -locale torlauncher tg chrome/locale/tg/ -locale torlauncher th chrome/locale/th/ -locale torlauncher ti chrome/locale/ti/ -locale torlauncher tk chrome/locale/tk/ -locale torlauncher tr chrome/locale/tr/ -locale torlauncher uk chrome/locale/uk/ -locale torlauncher ur chrome/locale/ur/ -locale torlauncher ve chrome/locale/ve/ -locale torlauncher vi chrome/locale/vi/ -locale torlauncher wa chrome/locale/wa/ -locale torlauncher wo chrome/locale/wo/ -locale torlauncher zh-CN chrome/locale/zh-CN/ -locale torlauncher zh-HK chrome/locale/zh-HK/ -locale torlauncher zh-TW chrome/locale/zh-TW/ -locale torlauncher zu chrome/locale/zu/ - -skin torlauncher classic/1.0 chrome/skin/ - -resource torlauncher ./ - -# Firefox 4-style component registration -component {4F476361-23FB-43EF-A427-B36A14D3208E} components/tl-protocol.js -contract @torproject.org/torlauncher-protocol-service;1 {4F476361-23FB-43EF-A427-B36A14D3208E} - -component {FE7B4CAF-BCF4-4848-8BFF-EFA66C9AFDA1} components/tl-process.js -contract @torproject.org/torlauncher-process-service;1 {FE7B4CAF-BCF4-4848-8BFF-EFA66C9AFDA1} -category profile-after-change TorProcessService @torproject.org/torlauncher-process-service;1
participants (1)
-
mikeperry@torproject.org