diff -up intltool-0.40.6/intltool-merge.in.schemas intltool-0.40.6/intltool-merge.in --- intltool-0.40.6/intltool-merge.in.schemas 2009-02-14 17:12:28.000000000 -0500 +++ intltool-0.40.6/intltool-merge.in 2009-04-27 01:41:11.099450891 -0400 @@ -38,8 +38,9 @@ my $PACKAGE = "@PACKAGE@"; my $VERSION = "@VERSION@"; ## Loaded modules -use strict; +use strict; use Getopt::Long; +use Cwd; use Text::Wrap; use File::Basename; use Encode; @@ -68,6 +69,9 @@ my $PASS_THROUGH_ARG = 0; my $UTF8_ARG = 0; my $MULTIPLE_OUTPUT = 0; my $cache_file; +my $GETTEXT_PACKAGE = ""; +my %varhash = (); +my $SRCDIR = $ENV{"srcdir"} || "."; ## Handle options GetOptions @@ -87,7 +91,8 @@ GetOptions "pass-through|p" => \$PASS_THROUGH_ARG, "utf8|u" => \$UTF8_ARG, "multiple-output|m" => \$MULTIPLE_OUTPUT, - "cache|c=s" => \$cache_file + "cache|c=s" => \$cache_file, + "gettext-package|g=s" => \$GETTEXT_PACKAGE ) or &error; my $PO_DIR; @@ -103,6 +108,8 @@ my $w = "[-A-Za-z0-9._:]"; # XML quoted string contents my $q = "[^\\\"]*"; +my $MODULE = $GETTEXT_PACKAGE || FindPackageName() || "unknown"; + ## Check for options. if ($VERSION_ARG) @@ -216,6 +223,8 @@ Other options: a single file containing all localized elements -c, --cache=FILE specify cache file name (usually \$top_builddir/po/.intltool-merge-cache) + -g, --gettext-package=NAME + specify gettext domain, needed for --schemas-style -q, --quiet suppress most messages --help display this help and exit --version output version information and exit @@ -241,6 +250,25 @@ sub print_message } +sub FindPackageName +{ + my $name = ""; + + my $conf_source; { + local (*IN); + open (IN, "; + close IN; + } + + $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE = \[?([^\n\]]+)/m; + + return $name if $name; +} + + sub preparation { $PO_DIR = $ARGV[0]; @@ -1246,50 +1274,41 @@ sub schemas_merge_translations my $short_string = $9 ? $9 : ''; my $long_string = $12 ? $12 : ''; - print OUTPUT "$locale_start_spaces$c_default_block"; - $default_string =~ s/\s+/ /g; - $default_string = entity_decode($default_string); $short_string =~ s/\s+/ /g; - $short_string = entity_decode($short_string); $long_string =~ s/\s+/ /g; - $long_string = entity_decode($long_string); - for my $lang (sort keys %po_files_by_lang) - { - my $default_translation = $translations{$lang, $default_string}; - my $short_translation = $translations{$lang, $short_string}; - my $long_translation = $translations{$lang, $long_string}; - - next if (!$default_translation && !$short_translation && - !$long_translation); - - print OUTPUT "\n$locale_start_spaces"; + print OUTPUT "$locale_start_spaces$MODULE"; + print OUTPUT "$locale_start_spaces"; print OUTPUT "$default_spaces"; - - if ($default_translation) - { - $default_translation = entity_encode($default_translation); - print OUTPUT "$default_translation"; + if ($default_string) { + print OUTPUT "$default_string"; } + print OUTPUT "$short_spaces"; + if ($short_string) { + print OUTPUT "$short_string"; + } + print OUTPUT "$long_spaces"; + if ($long_string) { + print OUTPUT "$long_string"; + } + print OUTPUT "$locale_end_spaces"; - print OUTPUT "$short_spaces"; + $default_string = entity_decode($default_string); + $short_string = entity_decode($short_string); + $long_string = entity_decode($long_string); - if ($short_translation) - { - $short_translation = entity_encode($short_translation); - print OUTPUT "$short_translation"; - } + for my $lang (sort keys %po_files_by_lang) + { + my $default_translation = $translations{$lang, $default_string}; - print OUTPUT "$long_spaces"; + next if (!$default_translation || ($default_translation eq $default_string)); - if ($long_translation) - { - $long_translation = entity_encode($long_translation); - print OUTPUT "$long_translation"; - } + $default_translation = entity_encode($default_translation); + print OUTPUT "\n$locale_start_spaces"; + print OUTPUT "$default_spaces$default_translation"; print OUTPUT "$locale_end_spaces"; } } diff -up intltool-0.40.6/tests/results/test.schemas intltool-0.40.6/tests/results/test