[Libguestfs] [PATCH] Make Perl strings translatable

Richard W.M. Jones rjones at redhat.com
Wed Jul 15 13:41:26 UTC 2009


This patch makes Perl strings translatable.  The Perl strings end up
in the PO files as usual.  It does not touch the embedded POD.

Internationalizing the Perl strings was pleasantly simple.  Just add:

  use Locale::TextDomain 'libguestfs';

at the top of any *.pl or *.pm file.  Then for each string in the file
that you want to be translatable you place TWO underscores before it:

  -  die "virt-inspector: no YAML support\n"
  +  die __"virt-inspector: no YAML support\n"
        unless exists $INC{"YAML/Any.pm"};

However this doesn't work if the string contains any $substitutions.
In that case you have to use the __x (two underscores and x) operator:

  -  die "guest image $_ does not exist or is not readable"
  +  die __x("guest image {imagename} does not exist or is not readable",
  +          imagename => $_)
       unless -r $_;

The second case causes a note to be added to the PO file, so hopefully
the translators will understand not to change the placeholders inside
braces:

  +#: perl/blib/lib/Sys/Guestfs/Lib.pm:142 perl/lib/Sys/Guestfs/Lib.pm:142
  +#, perl-brace-format
  +msgid "guest image {imagename} does not exist or is not readable"
  +msgstr ""

The patch is otherwise fairly simple.  I've changed po/POTFILES.in so
that it is now generated automatically, and it includes the daemon
code which we don't translate yet, but might consider doing in future.

'perl-libintl' is now a required module for virt-df / virt-inspector /
virt-v2v (but not for the basic Perl bindings).

This FAQ is useful to explain some of the reasons for the changes
above:

http://search.cpan.org/dist/libintl-perl/lib/Locale/libintlFAQ.pod

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/
-------------- next part --------------
>From 0d9a85e951816cc527931eb07b712d897d7b9362 Mon Sep 17 00:00:00 2001
From: Richard Jones <rjones at trick.home.annexia.org>
Date: Wed, 15 Jul 2009 14:24:41 +0100
Subject: [PATCH] Make Perl strings translatable using perl-libintl.

All Perl strings are now marked as translatable using __"string"
or __x("string {placeholder}", placeholder => $_).  Perl strings
now get copied to the PO files.

The po/POTFILES.in file is now updated automagically whenever we
add new *.c, *.pl or *.pm files into the repository.
---
 Makefile.am                 |    9 ++
 README                      |    2 +
 configure.ac                |    4 +-
 df/virt-df.pl               |   21 ++--
 inspector/virt-inspector.pl |   21 ++--
 perl/lib/Sys/Guestfs/Lib.pm |   49 +++++---
 po/Makevars                 |    3 +-
 po/POTFILES.in              |   67 +++++++++++-
 po/libguestfs.pot           |  268 ++++++++++++++++++++++++++++++++++++++-----
 po/pl.po                    |  269 ++++++++++++++++++++++++++++++++++++++-----
 v2v/virt-v2v.pl             |    7 +-
 11 files changed, 618 insertions(+), 102 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index fe960b7..3f27693 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -149,6 +149,15 @@ dist-hook:
 	./gitlog-to-changelog > ChangeLog
 	cp ChangeLog $(distdir)/ChangeLog
 
+# Update the list of translatable files in po/POTFILES.in.
+all-local:
+	find -name '*.c' -o -name '*.pl' -o -name '*.pm' | \
+	grep -v '/blib/' | \
+	grep -v '/capitests/' | \
+	grep -v '/examples/' | \
+	sort | \
+	sed 's,^\./,,' > $(srcdir)/po/POTFILES.in
+
 # Pkgconfig.
 
 pkgconfigdir = $(libdir)/pkgconfig
diff --git a/README b/README
index 23e270b..d56d21e 100644
--- a/README
+++ b/README
@@ -77,6 +77,8 @@ bindings
 - (Optional) Perl XML::XPath, Sys::Virt modules (for libvirt support
 in virt-inspector).
 
+- (Optional, but highly recommended) perl-libintl for translating perl code.
+
 Running ./configure will check you have all the requirements installed
 on your machine.
 
diff --git a/configure.ac b/configure.ac
index 3ee1102..4bb7689 100644
--- a/configure.ac
+++ b/configure.ac
@@ -306,7 +306,7 @@ AC_CHECK_PROG([PERL],[perl],[perl],[no])
 dnl Check for Perl modules that must be present to compile and
 dnl test the Perl bindings.
 missing_perl_modules=no
-for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker; do
+for pm in Test::More Test::Pod Test::Pod::Coverage ExtUtils::MakeMaker Locale::TextDomain; do
     AC_MSG_CHECKING([for $pm])
     if ! perl -M$pm -e1 >/dev/null 2>&1; then
         AC_MSG_RESULT([no])
@@ -519,7 +519,7 @@ AM_CONDITIONAL([HAVE_HASKELL],
 
 dnl Check for Perl modules needed by virt-df, inspector and V2V.
 missing_perl_modules=no
-for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer; do
+for pm in Pod::Usage Getopt::Long Sys::Virt Data::Dumper XML::Writer Locale::TextDomain; do
     AC_MSG_CHECKING([for $pm])
     if ! perl -M$pm -e1 >/dev/null 2>&1; then
         AC_MSG_RESULT([no])
diff --git a/df/virt-df.pl b/df/virt-df.pl
index 0ccc7a8..4cac896 100755
--- a/df/virt-df.pl
+++ b/df/virt-df.pl
@@ -28,6 +28,7 @@ use Getopt::Long;
 use Data::Dumper;
 use File::Temp qw/tempdir/;
 use XML::Writer;
+use Locale::TextDomain 'libguestfs';
 
 =encoding utf8
 
@@ -254,21 +255,21 @@ sub print_stat
 
 sub print_title
 {
-    my @cols = ("Virtual Machine", "Filesystem");
+    my @cols = (__"Virtual Machine", __"Filesystem");
     if (!$inodes) {
 	if (!$human) {
-	    push @cols, "1K-blocks";
+	    push @cols, __"1K-blocks";
 	} else {
-	    push @cols, "Size";
+	    push @cols, __"Size";
 	}
-	push @cols, "Used";
-	push @cols, "Available";
-	push @cols, "Use%";
+	push @cols, __"Used";
+	push @cols, __"Available";
+	push @cols, __"Use%";
     } else {
-	push @cols, "Inodes";
-	push @cols, "IUsed";
-	push @cols, "IFree";
-	push @cols, "IUse%";
+	push @cols, __"Inodes";
+	push @cols, __"IUsed";
+	push @cols, __"IFree";
+	push @cols, __"IUse%";
     }
 
     if (!$csv) {
diff --git a/inspector/virt-inspector.pl b/inspector/virt-inspector.pl
index cd5427a..3754ced 100755
--- a/inspector/virt-inspector.pl
+++ b/inspector/virt-inspector.pl
@@ -27,6 +27,7 @@ use Pod::Usage;
 use Getopt::Long;
 use Data::Dumper;
 use XML::Writer;
+use Locale::TextDomain 'libguestfs';
 
 # Optional:
 eval "use YAML::Any;";
@@ -201,7 +202,7 @@ if ($version) {
     print "$h{major}.$h{minor}.$h{release}$h{extra}\n";
     exit
 }
-pod2usage ("$0: no image or VM names given") if @ARGV == 0;
+pod2usage (__"virt-inspector: no image or VM names given") if @ARGV == 0;
 
 my $rw = 0;
 $rw = 1 if $output eq "fish";
@@ -293,7 +294,7 @@ if ($output !~ /.*fish$/) {
 if ($output eq "fish" || $output eq "ro-fish") {
     my @osdevs = keys %$oses;
     # This only works if there is a single OS.
-    die "--fish output is only possible with a single OS\n" if @osdevs != 1;
+    die __"--fish output is only possible with a single OS\n" if @osdevs != 1;
 
     my $root_dev = $osdevs[0];
 
@@ -319,7 +320,7 @@ elsif ($output eq "perl") {
 
 # YAML output
 elsif ($output eq "yaml") {
-    die "virt-inspector: no YAML support\n"
+    die __"virt-inspector: no YAML support\n"
 	unless exists $INC{"YAML/Any.pm"};
 
     print Dump(%$oses);
@@ -354,13 +355,13 @@ sub output_text_os
     print $os->{version}, " " if exists $os->{version};
     print "on ", $os->{root_device}, ":\n";
 
-    print "  Mountpoints:\n";
+    print __"  Mountpoints:\n";
     my $mounts = $os->{mounts};
     foreach (sort keys %$mounts) {
 	printf "    %-30s %s\n", $mounts->{$_}, $_
     }
 
-    print "  Filesystems:\n";
+    print __"  Filesystems:\n";
     my $filesystems = $os->{filesystems};
     foreach (sort keys %$filesystems) {
 	print "    $_:\n";
@@ -378,7 +379,7 @@ sub output_text_os
 	my %aliases = %{$os->{modprobe_aliases}};
 	my @keys = sort keys %aliases;
 	if (@keys) {
-	    print "  Modprobe aliases:\n";
+	    print __"  Modprobe aliases:\n";
 	    foreach (@keys) {
 		printf "    %-30s %s\n", $_, $aliases{$_}->{modulename}
 	    }
@@ -389,7 +390,7 @@ sub output_text_os
 	my %modvers = %{$os->{initrd_modules}};
 	my @keys = sort keys %modvers;
 	if (@keys) {
-	    print "  Initrd modules:\n";
+	    print __"  Initrd modules:\n";
 	    foreach (@keys) {
 		my @modules = @{$modvers{$_}};
 		print "    $_:\n";
@@ -398,13 +399,13 @@ sub output_text_os
 	}
     }
 
-    print "  Applications:\n";
+    print __"  Applications:\n";
     my @apps =  @{$os->{apps}};
     foreach (@apps) {
 	print "    $_->{name} $_->{version}\n"
     }
 
-    print "  Kernels:\n";
+    print __"  Kernels:\n";
     my @kernels = @{$os->{kernels}};
     foreach (@kernels) {
 	print "    $_->{version}\n";
@@ -415,7 +416,7 @@ sub output_text_os
     }
 
     if (exists $os->{root}->{registry}) {
-	print "  Windows Registry entries:\n";
+	print __"  Windows Registry entries:\n";
 	# These are just lumps of text - dump them out.
 	foreach (@{$os->{root}->{registry}}) {
 	    print "$_\n";
diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
index d5dfb4e..d79079c 100644
--- a/perl/lib/Sys/Guestfs/Lib.pm
+++ b/perl/lib/Sys/Guestfs/Lib.pm
@@ -22,6 +22,7 @@ use warnings;
 
 use Sys::Guestfs;
 use File::Temp qw/tempdir/;
+use Locale::TextDomain 'libguestfs';
 
 # Optional:
 eval "use Sys::Virt;";
@@ -131,35 +132,36 @@ sub open_guest
     } elsif (ref ($first) eq "SCALAR") {
 	@images = ($first);
     } else {
-	die "open_guest: first parameter must be a string or an arrayref"
+	die __"open_guest: first parameter must be a string or an arrayref"
     }
 
     my ($conn, $dom);
 
     if (-e $images[0]) {
 	foreach (@images) {
-	    die "guest image $_ does not exist or is not readable"
+	    die __x("guest image {imagename} does not exist or is not readable",
+		    imagename => $_)
 		unless -r $_;
 	}
     } else {
-	die "open_guest: no libvirt support (install Sys::Virt, XML::XPath and XML::XPath::XMLParser)"
+	die __"open_guest: no libvirt support (install Sys::Virt, XML::XPath and XML::XPath::XMLParser)"
 	    unless exists $INC{"Sys/Virt.pm"} &&
 	    exists $INC{"XML/XPath.pm"} &&
 	    exists $INC{"XML/XPath/XMLParser.pm"};
 
-	die "open_guest: too many domains listed on command line"
+	die __"open_guest: too many domains listed on command line"
 	    if @images > 1;
 
 	$conn = Sys::Virt->new (readonly => 1, @_);
-	die "open_guest: cannot connect to libvirt" unless $conn;
+	die __"open_guest: cannot connect to libvirt" unless $conn;
 
 	my @doms = $conn->list_defined_domains ();
-	my $isitinactive = "an inactive libvirt domain";
+	my $isitinactive = 1;
 	unless ($readwrite) {
 	    # In the case where we want read-only access to a domain,
 	    # allow the user to specify an active domain too.
 	    push @doms, $conn->list_domains ();
-	    $isitinactive = "a libvirt domain";
+	    $isitinactive = 0;
 	}
 	foreach (@doms) {
 	    if ($_->get_name () eq $images[0]) {
@@ -167,7 +169,16 @@ sub open_guest
 		last;
 	    }
 	}
-	die "$images[0] is not the name of $isitinactive\n" unless $dom;
+
+	unless ($dom) {
+	    if ($isitinactive) {
+		die __x("{imagename} is not the name of an inactive libvirt domain\n"
+			imagename => $images[0]);
+	    } else {
+		die __x("{imagename} is not the name of a libvirt domain\n"
+			imagename => $images[0]);
+	    }
+	}
 
 	# Get the names of the image(s).
 	my $xml = $dom->get_xml_description ();
@@ -176,7 +187,9 @@ sub open_guest
 	my @disks = $p->findnodes ('//devices/disk/source/@dev');
 	push (@disks, $p->findnodes ('//devices/disk/source/@file'));
 
-	die "$images[0] seems to have no disk devices\n" unless @disks;
+	die __x("{imagename} seems to have no disk devices\n",
+		imagename => $images[0])
+	    unless @disks;
 
 	@images = map { $_->getData } @disks;
     }
@@ -258,7 +271,7 @@ sub resolve_windows_path
     my $path = shift;
 
     if (substr ($path, 0, 1) ne "/") {
-	warn "resolve_windows_path: path must start with a / character";
+	warn __"resolve_windows_path: path must start with a / character";
 	return undef;
     }
 
@@ -740,7 +753,7 @@ sub _load_windows_registry
     close SAVEERR;
 
     unless ($res == 0) {
-	warn "reged command failed: $?";
+	warn __x("reged command failed: {errormsg}", errormsg => $?);
 	return;
     }
 
@@ -749,7 +762,7 @@ sub _load_windows_registry
     # it.
     my $content;
     unless (open F, "$dir/out") {
-	warn "no output from reged command: $!";
+	warn __x("no output from reged command: {errormsg}", errormsg => $!);
 	return;
     }
     { local $/ = undef; $content = <F>; }
@@ -919,7 +932,7 @@ sub _find_filesystem
 		return ($_, $fses->{$_});
 	    }
 	}
-	warn "unknown filesystem label $label\n";
+	warn __x("unknown filesystem label {label}\n", label => $label);
 	return ();
     } elsif (/^UUID=(.*)/) {
 	my $uuid = $1;
@@ -929,7 +942,7 @@ sub _find_filesystem
 		return ($_, $fses->{$_});
 	    }
 	}
-	warn "unknown filesystem UUID $uuid\n";
+	warn __x("unknown filesystem UUID {uuid}\n", uuid => $uuid);
 	return ();
     } else {
 	return ($_, $fses->{$_}) if exists $fses->{$_};
@@ -952,7 +965,7 @@ sub _find_filesystem
 
 	return () if m{/dev/cdrom};
 
-	warn "unknown filesystem $_\n";
+	warn __x("unknown filesystem {fs}\n", fs => $_);
 	return ();
     }
 }
@@ -1171,7 +1184,8 @@ sub _check_for_modprobe_aliases
 
         for my $path ( @results ) {
             $path =~ m{^/files(.*)/alias(?:\[\d*\])?$}
-                or die("$path doesn't match augeas pattern");
+                or die __x("{path} doesn't match augeas pattern",
+			   path => $path);
             my $file = $1;
 
             my $alias;
@@ -1220,7 +1234,8 @@ sub _check_for_initrd
 		    @modules;
 		    $initrd_modules{$version} = \@modules
 		} else {
-		    warn "/boot/$initrd: could not read initrd format";
+		    warn __x("{filename}: could not read initrd format",
+			     filename => "/boot/$initrd");
 	        }
 	    }
 	}
diff --git a/po/Makevars b/po/Makevars
index 2ef4f7e..76b47a4 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -8,7 +8,8 @@ subdir = po
 top_builddir = ..
 
 # These options get passed to xgettext.
-XGETTEXT_OPTIONS = --keyword=_ --keyword=N_
+# --keyword=__ etc are for Perl code using perl-libintl.
+XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ --keyword=__ --keyword=__x
 
 # This is the copyright holder that gets inserted into the header of the
 # $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 549506f..76e97e7 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,3 +1,51 @@
+daemon/augeas.c
+daemon/blockdev.c
+daemon/checksum.c
+daemon/cmp.c
+daemon/command.c
+daemon/cpmv.c
+daemon/debug.c
+daemon/devsparts.c
+daemon/df.c
+daemon/dir.c
+daemon/dmesg.c
+daemon/dropcaches.c
+daemon/du.c
+daemon/ext2.c
+daemon/file.c
+daemon/find.c
+daemon/fsck.c
+daemon/glob.c
+daemon/grub.c
+daemon/guestfsd.c
+daemon/headtail.c
+daemon/hexdump.c
+daemon/initrd.c
+daemon/ls.c
+daemon/lvm.c
+daemon/mknod.c
+daemon/mount.c
+daemon/names.c
+daemon/ntfs.c
+daemon/pingdaemon.c
+daemon/proto.c
+daemon/readdir.c
+daemon/scrub.c
+daemon/sfdisk.c
+daemon/sleep.c
+daemon/stat.c
+daemon/strings.c
+daemon/stubs.c
+daemon/swap.c
+daemon/sync.c
+daemon/tar.c
+daemon/umask.c
+daemon/upload.c
+daemon/wc.c
+daemon/xattr.c
+daemon/zero.c
+daemon/zerofree.c
+df/virt-df.pl
 fish/alloc.c
 fish/cmds.c
 fish/completion.c
@@ -8,6 +56,23 @@ fish/fish.c
 fish/glob.c
 fish/lcd.c
 fish/more.c
+fish/rc.c
+fish/rc_protocol.c
+fish/reopen.c
+fish/tilde.c
 fish/time.c
-src/guestfs.c
+inspector/virt-inspector.pl
+java/com_redhat_et_libguestfs_GuestFS.c
+ocaml/guestfs_c_actions.c
+ocaml/guestfs_c.c
+perl/bindtests.pl
+perl/Guestfs.c
+perl/lib/Sys/Guestfs/Lib.pm
+perl/lib/Sys/Guestfs.pm
+python/guestfs-py.c
+ruby/ext/guestfs/_guestfs.c
 src/guestfs-actions.c
+src/guestfs-bindtests.c
+src/guestfs.c
+src/guestfs_protocol.c
+v2v/virt-v2v.pl
diff --git a/po/libguestfs.pot b/po/libguestfs.pot
index 8770f32..0e74303 100644
--- a/po/libguestfs.pot
+++ b/po/libguestfs.pot
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2009-07-14 14:51+0100\n"
+"POT-Creation-Date: 2009-07-15 14:22+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -17,6 +17,50 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: df/virt-df.pl:258
+msgid "Virtual Machine"
+msgstr ""
+
+#: df/virt-df.pl:258
+msgid "Filesystem"
+msgstr ""
+
+#: df/virt-df.pl:261
+msgid "1K-blocks"
+msgstr ""
+
+#: df/virt-df.pl:263
+msgid "Size"
+msgstr ""
+
+#: df/virt-df.pl:265
+msgid "Used"
+msgstr ""
+
+#: df/virt-df.pl:266
+msgid "Available"
+msgstr ""
+
+#: df/virt-df.pl:267
+msgid "Use%"
+msgstr ""
+
+#: df/virt-df.pl:269
+msgid "Inodes"
+msgstr ""
+
+#: df/virt-df.pl:270
+msgid "IUsed"
+msgstr ""
+
+#: df/virt-df.pl:271
+msgid "IFree"
+msgstr ""
+
+#: df/virt-df.pl:272
+msgid "IUse%"
+msgstr ""
+
 #: fish/alloc.c:39
 #, c-format
 msgid "use 'alloc file size' to create an image\n"
@@ -134,7 +178,7 @@ msgstr ""
 msgid "guestfish: cannot use --listen and --file options at the same time\n"
 msgstr ""
 
-#: fish/fish.c:519
+#: fish/fish.c:520
 #, c-format
 msgid ""
 "\n"
@@ -146,77 +190,77 @@ msgid ""
 "\n"
 msgstr ""
 
-#: fish/fish.c:597
+#: fish/fish.c:600
 #, c-format
 msgid "guestfish: unterminated double quote\n"
 msgstr ""
 
-#: fish/fish.c:602 fish/fish.c:617
+#: fish/fish.c:605 fish/fish.c:620
 #, c-format
 msgid "guestfish: command arguments not separated by whitespace\n"
 msgstr ""
 
-#: fish/fish.c:612
+#: fish/fish.c:615
 #, c-format
 msgid "guestfish: unterminated single quote\n"
 msgstr ""
 
-#: fish/fish.c:657
+#: fish/fish.c:665
 #, c-format
 msgid "guestfish: internal error parsing string at '%s'\n"
 msgstr ""
 
-#: fish/fish.c:670
+#: fish/fish.c:682
 #, c-format
 msgid "guestfish: too many arguments\n"
 msgstr ""
 
-#: fish/fish.c:699
+#: fish/fish.c:711
 #, c-format
 msgid "guestfish: empty command on command line\n"
 msgstr ""
 
-#: fish/fish.c:826
+#: fish/fish.c:838
 msgid "display a list of commands or help on a command"
 msgstr ""
 
-#: fish/fish.c:828
+#: fish/fish.c:840
 msgid "quit guestfish"
 msgstr ""
 
-#: fish/fish.c:831
+#: fish/fish.c:843
 msgid "allocate an image"
 msgstr ""
 
-#: fish/fish.c:833
+#: fish/fish.c:845
 msgid "display a line of text"
 msgstr ""
 
-#: fish/fish.c:835
+#: fish/fish.c:847
 msgid "edit a file in the image"
 msgstr ""
 
-#: fish/fish.c:837
+#: fish/fish.c:849
 msgid "local change directory"
 msgstr ""
 
-#: fish/fish.c:839
+#: fish/fish.c:851
 msgid "expand wildcards in command"
 msgstr ""
 
-#: fish/fish.c:841
+#: fish/fish.c:853
 msgid "view a file in the pager"
 msgstr ""
 
-#: fish/fish.c:843
+#: fish/fish.c:855
 msgid "close and reopen libguestfs handle"
 msgstr ""
 
-#: fish/fish.c:845
+#: fish/fish.c:857
 msgid "measure time taken to run command"
 msgstr ""
 
-#: fish/fish.c:857
+#: fish/fish.c:869
 #, c-format
 msgid ""
 "alloc - allocate an image\n"
@@ -236,7 +280,7 @@ msgid ""
 "    <nn>sects        number of 512 byte sectors\n"
 msgstr ""
 
-#: fish/fish.c:873
+#: fish/fish.c:885
 #, c-format
 msgid ""
 "echo - display a line of text\n"
@@ -245,7 +289,7 @@ msgid ""
 "    This echos the parameters to the terminal.\n"
 msgstr ""
 
-#: fish/fish.c:880
+#: fish/fish.c:892
 #, c-format
 msgid ""
 "edit - edit a file in the image\n"
@@ -263,7 +307,7 @@ msgid ""
 "    (> 2 MB) or binary files containing \\0 bytes.\n"
 msgstr ""
 
-#: fish/fish.c:894
+#: fish/fish.c:906
 #, c-format
 msgid ""
 "lcd - local change directory\n"
@@ -274,7 +318,7 @@ msgid ""
 "    place.\n"
 msgstr ""
 
-#: fish/fish.c:901
+#: fish/fish.c:913
 #, c-format
 msgid ""
 "glob - expand wildcards in command\n"
@@ -285,7 +329,7 @@ msgid ""
 "    once for each expanded argument.\n"
 msgstr ""
 
-#: fish/fish.c:908
+#: fish/fish.c:920
 #, c-format
 msgid ""
 "help - display a list of commands or help on a command\n"
@@ -293,7 +337,7 @@ msgid ""
 "     help\n"
 msgstr ""
 
-#: fish/fish.c:913
+#: fish/fish.c:925
 #, c-format
 msgid ""
 "more - view a file in the pager\n"
@@ -311,14 +355,14 @@ msgid ""
 "    (> 2 MB) or binary files containing \\0 bytes.\n"
 msgstr ""
 
-#: fish/fish.c:929
+#: fish/fish.c:941
 #, c-format
 msgid ""
 "quit - quit guestfish\n"
 "     quit\n"
 msgstr ""
 
-#: fish/fish.c:932
+#: fish/fish.c:944
 #, c-format
 msgid ""
 "reopen - close and reopen the libguestfs handle\n"
@@ -329,7 +373,7 @@ msgid ""
 "exits.  However this is occasionally useful for testing.\n"
 msgstr ""
 
-#: fish/fish.c:939
+#: fish/fish.c:951
 #, c-format
 msgid ""
 "time - measure time taken to run command\n"
@@ -339,7 +383,7 @@ msgid ""
 "    time afterwards.\n"
 msgstr ""
 
-#: fish/fish.c:945
+#: fish/fish.c:957
 #, c-format
 msgid "%s: command not known, use -h to list all commands\n"
 msgstr ""
@@ -364,11 +408,165 @@ msgstr ""
 msgid "use '%s filename' to page a file\n"
 msgstr ""
 
+#: fish/rc.c:134
+#, c-format
+msgid "guestfish: protocol error: could not read 'hello' message\n"
+msgstr ""
+
+#: fish/rc.c:139
+#, c-format
+msgid ""
+"guestfish: protocol error: version mismatch, server version '%s' does not "
+"match client version '%s'.  The two versions must match exactly.\n"
+msgstr ""
+
+#: fish/rc.c:213 fish/rc.c:227
+#, c-format
+msgid "guestfish: remote: looks like the server is not running\n"
+msgstr ""
+
+#: fish/rc.c:237 fish/rc.c:251
+#, c-format
+msgid "guestfish: protocol error: could not send initial greeting to server\n"
+msgstr ""
+
+#: fish/rc.c:262
+#, c-format
+msgid "guestfish: protocol error: could not decode reply from server\n"
+msgstr ""
+
+#: fish/reopen.c:36
+#, c-format
+msgid "'reopen' command takes no parameters\n"
+msgstr ""
+
+#: fish/reopen.c:46
+#, c-format
+msgid "reopen: guestfs_create: failed to create handle\n"
+msgstr ""
+
 #: fish/time.c:35
 #, c-format
 msgid "use 'time command [args...]'\n"
 msgstr ""
 
+#: inspector/virt-inspector.pl:205
+msgid "virt-inspector: no image or VM names given"
+msgstr ""
+
+#: inspector/virt-inspector.pl:297
+msgid "--fish output is only possible with a single OS\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:323
+msgid "virt-inspector: no YAML support\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:358
+msgid "  Mountpoints:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:364
+msgid "  Filesystems:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:382
+msgid "  Modprobe aliases:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:393
+msgid "  Initrd modules:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:402
+msgid "  Applications:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:408
+msgid "  Kernels:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:419
+msgid "  Windows Registry entries:\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:135 perl/lib/Sys/Guestfs/Lib.pm:135
+msgid "open_guest: first parameter must be a string or an arrayref"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:142 perl/lib/Sys/Guestfs/Lib.pm:142
+#, perl-brace-format
+msgid "guest image {imagename} does not exist or is not readable"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:147 perl/lib/Sys/Guestfs/Lib.pm:147
+msgid ""
+"open_guest: no libvirt support (install Sys::Virt, XML::XPath and XML::"
+"XPath::XMLParser)"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:152 perl/lib/Sys/Guestfs/Lib.pm:152
+msgid "open_guest: too many domains listed on command line"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:156 perl/lib/Sys/Guestfs/Lib.pm:156
+msgid "open_guest: cannot connect to libvirt"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:175 perl/lib/Sys/Guestfs/Lib.pm:175
+#, perl-brace-format
+msgid "{imagename} is not the name of an inactive libvirt domain\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:178 perl/lib/Sys/Guestfs/Lib.pm:178
+#, perl-brace-format
+msgid "{imagename} is not the name of a libvirt domain\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:190 perl/lib/Sys/Guestfs/Lib.pm:190
+#, perl-brace-format
+msgid "{imagename} seems to have no disk devices\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:274 perl/lib/Sys/Guestfs/Lib.pm:274
+msgid "resolve_windows_path: path must start with a / character"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:756 perl/lib/Sys/Guestfs/Lib.pm:756
+#, perl-brace-format
+msgid "reged command failed: {errormsg}"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:765 perl/lib/Sys/Guestfs/Lib.pm:765
+#, perl-brace-format
+msgid "no output from reged command: {errormsg}"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:935 perl/lib/Sys/Guestfs/Lib.pm:935
+#, perl-brace-format
+msgid "unknown filesystem label {label}\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:945 perl/lib/Sys/Guestfs/Lib.pm:945
+#, perl-brace-format
+msgid "unknown filesystem UUID {uuid}\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:968 perl/lib/Sys/Guestfs/Lib.pm:968
+#, perl-brace-format
+msgid "unknown filesystem {fs}\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:1187 perl/lib/Sys/Guestfs/Lib.pm:1187
+#, perl-brace-format
+msgid "{path} doesn't match augeas pattern"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:1237 perl/lib/Sys/Guestfs/Lib.pm:1237
+#, perl-brace-format
+msgid "{filename}: could not read initrd format"
+msgstr ""
+
 #: src/guestfs.c:309
 #, c-format
 msgid "guestfs_close: called twice on the same handle\n"
@@ -617,3 +815,15 @@ msgstr ""
 #: src/guestfs.c:2540
 msgid "select_main_loop_run: this cannot be called recursively"
 msgstr ""
+
+#: v2v/virt-v2v.pl:174
+msgid "virt-v2v: no image or VM names given"
+msgstr ""
+
+#: v2v/virt-v2v.pl:208
+msgid "no root device found in this operating system image"
+msgstr ""
+
+#: v2v/virt-v2v.pl:209
+msgid "multiboot operating systems are not supported by v2v"
+msgstr ""
diff --git a/po/pl.po b/po/pl.po
index edee3a8..a8d329b 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2009-07-14 14:51+0100\n"
+"POT-Creation-Date: 2009-07-15 14:22+0100\n"
 "PO-Revision-Date: 2009-06-22 21:16+0200\n"
 "Last-Translator: Piotr Dr?g <piotrdrag at gmail.com>\n"
 "Language-Team: Polish <pl at li.org>\n"
@@ -14,6 +14,50 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: df/virt-df.pl:258
+msgid "Virtual Machine"
+msgstr ""
+
+#: df/virt-df.pl:258
+msgid "Filesystem"
+msgstr ""
+
+#: df/virt-df.pl:261
+msgid "1K-blocks"
+msgstr ""
+
+#: df/virt-df.pl:263
+msgid "Size"
+msgstr ""
+
+#: df/virt-df.pl:265
+msgid "Used"
+msgstr ""
+
+#: df/virt-df.pl:266
+msgid "Available"
+msgstr ""
+
+#: df/virt-df.pl:267
+msgid "Use%"
+msgstr ""
+
+#: df/virt-df.pl:269
+msgid "Inodes"
+msgstr ""
+
+#: df/virt-df.pl:270
+msgid "IUsed"
+msgstr ""
+
+#: df/virt-df.pl:271
+msgid "IFree"
+msgstr ""
+
+#: df/virt-df.pl:272
+msgid "IUse%"
+msgstr ""
+
 #: fish/alloc.c:39
 #, c-format
 msgid "use 'alloc file size' to create an image\n"
@@ -155,7 +199,7 @@ msgstr "guestfish: nieoczekiwane polecenie wiersza polece? 0x%x\n"
 msgid "guestfish: cannot use --listen and --file options at the same time\n"
 msgstr ""
 
-#: fish/fish.c:519
+#: fish/fish.c:520
 #, c-format
 msgid ""
 "\n"
@@ -174,78 +218,78 @@ msgstr ""
 "      \"quit\", aby zako?czy? pow?ok?\n"
 "\n"
 
-#: fish/fish.c:597
+#: fish/fish.c:600
 #, c-format
 msgid "guestfish: unterminated double quote\n"
 msgstr "guestfish: niezako?czony podw?jny cudzys??w\n"
 
-#: fish/fish.c:602 fish/fish.c:617
+#: fish/fish.c:605 fish/fish.c:620
 #, c-format
 msgid "guestfish: command arguments not separated by whitespace\n"
 msgstr "guestfish: parametry polece? nie s? oddzielone spacjami\n"
 
-#: fish/fish.c:612
+#: fish/fish.c:615
 #, c-format
 msgid "guestfish: unterminated single quote\n"
 msgstr "guestfish: niezako?czony pojedynczy cudzys??w\n"
 
-#: fish/fish.c:657
+#: fish/fish.c:665
 #, c-format
 msgid "guestfish: internal error parsing string at '%s'\n"
 msgstr "guestfish: wewn?trzny b??d analizowania ?a?cucha \"%s\"\n"
 
-#: fish/fish.c:670
+#: fish/fish.c:682
 #, c-format
 msgid "guestfish: too many arguments\n"
 msgstr "guestfish: za du?o parametr?w\n"
 
-#: fish/fish.c:699
+#: fish/fish.c:711
 #, c-format
 msgid "guestfish: empty command on command line\n"
 msgstr "guestfish: puste polecenie wiersza polece?\n"
 
-#: fish/fish.c:826
+#: fish/fish.c:838
 msgid "display a list of commands or help on a command"
 msgstr "wy?wietla list? polece? lub pomoc polecenia"
 
-#: fish/fish.c:828
+#: fish/fish.c:840
 msgid "quit guestfish"
 msgstr "ko?czy prac? guestfish"
 
-#: fish/fish.c:831
+#: fish/fish.c:843
 msgid "allocate an image"
 msgstr "przydziela obraz"
 
-#: fish/fish.c:833
+#: fish/fish.c:845
 msgid "display a line of text"
 msgstr "wy?wietla wiersz tekstu"
 
-#: fish/fish.c:835
+#: fish/fish.c:847
 msgid "edit a file in the image"
 msgstr "modyfikuje plik w obrazie"
 
-#: fish/fish.c:837
+#: fish/fish.c:849
 msgid "local change directory"
 msgstr "zmienia lokalny folder"
 
-#: fish/fish.c:839
+#: fish/fish.c:851
 msgid "expand wildcards in command"
 msgstr "rozwija wieloznaczniki w poleceniach"
 
-#: fish/fish.c:841
+#: fish/fish.c:853
 #, fuzzy
 msgid "view a file in the pager"
 msgstr "modyfikuje plik w obrazie"
 
-#: fish/fish.c:843
+#: fish/fish.c:855
 msgid "close and reopen libguestfs handle"
 msgstr ""
 
-#: fish/fish.c:845
+#: fish/fish.c:857
 msgid "measure time taken to run command"
 msgstr ""
 
-#: fish/fish.c:857
+#: fish/fish.c:869
 #, c-format
 msgid ""
 "alloc - allocate an image\n"
@@ -281,7 +325,7 @@ msgstr ""
 "    <nn>G lub <nn>GB  liczba gigabajt?w\n"
 "    <nn>sektory       liczba 512 bajtowych sektor?w\n"
 
-#: fish/fish.c:873
+#: fish/fish.c:885
 #, c-format
 msgid ""
 "echo - display a line of text\n"
@@ -294,7 +338,7 @@ msgstr ""
 "\n"
 "    Wy?wietla ostatnie parametry w terminalu.\n"
 
-#: fish/fish.c:880
+#: fish/fish.c:892
 #, c-format
 msgid ""
 "edit - edit a file in the image\n"
@@ -326,7 +370,7 @@ msgstr ""
 "    UWAGA: nie b?dzie dzia?a?o poprawnie dla du?ych plik?w\n"
 "    (> 2 MB) lub plik?w binarnych zawieraj?cych \\0 bajt?w.\n"
 
-#: fish/fish.c:894
+#: fish/fish.c:906
 #, c-format
 msgid ""
 "lcd - local change directory\n"
@@ -343,7 +387,7 @@ msgstr ""
 "    przydatne, je?li chcesz pobra? pliki do konkretnego\n"
 "    miejsca.\n"
 
-#: fish/fish.c:901
+#: fish/fish.c:913
 #, c-format
 msgid ""
 "glob - expand wildcards in command\n"
@@ -361,7 +405,7 @@ msgstr ""
 "    Zauwa?, ?e polecenie jest wykonywane raz dla\n"
 "    ka?dego rozwini?tego parametru.\n"
 
-#: fish/fish.c:908
+#: fish/fish.c:920
 #, c-format
 msgid ""
 "help - display a list of commands or help on a command\n"
@@ -372,7 +416,7 @@ msgstr ""
 "     help polecenie\n"
 "     help\n"
 
-#: fish/fish.c:913
+#: fish/fish.c:925
 #, fuzzy, c-format
 msgid ""
 "more - view a file in the pager\n"
@@ -404,7 +448,7 @@ msgstr ""
 "    UWAGA: nie b?dzie dzia?a?o poprawnie dla du?ych plik?w\n"
 "    (> 2 MB) lub plik?w binarnych zawieraj?cych \\0 bajt?w.\n"
 
-#: fish/fish.c:929
+#: fish/fish.c:941
 #, c-format
 msgid ""
 "quit - quit guestfish\n"
@@ -413,7 +457,7 @@ msgstr ""
 "quit - ko?czy prac? guestfish\n"
 "     quit\n"
 
-#: fish/fish.c:932
+#: fish/fish.c:944
 #, c-format
 msgid ""
 "reopen - close and reopen the libguestfs handle\n"
@@ -424,7 +468,7 @@ msgid ""
 "exits.  However this is occasionally useful for testing.\n"
 msgstr ""
 
-#: fish/fish.c:939
+#: fish/fish.c:951
 #, c-format
 msgid ""
 "time - measure time taken to run command\n"
@@ -434,7 +478,7 @@ msgid ""
 "    time afterwards.\n"
 msgstr ""
 
-#: fish/fish.c:945
+#: fish/fish.c:957
 #, c-format
 msgid "%s: command not known, use -h to list all commands\n"
 msgstr ""
@@ -460,11 +504,166 @@ msgstr ""
 msgid "use '%s filename' to page a file\n"
 msgstr "u?yj \"%s nazwapliku\", aby zmodyfikowa? plik\n"
 
+#: fish/rc.c:134
+#, c-format
+msgid "guestfish: protocol error: could not read 'hello' message\n"
+msgstr ""
+
+#: fish/rc.c:139
+#, c-format
+msgid ""
+"guestfish: protocol error: version mismatch, server version '%s' does not "
+"match client version '%s'.  The two versions must match exactly.\n"
+msgstr ""
+
+#: fish/rc.c:213 fish/rc.c:227
+#, c-format
+msgid "guestfish: remote: looks like the server is not running\n"
+msgstr ""
+
+#: fish/rc.c:237 fish/rc.c:251
+#, c-format
+msgid "guestfish: protocol error: could not send initial greeting to server\n"
+msgstr ""
+
+#: fish/rc.c:262
+#, c-format
+msgid "guestfish: protocol error: could not decode reply from server\n"
+msgstr ""
+
+#: fish/reopen.c:36
+#, c-format
+msgid "'reopen' command takes no parameters\n"
+msgstr ""
+
+#: fish/reopen.c:46
+#, fuzzy, c-format
+msgid "reopen: guestfs_create: failed to create handle\n"
+msgstr "guestfs_create: utworzenie programu obs?ugi nie powiod?o si?\n"
+
 #: fish/time.c:35
 #, c-format
 msgid "use 'time command [args...]'\n"
 msgstr ""
 
+#: inspector/virt-inspector.pl:205
+msgid "virt-inspector: no image or VM names given"
+msgstr ""
+
+#: inspector/virt-inspector.pl:297
+msgid "--fish output is only possible with a single OS\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:323
+msgid "virt-inspector: no YAML support\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:358
+msgid "  Mountpoints:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:364
+msgid "  Filesystems:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:382
+msgid "  Modprobe aliases:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:393
+msgid "  Initrd modules:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:402
+msgid "  Applications:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:408
+msgid "  Kernels:\n"
+msgstr ""
+
+#: inspector/virt-inspector.pl:419
+msgid "  Windows Registry entries:\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:135 perl/lib/Sys/Guestfs/Lib.pm:135
+msgid "open_guest: first parameter must be a string or an arrayref"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:142 perl/lib/Sys/Guestfs/Lib.pm:142
+#, perl-brace-format
+msgid "guest image {imagename} does not exist or is not readable"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:147 perl/lib/Sys/Guestfs/Lib.pm:147
+msgid ""
+"open_guest: no libvirt support (install Sys::Virt, XML::XPath and XML::"
+"XPath::XMLParser)"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:152 perl/lib/Sys/Guestfs/Lib.pm:152
+#, fuzzy
+msgid "open_guest: too many domains listed on command line"
+msgstr "guestfish: puste polecenie wiersza polece?\n"
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:156 perl/lib/Sys/Guestfs/Lib.pm:156
+msgid "open_guest: cannot connect to libvirt"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:175 perl/lib/Sys/Guestfs/Lib.pm:175
+#, perl-brace-format
+msgid "{imagename} is not the name of an inactive libvirt domain\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:178 perl/lib/Sys/Guestfs/Lib.pm:178
+#, perl-brace-format
+msgid "{imagename} is not the name of a libvirt domain\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:190 perl/lib/Sys/Guestfs/Lib.pm:190
+#, perl-brace-format
+msgid "{imagename} seems to have no disk devices\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:274 perl/lib/Sys/Guestfs/Lib.pm:274
+msgid "resolve_windows_path: path must start with a / character"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:756 perl/lib/Sys/Guestfs/Lib.pm:756
+#, fuzzy, perl-brace-format
+msgid "reged command failed: {errormsg}"
+msgstr "zewn?trzne polecenie nie powiod?o si?: %s"
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:765 perl/lib/Sys/Guestfs/Lib.pm:765
+#, perl-brace-format
+msgid "no output from reged command: {errormsg}"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:935 perl/lib/Sys/Guestfs/Lib.pm:935
+#, perl-brace-format
+msgid "unknown filesystem label {label}\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:945 perl/lib/Sys/Guestfs/Lib.pm:945
+#, perl-brace-format
+msgid "unknown filesystem UUID {uuid}\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:968 perl/lib/Sys/Guestfs/Lib.pm:968
+#, perl-brace-format
+msgid "unknown filesystem {fs}\n"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:1187 perl/lib/Sys/Guestfs/Lib.pm:1187
+#, perl-brace-format
+msgid "{path} doesn't match augeas pattern"
+msgstr ""
+
+#: perl/blib/lib/Sys/Guestfs/Lib.pm:1237 perl/lib/Sys/Guestfs/Lib.pm:1237
+#, perl-brace-format
+msgid "{filename}: could not read initrd format"
+msgstr ""
+
 #: src/guestfs.c:309
 #, c-format
 msgid "guestfs_close: called twice on the same handle\n"
@@ -720,3 +919,15 @@ msgstr "fd %d nie zosta?o zarejestrowane"
 #: src/guestfs.c:2540
 msgid "select_main_loop_run: this cannot be called recursively"
 msgstr "select_main_loop_run: nie mo?e zosta? wywo?ane rekursywnie"
+
+#: v2v/virt-v2v.pl:174
+msgid "virt-v2v: no image or VM names given"
+msgstr ""
+
+#: v2v/virt-v2v.pl:208
+msgid "no root device found in this operating system image"
+msgstr ""
+
+#: v2v/virt-v2v.pl:209
+msgid "multiboot operating systems are not supported by v2v"
+msgstr ""
diff --git a/v2v/virt-v2v.pl b/v2v/virt-v2v.pl
index d3fa647..fb1f220 100755
--- a/v2v/virt-v2v.pl
+++ b/v2v/virt-v2v.pl
@@ -28,6 +28,7 @@ use Getopt::Long;
 use Data::Dumper;
 use File::Temp qw/tempdir/;
 use XML::Writer;
+use Locale::TextDomain 'libguestfs';
 
 =encoding utf8
 
@@ -170,7 +171,7 @@ if ($version) {
     print "$h{major}.$h{minor}.$h{release}$h{extra}\n";
     exit
 }
-pod2usage ("$0: no image or VM names given") if @ARGV == 0;
+pod2usage (__"virt-v2v: no image or VM names given") if @ARGV == 0;
 
 # XXX This should be an option.  Disable for now until we get
 # downloads working reliably.
@@ -204,8 +205,8 @@ my $oses = inspect_operating_systems ($g, \%fses);
 # Only work on single-root operating systems.
 my $root_dev;
 my @roots = keys %$oses;
-die "no root device found in this operating system image" if @roots == 0;
-die "multiboot operating systems are not supported by v2v" if @roots > 1;
+die __"no root device found in this operating system image" if @roots == 0;
+die __"multiboot operating systems are not supported by v2v" if @roots > 1;
 $root_dev = $roots[0];
 
 # Mount up the disks and check for applications.
-- 
1.6.2.5



More information about the Libguestfs mailing list