Description: Switch to using gettext to find localized names for locations, instead of shipping very large locale-specific XML files with lots of duplicate information. Author: ? only in patch2: unchanged: Index: libgweather-3.5.1/configure.ac =================================================================== --- libgweather-3.5.1.orig/configure.ac 2012-06-25 03:23:11.000000000 +1200 +++ libgweather-3.5.1/configure.ac 2012-07-05 10:27:51.457384292 +1200 @@ -46,6 +46,10 @@ LT_INIT([dlopen win32-dll disable-static]) LT_LIB_M +dnl IT_PROG_INTLTOOL does this for us in the case of the po/ subdir, but we're on our own for po-locations +AC_OUTPUT_COMMANDS([sed -e "/POTFILES =/r po/POTFILES" po-locations/Makefile.in > po-locations/Makefile]) +IT_PO_SUBDIR([po-locations]) + PKG_PROG_PKG_CONFIG([0.19]) AC_PROG_CC @@ -53,13 +57,6 @@ GLIB_GSETTINGS -AC_ARG_ENABLE(all-translations-in-one-xml, - [AS_HELP_STRING([--enable-all-translations-in-one-xml], - [Put all translations in a big Locations.xml file (slow to parse)])], - [enable_big_xml=yes], - [enable_big_xml=no]) -AM_CONDITIONAL(USE_ONE_BIG_XML, test "x$enable_big_xml" = "xyes") - AC_ARG_ENABLE(locations-compression, [AS_HELP_STRING([--enable-locations-compression], [Compress Locations.xml files])], @@ -183,7 +180,7 @@ Makefile doc/Makefile po/Makefile.in -po-locations/Makefile +po-locations/Makefile.in libgweather/Makefile libgweather/gweather-3.0.pc libgweather/gweather-3.0-uninstalled.pc @@ -192,12 +189,6 @@ ]) AC_OUTPUT -if test "x$enable_big_xml" = "xyes"; then - LOCATIONS_XML_TRANSLATIONS="one big file" -else - LOCATIONS_XML_TRANSLATIONS="one file per translation" -fi - dnl *************************************************************************** dnl *** Display Summary *** dnl *************************************************************************** @@ -208,6 +199,4 @@ Source code location: ${srcdir} Compiler: ${CC} Introspection support: ${found_introspection} - Locations.xml translations: ${LOCATIONS_XML_TRANSLATIONS} - Locations.xml compression: ${enable_locations_compression} " >&2 Index: libgweather-3.5.1/data/Makefile.am =================================================================== --- libgweather-3.5.1.orig/data/Makefile.am 2012-06-06 04:07:53.000000000 +1200 +++ libgweather-3.5.1/data/Makefile.am 2012-07-05 10:27:51.461384292 +1200 @@ -4,61 +4,21 @@ libgweatherlocationsdir = $(pkgdatadir) libgweatherlocations_in_files = Locations.xml.in -if USE_ONE_BIG_XML - -LOCATIONS_STAMP = - -libgweatherlocations_DATA = $(libgweatherlocations_in_files:.xml.in=.xml$(COMPRESS_EXT)) - -%.xml$(COMPRESS_EXT): %.xml.in $(wildcard $(top_srcdir)/po-locations/*.po) - $(AM_V_GEN)LC_ALL=C $(INTLTOOL_MERGE) -x -u -c $(top_builddir)/po-locations/.intltool-merge-cache $(top_srcdir)/po-locations $< `echo $@ | sed "s/.xml$(COMPRESS_EXT)/.xml/"` && \ - if test "x$(COMPRESS_EXT)" = "x.gz"; then \ - gzip --force `echo $@ | sed "s/.xml$(COMPRESS_EXT)/.xml/"`; \ - fi - -else # USE_ONE_BIG_XML - LOCATIONS_STAMP = stamp-Locations.xml -PO_LOCATIONS = $(shell if test -n "$(LINGUAS)"; then for lang in $(LINGUAS); do if test -f "$(top_srcdir)/po-locations/$$lang.po"; then echo "$(top_srcdir)/po-locations/$$lang.po "; fi; done; else for pofile in $(top_srcdir)/po-locations/*.po; do echo $$pofile; done; fi) - # Helper variable -libgweatherlocations_data = $(libgweatherlocations_in_files:.xml.in=.xml) - -libgweatherlocations_DATA = $(shell echo $(PO_LOCATIONS) | sed "s|$(top_srcdir)/po-locations/|Locations.|g;s|\.po|.xml$(COMPRESS_EXT)|g") $(libgweatherlocations_data)$(COMPRESS_EXT) +libgweatherlocations_DATA = $(libgweatherlocations_in_files:.xml.in=.xml) # We need this step so that we merge all the make Locations.xy.xml destinations # into one unique destination. This makes -j2 work. (Else, we end up with # multiple and conflicting calls to intltool-merge) $(libgweatherlocations_DATA): $(LOCATIONS_STAMP) -$(LOCATIONS_STAMP): $(libgweatherlocations_in_files) $(PO_LOCATIONS) Makefile - $(AM_V_at)LC_ALL=C $(INTLTOOL_MERGE) --multiple-output --xml-style --utf8 --cache=$(top_builddir)/po-locations/.intltool-merge-cache $(top_srcdir)/po-locations $< $(libgweatherlocations_data) && \ - for pofile in $(PO_LOCATIONS); do \ - locale=`echo $$pofile | sed "s;$(top_srcdir)/po-locations/\(.*\)\.po;\1;"`; \ - xmllint --noblanks -o Locations.$$locale.xml $$locale/$(libgweatherlocations_data); \ - rm -f $$locale/$(libgweatherlocations_data); \ - test -d $$locale && rmdir $$locale; \ - if test "x$(COMPRESS_EXT)" = "x.gz"; then \ - gzip --force Locations.$$locale.xml; \ - fi; \ - done && \ - xmllint --noblanks -o Locations.xml C/$(libgweatherlocations_data) && \ - rm -f C/$(libgweatherlocations_data) && \ - test -d C && rmdir C && \ - if test "x$(COMPRESS_EXT)" = "x.gz"; then \ - gzip --force Locations.xml; \ - fi && \ - touch $@ - -endif # USE_ONE_BIG_XML - -### Locations.xml.in rebuild -rebuild-locations: locationdb.sqlite update-locations.py - $(AM_V_GEN)($(srcdir)/update-locations.py > Locations.xml.in.new && mv Locations.xml.in.new Locations.xml.in) || rm -f Locations.xml.in.new - -locationdb.sqlite: build-locationdb.pl major-cities.txt sources/nsd_cccc.txt sources/POP_PLACES.txt sources/US_CONCISE.txt sources/geonames_dd_dms_date_*.txt city-fixups.pl station-fixups.pl - $(AM_V_GEN)$(srcdir)/build-locationdb.pl +$(LOCATIONS_STAMP): $(libgweatherlocations_in_files) Makefile + LC_ALL=C $(INTLTOOL_MERGE) --multiple-output --xml-style --utf8 --cache=$(top_builddir)/po-locations/.intltool-merge-cache /dev/null $< $(libgweatherlocations_DATA) && \ + xmllint --noblanks -o Locations.xml C/$(libgweatherlocations_DATA) && \ + rm -f C/$(libgweatherlocations_DATA) && \ + touch $@ check: xmllint --valid --noout $(top_srcdir)/data/Locations.xml.in Index: libgweather-3.5.1/libgweather/gweather-location.c =================================================================== --- libgweather-3.5.1.orig/libgweather/gweather-location.c 2012-06-15 08:15:23.000000000 +1200 +++ libgweather-3.5.1/libgweather/gweather-location.c 2012-07-05 10:27:51.461384292 +1200 @@ -22,11 +22,14 @@ #include #endif +#include "config.h" + #include #include #include #include #include +#include #define GWEATHER_I_KNOW_THIS_IS_UNSTABLE #include "gweather-location.h" @@ -157,10 +160,20 @@ tagname = (const char *) xmlTextReaderConstName (parser->xml); if (!strcmp (tagname, "name") && !loc->name) { - value = gweather_parser_get_localized_value (parser); + char *context = NULL; + context = xmlTextReaderGetAttribute(parser->xml,"msgctxt"); + + value = gweather_parser_get_value (parser); if (!value) goto error_out; - loc->name = g_strdup (value); + + if (context != NULL) { + loc->name = g_strdup (g_dpgettext2(GETTEXT_PACKAGE "-locations", context, value)); + xmlFree (context); + } + else + loc->name = g_strdup (dgettext(GETTEXT_PACKAGE "-locations",value)); + xmlFree (value); normalized = g_utf8_normalize (loc->name, -1, G_NORMALIZE_ALL); loc->sort_name = g_utf8_casefold (normalized, -1); Index: libgweather-3.5.1/libgweather/gweather-timezone.c =================================================================== --- libgweather-3.5.1.orig/libgweather/gweather-timezone.c 2011-11-16 01:03:32.000000000 +1300 +++ libgweather-3.5.1/libgweather/gweather-timezone.c 2012-07-05 10:27:51.461384292 +1200 @@ -23,6 +23,7 @@ #endif #include +#include #define GWEATHER_I_KNOW_THIS_IS_UNSTABLE #include "gweather-timezone.h" @@ -154,7 +155,7 @@ parse_timezone (GWeatherParser *parser) { GWeatherTimezone *zone = NULL; - char *id = NULL, *name = NULL; + char *id = NULL, *name = NULL, *context = NULL; int offset = 0, dst_offset = 0; gboolean has_dst = FALSE; @@ -177,27 +178,34 @@ continue; } - if (!strcmp ((const char *) xmlTextReaderConstName (parser->xml), "name")) - name = gweather_parser_get_localized_value (parser); + if (!strcmp ((const char *) xmlTextReaderConstName (parser->xml), "name")) { + context = xmlTextReaderGetAttribute(parser->xml,"msgctxt"); + name = gweather_parser_get_value (parser); + } else { if (xmlTextReaderNext (parser->xml) != 1) break; } } } - + if (parse_tzdata (id, parser->year_start, parser->year_end, &offset, &has_dst, &dst_offset)) { zone = g_slice_new0 (GWeatherTimezone); zone->ref_count = 1; zone->id = g_strdup (id); - zone->name = g_strdup (name); + if (context != NULL) + zone->name = g_strdup (g_dpgettext2(GETTEXT_PACKAGE "-locations", context, name)); + else + zone->name = g_strdup (dgettext(GETTEXT_PACKAGE "-locations",name)); zone->offset = offset; zone->has_dst = has_dst; zone->dst_offset = dst_offset; } xmlFree (id); + if (context) + xmlFree (context); if (name) xmlFree (name); Index: libgweather-3.5.1/po-locations/LINGUAS =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ libgweather-3.5.1/po-locations/LINGUAS 2012-07-05 10:27:51.461384292 +1200 @@ -0,0 +1,78 @@ +ang +ar +as +az +be +be@latin +bg +bn_IN +bn +bs +ca +cs +cy +da +de +dz +el +en_CA +en_GB +es +et +eu +fa +fi +fr +ga +gl +gu +he +hi +hr +hu +id +it +ja +ka +kn +ko +ku +ky +lt +lv +mai +mg +mk +ml +mn +mr +ms +nb +ne +nl +nn +oc +or +pa +pl +pt_BR +pt +ro +ru +rw +si +sk +sl +sq +sr@latin +sr +sv +ta +te +th +tr +uk +vi +zh_CN +zh_HK +zh_TW Index: libgweather-3.5.1/po-locations/Makefile.in.in =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ libgweather-3.5.1/po-locations/Makefile.in.in 2012-07-05 10:27:51.461384292 +1200 @@ -0,0 +1,217 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper +# Copyright (C) 2004-2008 Rodney Dawes +# +# This file may be copied and used freely without restrictions. It may +# be used in projects which are not available under a GNU Public License, +# but which still want to provide support for the GNU gettext functionality. +# +# - Modified by Owen Taylor to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize +# +# - Modified by Rodney Dawes for use with intltool +# +# We have the following line for use by intltoolize: +# INTLTOOL_MAKEFILE + +GETTEXT_PACKAGE = @GETTEXT_PACKAGE@-locations +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = @top_builddir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +datarootdir = @datarootdir@ +libdir = @libdir@ +DATADIRNAME = @DATADIRNAME@ +itlocaledir = $(prefix)/$(DATADIRNAME)/locale +subdir = po-locations +install_sh = @install_sh@ +# Automake >= 1.8 provides @mkdir_p@. +# Until it can be supposed, use the safe fallback: +mkdir_p = $(install_sh) -d + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ +INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ +MSGMERGE = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist +GENPOT = INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot + +ALL_LINGUAS = @ALL_LINGUAS@ + +PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; fi) + +USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep ^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep ^$$lang$$`"; then printf "$$lang "; fi; done; fi) + +USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) + +POFILES=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) + +DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(POFILES) +EXTRA_DISTFILES = POTFILES.skip Makevars LINGUAS + +POTFILES = \ +# This comment gets stripped out + +CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) + +.SUFFIXES: +.SUFFIXES: .po .pox .gmo .mo .msg .cat + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && gencat $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: $(CATALOGS) +all-no: + +$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(GENPOT) + +install: install-data +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + linguas="$(USE_LINGUAS)"; \ + for lang in $$linguas; do \ + dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ + $(mkdir_p) $$dir; \ + if test -r $$lang.gmo; then \ + $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ + echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ + echo "installing $(srcdir)/$$lang.gmo as" \ + "$$dir/$(GETTEXT_PACKAGE).mo"; \ + fi; \ + if test -r $$lang.gmo.m; then \ + $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ + echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ + else \ + if test -r $(srcdir)/$$lang.gmo.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ + $$dir/$(GETTEXT_PACKAGE).mo.m; \ + echo "installing $(srcdir)/$$lang.gmo.m as" \ + "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ + else \ + true; \ + fi; \ + fi; \ + done + +# Empty stubs to satisfy archaic automake needs +dvi info tags TAGS ID: + +# Define this as empty until I found a useful application. +install-exec installcheck: + +uninstall: + linguas="$(USE_LINGUAS)"; \ + for lang in $$linguas; do \ + rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ + rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ + done + +check: all $(GETTEXT_PACKAGE).pot + rm -f missing notexist + srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m + if [ -r missing -o -r notexist ]; then \ + exit 1; \ + fi + +mostlyclean: + rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp + rm -f .intltool-merge-cache + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES stamp-it + rm -f *.mo *.msg *.cat *.cat.m *.gmo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f Makefile.in.in + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: $(DISTFILES) + dists="$(DISTFILES)"; \ + extra_dists="$(EXTRA_DISTFILES)"; \ + for file in $$extra_dists; do \ + test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ + done; \ + for file in $$dists; do \ + test -f $$file || file="$(srcdir)/$$file"; \ + ln $$file $(distdir) 2> /dev/null \ + || cp -p $$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(GETTEXT_PACKAGE).pot + tmpdir=`pwd`; \ + linguas="$(USE_LINGUAS)"; \ + for lang in $$linguas; do \ + echo "$$lang:"; \ + result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ + if $$result; then \ + if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.gmo failed!"; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi; \ + done + +Makefile POTFILES: stamp-it + @if test ! -f $@; then \ + rm -f stamp-it; \ + $(MAKE) stamp-it; \ + fi + +stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Index: libgweather-3.5.1/po-locations/POTFILES.in =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ libgweather-3.5.1/po-locations/POTFILES.in 2012-07-05 10:27:51.461384292 +1200 @@ -0,0 +1,4 @@ +# This list should contain *only* data/Locations.xml.in. +# Everything else should be in POTFILES.skip. +[encoding:UTF-8] +data/Locations.xml.in