intltool r746 - in trunk: . tests tests/cases
- From: wbolster svn gnome org
- To: svn-commits-list gnome org
- Subject: intltool r746 - in trunk: . tests tests/cases
- Date: Fri, 25 Jul 2008 17:55:03 +0000 (UTC)
Author: wbolster
Date: Fri Jul 25 17:55:03 2008
New Revision: 746
URL: http://svn.gnome.org/viewvc/intltool?rev=746&view=rev
Log:
2008-07-25 Wouter Bolsterlee <wbolster svn gnome org>
reviewed by: Rodney Dawes <dobey pwns gmail com>
* intltool-extract.in:
* intltool-merge.in:
* tests/cases/az.po:
* tests/cases/fr.po:
* tests/selftest.pl.in:
Bug 458794 â Context support works only for single
context on a msgid. Patch and test case by Dan Winship
<danw gnome org>.
Modified:
trunk/ChangeLog
trunk/intltool-extract.in
trunk/intltool-merge.in
trunk/tests/cases/az.po
trunk/tests/cases/fr.po
trunk/tests/selftest.pl.in
Modified: trunk/intltool-extract.in
==============================================================================
--- trunk/intltool-extract.in (original)
+++ trunk/intltool-extract.in Fri Jul 25 17:55:03 2008
@@ -47,6 +47,7 @@
my $UPDATE_ARG = "0";
my $QUIET_ARG = "0";
my $SRCDIR_ARG = ".";
+my $NOMSGCTXT_ARG = "0";
my $FILE;
my $OUTFILE;
@@ -76,6 +77,7 @@
"update" => \$UPDATE_ARG,
"quiet|q" => \$QUIET_ARG,
"srcdir=s" => \$SRCDIR_ARG,
+ "nomsgctxt" => \$NOMSGCTXT_ARG,
) or &error;
&split_on_argument;
@@ -445,6 +447,11 @@
$lookup =~ s/^\s+//s;
$lookup =~ s/\s+$//s;
}
+ if (exists $attrs->{"msgctxt"}) {
+ my $context = entity_decode ($attrs->{"msgctxt"});
+ $context =~ s/^["'](.*)["']/$1/;
+ $lookup = "$context\004$lookup";
+ }
if ($lookup && $translate != 2) {
$comments{$lookup} = $XMLCOMMENT if $XMLCOMMENT;
@@ -833,6 +840,7 @@
for my $message (@msgids)
{
my $offsetlines = 1;
+ my $context = undef;
$offsetlines++ if $message =~ /%/;
if (defined ($comments{$message}))
{
@@ -847,12 +855,30 @@
if defined $comments{$message};
print OUT "/* xgettext:no-c-format */\n" if $message =~ /%/;
+ if ($message =~ /(.*)\004(.*)/) {
+ $context = $1;
+ $message = $2;
+ }
my @lines = split (/\n/, $message, -1);
for (my $n = 0; $n < @lines; $n++)
{
if ($n == 0)
{
- print OUT "char *s = N_(\"";
+ if (defined $context)
+ {
+ if ($NOMSGCTXT_ARG)
+ {
+ print OUT "char *s = N_(\"", $context, "|";
+ }
+ else
+ {
+ print OUT "char *s = C_(\"", $context, "\", \"";
+ }
+ }
+ else
+ {
+ print OUT "char *s = N_(\"";
+ }
}
else
{
Modified: trunk/intltool-merge.in
==============================================================================
--- trunk/intltool-merge.in (original)
+++ trunk/intltool-merge.in Fri Jul 25 17:55:03 2008
@@ -441,6 +441,18 @@
&create_cache;
}
+sub add_translation
+{
+ my ($lang, $msgctxt, $msgid, $msgstr) = @_;
+
+ return if !($msgid && $msgstr);
+
+ if ($msgctxt) {
+ $msgid = "$msgctxt\004$msgid";
+ }
+ $translations{$lang, $msgid} = $msgstr;
+}
+
sub create_translation_database
{
for my $lang (keys %po_files_by_lang)
@@ -468,8 +480,10 @@
}
my $nextfuzzy = 0;
+ my $inmsgctxt = 0;
my $inmsgid = 0;
my $inmsgstr = 0;
+ my $msgctxt = "";
my $msgid = "";
my $msgstr = "";
@@ -477,31 +491,52 @@
{
$nextfuzzy = 1 if /^#, fuzzy/;
+ if (/^msgctxt "((\\.|[^\\]+)*)"/ )
+ {
+ if ($inmsgstr) {
+ add_translation ($lang, $msgctxt, $msgid, $msgstr);
+ $msgctxt = "";
+ $msgid = "";
+ $msgstr = "";
+ }
+
+ $msgctxt = unescape_po_string($1);
+ $inmsgctxt = 1;
+ $inmsgid = 0;
+ $inmsgstr = 0;
+ }
+
if (/^msgid "((\\.|[^\\]+)*)"/ )
{
- $translations{$lang, $msgid} = $msgstr if $inmsgstr && $msgid && $msgstr;
- $msgid = "";
- $msgstr = "";
+ if ($inmsgstr) {
+ add_translation ($lang, $msgctxt, $msgid, $msgstr);
+ $msgctxt = "";
+ $msgid = "";
+ $msgstr = "";
+ }
if ($nextfuzzy) {
$inmsgid = 0;
+ $nextfuzzy = 0;
} else {
$msgid = unescape_po_string($1);
$inmsgid = 1;
}
+ $inmsgctxt = 0;
$inmsgstr = 0;
- $nextfuzzy = 0;
}
if (/^msgstr "((\\.|[^\\]+)*)"/)
{
$msgstr = unescape_po_string($1);
$inmsgstr = 1;
+ $inmsgctxt = 0;
$inmsgid = 0;
}
if (/^"((\\.|[^\\]+)*)"/)
{
+ $msgctxt .= unescape_po_string($1) if $inmsgctxt;
$msgid .= unescape_po_string($1) if $inmsgid;
$msgstr .= unescape_po_string($1) if $inmsgstr;
}
@@ -814,16 +849,23 @@
print $fh "<$nodename", $outattr;
if ($translate) {
- $lookup = getXMLstring($content, $spacepreserve);
+ $content = getXMLstring($content, $spacepreserve);
if (!$spacepreserve) {
- $lookup =~ s/^\s+//s;
- $lookup =~ s/\s+$//s;
+ $content =~ s/^\s+//s;
+ $content =~ s/\s+$//s;
+ }
+ if (exists $attrs->{"msgctxt"}) {
+ my $context = entity_decode ($attrs->{"msgctxt"});
+ $context =~ s/^["'](.*)["']/$1/;
+ $lookup = "$context\004$content";
+ } else {
+ $lookup = $content;
}
if ($lookup || $translate == 2) {
my $translation = $translations{$language, $lookup} if isWellFormedXmlFragment($translations{$language, $lookup});
if ($MULTIPLE_OUTPUT && ($translation || $translate == 2)) {
- $translation = $lookup if (!$translation);
+ $translation = $content if (!$translation);
print $fh " xml:lang=\"", $language, "\"" if $language;
print $fh ">";
if ($translate == 2) {
@@ -840,7 +882,7 @@
if ($translate == 2) {
translate_subnodes($fh, \ all, $language, 1, $spacepreserve);
} else {
- print $fh $lookup;
+ print $fh $content;
}
print $fh "</$nodename>";
}
@@ -859,7 +901,7 @@
my $localattrs = getAttributeString($attrs, 1, $lang, \$translate);
my $translation = $translations{$lang, $lookup} if isWellFormedXmlFragment($translations{$lang, $lookup});
if ($translate && !$translation) {
- $translation = $lookup;
+ $translation = $content;
}
if ($translation || $translate) {
Modified: trunk/tests/selftest.pl.in
==============================================================================
--- trunk/tests/selftest.pl.in (original)
+++ trunk/tests/selftest.pl.in Fri Jul 25 17:55:03 2008
@@ -267,6 +267,16 @@
system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
check_merge_result($case);
+print "35. Extract messages from an XML file with msgctxts: ";
+$case = "context.xml.in";
+system("$INTLTOOL_EXTRACT --type=gettext/xml --quiet --update cases/$case") == 0 or $failed = 1;
+check_extract_result($case);
+
+print "36. Merge translations into an XML file with msgctxts: ";
+$case = "context.xml";
+system("$INTLTOOL_MERGE -x --quiet cases cases/$case.in cases/$case") == 0 or $failed = 1;
+check_merge_result($case);
+
system("rm -f cases/*.*") if $srcdir ne ".";
system("rm -rf C az extract9 fr fr_BE fr_FR merge6 schemasmerge1 schemasmerge2 spacepreserve test test-quoted merge6.xml");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]