summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-02-15 02:22:08 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-02-15 02:22:08 +0000
commitd4c61b72813b880d86b316770f2e3819a6428202 (patch)
treec33e8cae60810b3109400e97dc86fad8baa47027
parentd9592637a962651f06f221839bbc2cfcc6789c83 (diff)
* Many changes to make ikiwiki very resistant to write failures
including out of disk space situations. ikiwiki should never leave truncated files, and if the error occurs during a web-based file edit, the user will be given an opportunity to retry. Inspired by the many ways Moin Moin destroys itself when out of disk. :-) * Fix syslogging of errors.
-rw-r--r--IkiWiki.pm56
-rw-r--r--IkiWiki/CGI.pm29
-rw-r--r--IkiWiki/Plugin/aggregate.pm13
-rw-r--r--IkiWiki/Plugin/passwordauth.pm3
-rw-r--r--IkiWiki/Plugin/search.pm28
-rw-r--r--IkiWiki/Render.pm34
-rw-r--r--IkiWiki/UserInfo.pm11
-rw-r--r--debian/changelog10
-rw-r--r--doc/plugins/write.mdwn16
-rw-r--r--po/bg.po56
-rw-r--r--po/cs.po56
-rw-r--r--po/es.po56
-rw-r--r--po/fr.po56
-rw-r--r--po/gu.po56
-rw-r--r--po/ikiwiki.pot56
-rw-r--r--po/pl.po56
-rw-r--r--po/sv.po56
-rw-r--r--po/vi.po56
-rw-r--r--templates/editpage.tmpl12
19 files changed, 404 insertions, 312 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index b605ac370..8f037ed04 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -28,7 +28,8 @@ my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
sub defaultconfig () { #{{{
- wiki_file_prune_regexps => [qr/\.\./, qr/^\./, qr/\/\./, qr/\.x?html?$/,
+ wiki_file_prune_regexps => [qr/\.\./, qr/^\./, qr/\/\./,
+ qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//],
wiki_link_regexp => qr/\[\[(?:([^\]\|]+)\|)?([^\s\]]+)\]\]/,
wiki_file_regexp => qr/(^[-[:alnum:]_.:\/+]+$)/,
@@ -142,14 +143,19 @@ sub loadplugin ($) { #{{{
}
} #}}}
-sub error ($) { #{{{
+sub error ($;$) { #{{{
+ my $message=shift;
+ my $cleaner=shift;
if ($config{cgi}) {
print "Content-type: text/html\n\n";
print misctemplate(gettext("Error"),
- "<p>".gettext("Error").": @_</p>");
+ "<p>".gettext("Error").": $message</p>");
}
- log_message(error => @_);
- exit(1);
+ log_message(debug => $message) if $config{syslog};
+ if (defined $cleaner) {
+ $cleaner->();
+ }
+ die $message."\n";
} #}}}
sub debug ($) { #{{{
@@ -246,7 +252,7 @@ sub readfile ($;$$) { #{{{
binmode(IN) if ($binary);
return \*IN if $wantfd;
my $ret=<IN>;
- close IN;
+ close IN || error("failed to read $file: $!");
return $ret;
} #}}}
@@ -255,7 +261,7 @@ sub writefile ($$$;$$) { #{{{
my $destdir=shift; # directory to put file in
my $content=shift;
my $binary=shift;
- my $wantfd=shift;
+ my $writer=shift;
my $test=$file;
while (length $test) {
@@ -264,8 +270,12 @@ sub writefile ($$$;$$) { #{{{
}
$test=dirname($test);
}
+ my $newfile="$destdir/$file.ikiwiki-new";
+ if (-l $newfile) {
+ error("cannot write to a symlink ($newfile)");
+ }
- my $dir=dirname("$destdir/$file");
+ my $dir=dirname($newfile);
if (! -d $dir) {
my $d="";
foreach my $s (split(m!/+!, $dir)) {
@@ -275,12 +285,19 @@ sub writefile ($$$;$$) { #{{{
}
}
}
-
- open (OUT, ">$destdir/$file") || error("failed to write $destdir/$file: $!");
+
+ my $cleanup = sub { unlink($newfile) };
+ open (OUT, ">$newfile") || error("failed to write $newfile: $!", $cleanup);
binmode(OUT) if ($binary);
- return \*OUT if $wantfd;
- print OUT $content;
- close OUT;
+ if ($writer) {
+ $writer->(\*OUT, $cleanup);
+ }
+ else {
+ print OUT $content || error("failed writing to $newfile: $!", $cleanup);
+ }
+ close OUT || error("failed saving $newfile: $!", $cleanup);
+ rename($newfile, "$destdir/$file") ||
+ error("failed renaming $newfile to $destdir/$file: $!", $cleanup);
} #}}}
my %cleared;
@@ -577,7 +594,7 @@ sub lockwiki () { #{{{
debug("wiki seems to be locked, waiting for lock");
my $wait=600; # arbitrary, but don't hang forever to
# prevent process pileup
- for (1..600) {
+ for (1..$wait) {
return if flock(WIKILOCK, 2 | 4);
sleep 1;
}
@@ -626,8 +643,9 @@ sub saveindex () { #{{{
if (! -d $config{wikistatedir}) {
mkdir($config{wikistatedir});
}
- open (OUT, ">$config{wikistatedir}/index") ||
- error("cannot write to $config{wikistatedir}/index: $!");
+ my $newfile="$config{wikistatedir}/index.new";
+ my $cleanup = sub { unlink($newfile) };
+ open (OUT, ">$newfile") || error("cannot write to $newfile: $!", $cleanup);
foreach my $page (keys %oldpagemtime) {
next unless $oldpagemtime{$page};
my $line="mtime=$oldpagemtime{$page} ".
@@ -639,9 +657,11 @@ sub saveindex () { #{{{
if (exists $depends{$page}) {
$line.=" depends=".encode_entities($depends{$page}, " \t\n");
}
- print OUT $line."\n";
+ print OUT $line."\n" || error("failed writing to $newfile: $!", $cleanup);
}
- close OUT;
+ close OUT || error("failed saving to $newfile: $!", $cleanup);
+ rename($newfile, "$config{wikistatedir}/index") ||
+ error("failed renaming $newfile to $config{wikistatedir}/index", $cleanup);
} #}}}
sub template_file ($) { #{{{
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 6c489df8d..973053427 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -252,12 +252,15 @@ sub cgi_prefs ($$) { #{{{
elsif ($form->submitted eq 'Save Preferences' && $form->validate) {
foreach my $field (qw(email subscriptions)) {
if (defined $form->field($field) && length $form->field($field)) {
- userinfo_set($user_name, $field, $form->field($field)) || error("failed to set $field");
+ userinfo_set($user_name, $field, $form->field($field)) ||
+ error("failed to set $field");
}
}
if (is_admin($user_name)) {
set_banned_users(grep { ! is_admin($_) }
- split(' ', $form->field("banned_users")));
+ split(' ',
+ $form->field("banned_users"))) ||
+ error("failed saving changes");
}
$form->text(gettext("Preferences saved."));
}
@@ -487,7 +490,25 @@ sub cgi_editpage ($$) { #{{{
$content=~s/\r\n/\n/g;
$content=~s/\r/\n/g;
- writefile($file, $config{srcdir}, $content);
+
+ $config{cgi}=0; # avoid cgi error message
+ eval { writefile($file, $config{srcdir}, $content) };
+ $config{cgi}=1;
+ if ($@) {
+ $form->field(name => "rcsinfo", value => rcs_prepedit($file),
+ force => 1);
+ $form->tmpl_param("failed_save", 1);
+ $form->tmpl_param("error_message", $@);
+ $form->field("editcontent", value => $content, force => 1);
+ $form->field(name => "comments", value => $form->field('comments'), force => 1);
+ $form->field("do", "edit)");
+ $form->tmpl_param("page_select", 0);
+ $form->field(name => "page", type => 'hidden');
+ $form->field(name => "type", type => 'hidden');
+ $form->title(sprintf(gettext("editing %s"), $page));
+ print $form->render(submit => \@buttons);
+ return;
+ }
if ($config{rcs}) {
my $message="";
@@ -616,7 +637,7 @@ sub cgi (;$$) { #{{{
email => "",
password => "",
regdate => time,
- });
+ }) || error("failed adding user");
}
}
}
diff --git a/IkiWiki/Plugin/aggregate.pm b/IkiWiki/Plugin/aggregate.pm
index 7fceb0df3..a6f850236 100644
--- a/IkiWiki/Plugin/aggregate.pm
+++ b/IkiWiki/Plugin/aggregate.pm
@@ -153,8 +153,11 @@ sub loadstate () { #{{{
sub savestate () { #{{{
eval q{use HTML::Entities};
error($@) if $@;
- open (OUT, ">$config{wikistatedir}/aggregate" ||
- die "$config{wikistatedir}/aggregate: $!");
+ my $newfile="$config{wikistatedir}/aggregate.new";
+ # TODO: This cleanup function could use improvement. Any newly
+ # aggregated files are left behind unrecorded, and should be deleted.
+ my $cleanup = sub { unlink($newfile) };
+ open (OUT, ">$newfile") || error("open $newfile: $!", $cleanup);
foreach my $data (values %feeds, values %guids) {
if ($data->{remove}) {
if ($data->{name}) {
@@ -188,9 +191,11 @@ sub savestate () { #{{{
push @line, "$field=".$data->{$field};
}
}
- print OUT join(" ", @line)."\n";
+ print OUT join(" ", @line)."\n" || error("write $newfile: $!", $cleanup);
}
- close OUT;
+ close OUT || error("save $newfile: $!", $cleanup);
+ rename($newfile, "$config{wikistatedir}/aggregate") ||
+ error("rename $newfile: $!", $cleanup);
} #}}}
sub expire () { #{{{
diff --git a/IkiWiki/Plugin/passwordauth.pm b/IkiWiki/Plugin/passwordauth.pm
index 6d395324e..e0aa72a19 100644
--- a/IkiWiki/Plugin/passwordauth.pm
+++ b/IkiWiki/Plugin/passwordauth.pm
@@ -187,7 +187,8 @@ sub formbuilder (@) { #{{{
my $user_name=$form->field('name');
foreach my $field (qw(password)) {
if (defined $form->field($field) && length $form->field($field)) {
- IkiWiki::userinfo_set($user_name, $field, $form->field($field)) || error("failed to set $field");
+ IkiWiki::userinfo_set($user_name, $field, $form->field($field)) ||
+ error("failed to set $field");
}
}
}
diff --git a/IkiWiki/Plugin/search.pm b/IkiWiki/Plugin/search.pm
index 1b5c66716..d35c33e76 100644
--- a/IkiWiki/Plugin/search.pm
+++ b/IkiWiki/Plugin/search.pm
@@ -89,14 +89,20 @@ sub estcfg () { #{{{
my $estdir="$config{wikistatedir}/hyperestraier";
my $cgi=IkiWiki::basename($config{cgiurl});
$cgi=~s/\..*$//;
- open(TEMPLATE, ">:utf8", "$estdir/$cgi.tmpl") ||
- error("write $estdir/$cgi.tmpl: $!");
+
+ my $newfile="$estdir/$cgi.tmpl.new";
+ my $cleanup = sub { unlink($newfile) };
+ open(TEMPLATE, ">:utf8", $newfile) || error("open $newfile: $!", $cleanup);
print TEMPLATE IkiWiki::misctemplate("search",
"<!--ESTFORM-->\n\n<!--ESTRESULT-->\n\n<!--ESTINFO-->\n\n",
- baseurl => IkiWiki::dirname($config{cgiurl})."/");
- close TEMPLATE;
- open(TEMPLATE, ">$estdir/$cgi.conf") ||
- error("write $estdir/$cgi.conf: $!");
+ baseurl => IkiWiki::dirname($config{cgiurl})."/") ||
+ error("write $newfile: $!", $cleanup);
+ close TEMPLATE || error("save $newfile: $!", $cleanup);
+ rename($newfile, "$estdir/$cgi.tmpl") ||
+ error("rename $newfile: $!", $cleanup);
+
+ $newfile="$estdir/$cgi.conf";
+ open(TEMPLATE, ">$newfile") || error("open $newfile: $!", $cleanup);
my $template=template("estseek.conf");
eval q{use Cwd 'abs_path'};
$template->param(
@@ -105,13 +111,15 @@ sub estcfg () { #{{{
destdir => abs_path($config{destdir}),
url => $config{url},
);
- print TEMPLATE $template->output;
- close TEMPLATE;
+ print TEMPLATE $template->output || error("write $newfile: $!", $cleanup);
+ close TEMPLATE || error("save $newfile: $!", $cleanup);
+ rename($newfile, "$estdir/$cgi.conf") ||
+ error("rename $newfile: $!", $cleanup);
+
$cgi="$estdir/".IkiWiki::basename($config{cgiurl});
unlink($cgi);
my $estseek = defined $config{estseek} ? $config{estseek} : '/usr/lib/estraier/estseek.cgi';
- symlink($estseek, $cgi) ||
- error("symlink $estseek $cgi: $!");
+ symlink($estseek, $cgi) || error("symlink $estseek $cgi: $!");
} # }}}
sub estcmd ($;@) { #{{{
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index d8bc5a9d9..cbba28251 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -198,22 +198,26 @@ sub render ($) { #{{{
my $srcfd=readfile($srcfile, 1, 1);
delete $depends{$file};
will_render($file, $file, 1);
- my $destfd=writefile($file, $config{destdir}, undef, 1, 1);
- my $blksize = 16384;
- my ($len, $buf, $written);
- while ($len = sysread $srcfd, $buf, $blksize) {
- if (! defined $len) {
- next if $! =~ /^Interrupted/;
- error("failed to read $srcfile: $!");
- }
- my $offset = 0;
- while ($len) {
- defined($written = syswrite OUT, $buf, $len, $offset)
- or error("failed to write $file: $!");
- $len -= $written;
- $offset += $written;
+ writefile($file, $config{destdir}, undef, 1, sub {
+ my $destfd=shift;
+ my $cleanup=shift;
+
+ my $blksize = 16384;
+ my ($len, $buf, $written);
+ while ($len = sysread $srcfd, $buf, $blksize) {
+ if (! defined $len) {
+ next if $! =~ /^Interrupted/;
+ error("failed to read $srcfile: $!", $cleanup);
+ }
+ my $offset = 0;
+ while ($len) {
+ defined($written = syswrite $destfd, $buf, $len, $offset)
+ or error("failed to write $file: $!", $cleanup);
+ $len -= $written;
+ $offset += $written;
+ }
}
- }
+ });
$oldpagemtime{$file}=time;
}
} #}}}
diff --git a/IkiWiki/UserInfo.pm b/IkiWiki/UserInfo.pm
index 115a263ce..02c27991c 100644
--- a/IkiWiki/UserInfo.pm
+++ b/IkiWiki/UserInfo.pm
@@ -15,12 +15,19 @@ sub userinfo_retrieve () { #{{{
sub userinfo_store ($) { #{{{
my $userinfo=shift;
+ my $newfile="$config{wikistatedir}/userdb.new";
my $oldmask=umask(077);
- my $ret=Storable::lock_store($userinfo, "$config{wikistatedir}/userdb");
+ my $ret=Storable::lock_store($userinfo, $newfile);
umask($oldmask);
+ if (defined $ret && $ret) {
+ if (! rename($newfile, "$config{wikistatedir}/userdb")) {
+ unlink($newfile);
+ $ret=undef;
+ }
+ }
return $ret;
} #}}}
-
+
sub userinfo_get ($$) { #{{{
my $user=shift;
my $field=shift;
diff --git a/debian/changelog b/debian/changelog
index f4e4e2437..aaffd76ac 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -16,8 +16,14 @@ ikiwiki (1.43) UNRELEASED; urgency=low
* Fix smiley plugin to support smileys at the very beginning or end of
the content.
* Allow multiple tag settings to appear in a single page.
-
- -- Joey Hess <joeyh@debian.org> Tue, 13 Feb 2007 22:40:56 -0500
+ * Many changes to make ikiwiki very resistant to write failures
+ including out of disk space situations. ikiwiki should never leave
+ truncated files, and if the error occurs during a web-based file edit,
+ the user will be given an opportunity to retry.
+ Inspired by the many ways Moin Moin destroys itself when out of disk. :-)
+ * Fix syslogging of errors.
+
+ -- Joey Hess <joeyh@debian.org> Wed, 14 Feb 2007 19:22:24 -0500
ikiwiki (1.42) unstable; urgency=low
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 8630b56ff..c10d73cf9 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -287,9 +287,11 @@ the id can be controled by the user.
Logs a debugging message. These are supressed unless verbose mode is turned
on.
-#### `error($)`
+#### `error($;$)`
-Aborts with an error message.
+Aborts with an error message. If the second parameter is passed, it is a
+function that is called after the error message is printed, to do any final
+cleanup.
Note that while any plugin can use this for a fatal error, plugins should
try to avoid dying on bad input, as that will halt the entire wiki build
@@ -359,14 +361,20 @@ in binary mode.
A failure to read the file will result in it dying with an error.
-#### `writefile($$$;$)`
+#### `writefile($$$;$$)`
Given a filename, a directory to put it in, and the file's content,
writes a file.
-The optional second parameter, if set to a true value, makes the file be
+The optional fourth parameter, if set to a true value, makes the file be
written in binary mode.
+The optional fifth parameter can be used to pass a function reference that
+will be called to handle writing to the file. The function will be called
+and passed a file descriptor it should write to, and an error recovery
+function it should call if the writing fails. (You will not normally need to
+use this interface.)
+
A failure to write the file will result in it dying with an error.
If the destination directory doesn't exist, it will first be created.
diff --git a/po/bg.po b/po/bg.po
index 1d0d4e396..6a560fbcd 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki-bg\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-12 01:19+0200\n"
"Last-Translator: Damyan Ivanov <dam@modsodtsys.com>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
@@ -20,37 +20,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Първо трябва да влезете."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Предпочитанията са запазени."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "дискусия"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "създаване на %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "промяна на %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Достъпът ви е забранен."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -71,36 +71,36 @@ msgstr "съобщения"
msgid "new"
msgstr "ново"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "премахване на „%s” (на %s дни)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "премахване на „%s”"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "проверка на източника „%s”"
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "не е намерен източник на адрес „%s”"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "данните от източника предизвикаха грешка в модула XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "е обработен нормално от %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "създаване на нова страницa „%s”"
@@ -263,47 +263,47 @@ msgstr ""
"Променливата от обкръжението „REV” не е указана. Програмата не се изпълнява "
"като „svn post-commit hook”. Няма да бъдат разпратени известявания"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "пропускане на невалидното име на файл „%s”"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "премахване на старата страница „%s”"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "сканиране на „%s”"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "обновяване на страницата „%s”"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "обновяване на страницата „%s”, съдържаща препратки към „%s”"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "обновяване на страницата „%s”, зависеща от „%s”"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "обновяване на „%s” и осъвременяване на обратните връзки"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "премахване на „%s” понеже не се генерира от „%s”"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki: неуспех при обновяване на страницата „%s”"
@@ -335,7 +335,7 @@ msgstr "готово"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "обновяване на страниците от уики „%s”: %s от потребител „%s”"
@@ -376,13 +376,13 @@ msgstr "успешно генериране на %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "формат: ikiwiki [опции] източник местоназначение"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"При използване на пареметъра „--cgi” е необходимо да се укаже и "
"местоположението на уикито чрез параметъра „--url”"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Грешка"
@@ -390,7 +390,7 @@ msgstr "Грешка"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "открита е циклична завидимост при %s на „%s” на дълбочина %i"
diff --git a/po/cs.po b/po/cs.po
index 433f4a5ea..1f6e6bcfc 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-07 11:59+0100\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -19,37 +19,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Nejprve se musíte přihlásit."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Nastavení uloženo."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "diskuse"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "vytvářím %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "upravuji %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Jste vyhoštěni."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -70,36 +70,36 @@ msgstr "příspěvky"
msgid "new"
msgstr "nový"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "expiruji %s (stará %s dnů)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "expiruji %s"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "kontroluji zdroj %s ..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "nemohu najít zdroj na %s"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "zdroj shodil XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "zpracováno ok %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "vytvářím novou stránku %s"
@@ -257,47 +257,47 @@ msgid ""
msgstr ""
"REV není nastavena, není spuštěna ze svn post-commit, nemohu zaslat oznámení"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "přeskakuji chybné jméno souboru %s"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "odstraňuji starou stránku %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "prohledávám %s"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "zpracovávám %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "zpracovávám %s, která odkazuje na %s"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "zpracovávám %s, která závisí na %s"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "zpracovávám %s, aby se aktualizovaly zpětné odkazy"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "odstraňuji %s, již není zpracovávána %s"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki: nelze zpracovat %s"
@@ -329,7 +329,7 @@ msgstr "hotovo"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "aktualizace %s (%s) uživatelem %s"
@@ -370,11 +370,11 @@ msgstr "%s byl úspěšně vytvořen"
msgid "usage: ikiwiki [options] source dest"
msgstr "použití: ikiwiki [volby] zdroj cíl"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Při použití --cgi musíte pomocí --url zadat url k wiki"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Chyba"
@@ -382,7 +382,7 @@ msgstr "Chyba"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "Byla rozpoznána smyčka direktivy %s na %s v hloubce %i"
diff --git a/po/es.po b/po/es.po
index b39851725..ea58fbe82 100644
--- a/po/es.po
+++ b/po/es.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: es\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-13 18:43-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-02-12 10:31+0100\n"
"Last-Translator: Víctor Moral <victor@taquiones.net>\n"
"Language-Team: spanish <es@li.org>\n"
@@ -20,37 +20,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Antes es necesario identificarse."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Las preferencias se han guardado."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr "la página %s no es modificable"
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "comentarios"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "creando página %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "modificando página %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Ha sido expulsado."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
"registro fallido, ¿ tal vez es necesario activar las cookies en el "
@@ -73,36 +73,36 @@ msgstr "entradas"
msgid "new"
msgstr "nuevo"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "%s caducada (%s días de antigüedad)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "%s caducada"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "comprobando entrada %s ..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "no puedo encontrar la entrada en %s"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "¡ la entrada ha provocado un error fatal en XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "proceso completado con éxito a %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "creando nueva página %s"
@@ -265,49 +265,49 @@ msgstr ""
"La variable de entorno REV no está definida, por lo que no puede funcionar "
"svn post-commit; no puedo enviar notificación alguna."
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "ignorando el archivo %s porque su no nombre no es correcto"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "eliminando la antigua página %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "explorando %s"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "convirtiendo %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "convirtiendo la página %s, la cual referencia a %s"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "convirtiendo la página %s, la cual depende de %s"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr ""
"convirtiendo la página %s para actualizar la lista de páginas que hacen "
"referencia a ella."
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "eliminando la página %s puesto que ya no se deriva de %s"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikwiki: no puedo convertir la página %s"
@@ -339,7 +339,7 @@ msgstr "completado"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "actualizado el wiki %s y la página %s por el usuario %s"
@@ -381,13 +381,13 @@ msgstr "creado con éxito el programa envoltorio %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "uso: ikiwiki [opciones] origen destino"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Es obligatorio especificar un url al wiki con el parámetro --url si se "
"utiliza el parámetro --cgi"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Error"
@@ -395,7 +395,7 @@ msgstr "Error"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 7a4ce1db2..d8074ee4d 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-22 22:12+0100\n"
"Last-Translator: Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>\n"
"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
@@ -21,37 +21,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Vous devez d'abord vous identifier."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Les préférences ont été enregistrées."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "Discussion"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "Création de %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "Édition de %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Vous avez été banni."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
"Échec de l'identification, vous devriez peut-être autoriser les cookies."
@@ -73,36 +73,36 @@ msgstr "Messages"
msgid "new"
msgstr "Nouveau"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "Fin de validité de %s (date de %s jours)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "Fin de validité de %s"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "Vérification du flux %s..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "Impossible de trouver de flux à %s"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "Plantage du flux XML::Feed !"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "A été correctement traité à %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "Création de la nouvelle page %s"
@@ -265,47 +265,47 @@ msgstr ""
"après un commit sur le svn (« hook post-commit »), impossible d'envoyer des "
"notifications"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "Saut du nom de fichier incorrect %s"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "Suppression de l'ancienne page %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "Parcours de %s"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "Rendu de %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "Rendu de %s, qui est lié à %s"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "Rendu de %s, qui dépend de %s"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "Rendu de %s, afin de mettre à jour ses rétroliens"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "Suppression de %s, qui n'est plus rendu par %s"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki : impossible d'effectuer le rendu de %s"
@@ -337,7 +337,7 @@ msgstr "Terminé"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "Wiki %s, les pages %s ont été mises à jour par %s"
@@ -379,13 +379,13 @@ msgstr "%s a été créé avec succès"
msgid "usage: ikiwiki [options] source dest"
msgstr "Syntaxe : ikiwiki [options] source destination"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Vous devez indiquer une url vers le wiki par --url lors de l'utilisation de "
"--cgi"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Erreur"
@@ -393,7 +393,7 @@ msgstr "Erreur"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/po/gu.po b/po/gu.po
index 421810b49..05cd48ffe 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki-gu\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-11 16:05+0530\n"
"Last-Translator: Kartik Mistry <kartik.mistry@gmail.com>\n"
"Language-Team: Gujarati <team@utkarsh.org>\n"
@@ -19,37 +19,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "તમારે પ્રથમ લોગ ઇન થવું પડશે."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "પ્રાથમિકતાઓ સંગ્રહાઇ."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "ચર્ચા"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "%s બનાવે છે"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "%s સુધારે છે"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "તમારા પર પ્રતિબંધ છે."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -70,36 +70,36 @@ msgstr "પોસ્ટ"
msgid "new"
msgstr "નવું"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "જુનું કરે છે %s (%s દિવસો જુનું)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "જુનું કરે છે %s"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "ફીડ %s ચકાસે છે ..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "%s પર ફીડ મળી શક્યું નહી"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "ફીડ ભાંગી પડ્યું XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "આના પર બરાબર છે %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "નવું પાનું %s બનાવે છે"
@@ -255,47 +255,47 @@ msgid ""
"notifications"
msgstr "REV ગોઠવેલ નથી, svn post-commit hook માંથી ચાલતું નથી, નોંધ મોકલી શકાશે નહી"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "ખરાબ ફાઇલ નામ છોડી દે છે %s"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "જુનાં પાનાં દૂર કરે છે %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "%s શોધે છે"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "રેન્ડર કરે છે %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "રેન્ડર કરે છે %s, જે %s સાથે જોડાણ ધરાવે છે"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "રેન્ડર કરે છે %s, જે %s પર આધારિત છે"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "રેન્ડર કરે છે %s, તેનાં પાછળનાં જોડાણો સુધારવા માટે"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "દૂર કરે છે %s, હવે %s વડે રેન્ડર કરાતું નથી"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki: %s રેન્ડર કરી શકાતું નથી"
@@ -327,7 +327,7 @@ msgstr "સંપૂર્ણ"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "%s નો સુધારો %s નાં %s વડે"
@@ -368,11 +368,11 @@ msgstr "સફળતાપૂર્વક પેદા કરેલ છે %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "ઉપયોગ: ikiwiki [વિકલ્પો] source dest"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "જ્યારે --cgi ઉપયોગ કરતાં હોય ત્યારે વીકીનું યુઆરએલ સ્પષ્ટ કરવું જ પડશે"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "ક્ષતિ"
@@ -380,7 +380,7 @@ msgstr "ક્ષતિ"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "%s પર શોધાયેલ લુપ %s પર ચલાવે છે %i ઉંડાણ પર"
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index 1b63d45dd..30c134d8f 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-13 22:40-0500\n"
+"POT-Creation-Date: 2007-02-14 21:12-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -20,37 +20,37 @@ msgstr ""
msgid "You need to log in first."
msgstr ""
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr ""
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr ""
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr ""
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr ""
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -71,36 +71,36 @@ msgstr ""
msgid "new"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr ""
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr ""
@@ -256,47 +256,47 @@ msgid ""
"notifications"
msgstr ""
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr ""
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr ""
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr ""
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr ""
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr ""
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr ""
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr ""
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr ""
@@ -328,7 +328,7 @@ msgstr ""
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr ""
@@ -369,11 +369,11 @@ msgstr ""
msgid "usage: ikiwiki [options] source dest"
msgstr ""
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr ""
@@ -381,7 +381,7 @@ msgstr ""
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/po/pl.po b/po/pl.po
index 8cdcd67d8..8b4f7b491 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki 1.37\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-05 16:33+100\n"
"Last-Translator: Paweł Tęcza <ptecza@net.icm.edu.pl>\n"
"Language-Team: Debian L10n Polish <debian-l10n-polish@lists.debian.org>\n"
@@ -20,37 +20,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Konieczne jest zalogowanie się."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Ustawienia zostały zapisane."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "dyskusja"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "tworzenie strony %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "edycja strony %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Dostęp został zabroniony przez administratora."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -71,36 +71,36 @@ msgstr "wpisy"
msgid "new"
msgstr "nowy wpis"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "wygasający wpis %s (ma już %s dni)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "wygasający wpis %s"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "sprawdzanie kanału RSS %s\t..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "nie znaleziono kanału RSS pod adresem %s"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "awaria kanału RSS w module XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "przetworzony kanał RSS w dniu %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "tworzenie nowej strony %s"
@@ -267,47 +267,47 @@ msgstr ""
"Brak możliwości wysłania powiadomień przez post-commit SVN-a z powodu "
"nieustawionego parametru REV"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "pomijanie nieprawidłowego pliku %s"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "usuwanie starej strony %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "przeszukiwanie strony %s"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "tworzenie strony %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "tworzenie strony %s z odnośnikiem do strony %s"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "tworzenie strony %s zależącej od strony %s"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "tworzenie strony %s w celu aktualizacji jej powrotnych odnośników"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "usuwanie strony %s nie tworzonej już przez %s"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki: awaria w trakcie tworzenie strony %s"
@@ -339,7 +339,7 @@ msgstr "gotowe"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "aktualizacja stron wiki %s %s przez użytkownika %s"
@@ -380,13 +380,13 @@ msgstr "strona pomyślnie utworzona %s"
msgid "usage: ikiwiki [options] source dest"
msgstr "użycie: ikiwiki [parametry] źródło cel"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Użycie parametru --cgi wymaga podania adresu URL do wiki za pomocą parametru "
"--url"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Błąd"
@@ -394,7 +394,7 @@ msgstr "Błąd"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "polecenie preprocesora %s wykryte w %s na głębokości %i"
diff --git a/po/sv.po b/po/sv.po
index 6717efb92..e07799328 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-10 23:47+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
@@ -19,37 +19,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Du måste logga in först."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Inställningar sparades."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "diskussion"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "skapar %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "redigerar %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Du är bannlyst."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -70,36 +70,36 @@ msgstr "inlägg"
msgid "new"
msgstr "ny"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "låter %s gå ut (%s dagar gammal)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "låter %s gå ut"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "kontrollerar kanalen %s ..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "kunde inte hitta kanalen på %s"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "kanalen kraschade XML::Feed!"
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "behandlad ok på %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "skapar nya sidan %s"
@@ -259,47 +259,47 @@ msgstr ""
"REV är inte inställt, kör inte från svn post-commit-hook, kan inte skicka "
"notifieringar"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "hoppar över felaktigt filnamn %s"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "tar bort gammal sida %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "söker av %s"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "ritar upp %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "ritar upp %s, vilken länkar till %s"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "ritar upp %s, vilken är beroende av %s"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "ritar upp %s, för att uppdatera dess bakåtlänkar"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "tar bort %s, som inte längre ritas upp av %s"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki: kan inte rita upp %s"
@@ -331,7 +331,7 @@ msgstr "klar"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "uppdatering av %s, %s av %s"
@@ -372,11 +372,11 @@ msgstr "generering av %s lyckades"
msgid "usage: ikiwiki [options] source dest"
msgstr "användning: ikiwiki [flaggor] källa mål"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr "Måste ange url till wiki med --url när --cgi används"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Fel"
@@ -384,7 +384,7 @@ msgstr "Fel"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "%s förbehandlingsslinga detekterades på %s, djup %i"
diff --git a/po/vi.po b/po/vi.po
index 787336ca0..3395517fd 100644
--- a/po/vi.po
+++ b/po/vi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: ikiwiki\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-11 22:01-0500\n"
+"POT-Creation-Date: 2007-02-14 20:42-0500\n"
"PO-Revision-Date: 2007-01-13 15:31+1030\n"
"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
@@ -20,37 +20,37 @@ msgstr ""
msgid "You need to log in first."
msgstr "Trước tiên bạn cần phải đăng nhập."
-#: ../IkiWiki/CGI.pm:262
+#: ../IkiWiki/CGI.pm:265
msgid "Preferences saved."
msgstr "Tùy thích đã được lưu."
-#: ../IkiWiki/CGI.pm:327
+#: ../IkiWiki/CGI.pm:330
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:415 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:418 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:164 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:97
#: ../IkiWiki/Render.pm:165
msgid "discussion"
msgstr "thảo luận"
-#: ../IkiWiki/CGI.pm:460
+#: ../IkiWiki/CGI.pm:463
#, perl-format
msgid "creating %s"
msgstr "đang tạo %s"
-#: ../IkiWiki/CGI.pm:477 ../IkiWiki/CGI.pm:520
+#: ../IkiWiki/CGI.pm:480 ../IkiWiki/CGI.pm:506 ../IkiWiki/CGI.pm:539
#, perl-format
msgid "editing %s"
msgstr "đang sửa %s"
-#: ../IkiWiki/CGI.pm:628
+#: ../IkiWiki/CGI.pm:647
msgid "You are banned."
msgstr "Bạn bị cấm ra."
-#: ../IkiWiki/CGI.pm:660
+#: ../IkiWiki/CGI.pm:679
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -71,36 +71,36 @@ msgstr "bài"
msgid "new"
msgstr "mới"
-#: ../IkiWiki/Plugin/aggregate.pm:206
+#: ../IkiWiki/Plugin/aggregate.pm:211
#, perl-format
msgid "expiring %s (%s days old)"
msgstr "đang mãn hạn %s (cũ %s ngày)"
-#: ../IkiWiki/Plugin/aggregate.pm:213
+#: ../IkiWiki/Plugin/aggregate.pm:218
#, perl-format
msgid "expiring %s"
msgstr "đang mãn hạn %s"
-#: ../IkiWiki/Plugin/aggregate.pm:236
+#: ../IkiWiki/Plugin/aggregate.pm:241
#, perl-format
msgid "checking feed %s ..."
msgstr "đang kiểm tra nguồn tin %s ..."
-#: ../IkiWiki/Plugin/aggregate.pm:241
+#: ../IkiWiki/Plugin/aggregate.pm:246
#, perl-format
msgid "could not find feed at %s"
msgstr "không tìm thấy nguồn tin ở %s"
-#: ../IkiWiki/Plugin/aggregate.pm:250
+#: ../IkiWiki/Plugin/aggregate.pm:255
msgid "feed crashed XML::Feed!"
msgstr "nguồn tin đã gây ra XML::Feed sụp đổ."
-#: ../IkiWiki/Plugin/aggregate.pm:273
+#: ../IkiWiki/Plugin/aggregate.pm:278
#, perl-format
msgid "processed ok at %s"
msgstr "đã xử lý được ở %s"
-#: ../IkiWiki/Plugin/aggregate.pm:328
+#: ../IkiWiki/Plugin/aggregate.pm:333
#, perl-format
msgid "creating new page %s"
msgstr "đang tạo trang mới %s"
@@ -259,47 +259,47 @@ msgid ""
msgstr ""
"Chưa đặt REV, không chạy từ móc sau gài vào nên không thể gửi thông báo"
-#: ../IkiWiki/Render.pm:247 ../IkiWiki/Render.pm:267
+#: ../IkiWiki/Render.pm:251 ../IkiWiki/Render.pm:271
#, perl-format
msgid "skipping bad filename %s"
msgstr "đang bỏ qua tên tập tin sai %s"
-#: ../IkiWiki/Render.pm:307
+#: ../IkiWiki/Render.pm:311
#, perl-format
msgid "removing old page %s"
msgstr "đang gỡ bỏ trang cũ %s"
-#: ../IkiWiki/Render.pm:326
+#: ../IkiWiki/Render.pm:330
#, perl-format
msgid "scanning %s"
msgstr "đang quét %s"
-#: ../IkiWiki/Render.pm:335
+#: ../IkiWiki/Render.pm:339
#, perl-format
msgid "rendering %s"
msgstr "đang vẽ %s"
-#: ../IkiWiki/Render.pm:347
+#: ../IkiWiki/Render.pm:351
#, perl-format
msgid "rendering %s, which links to %s"
msgstr "đang vẽ %s mà liên kết tới %s"
-#: ../IkiWiki/Render.pm:364
+#: ../IkiWiki/Render.pm:368
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr "đang vẽ %s mà phụ thuộc vào %s"
-#: ../IkiWiki/Render.pm:402
+#: ../IkiWiki/Render.pm:406
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr "đang vẽ %s để cập nhật các liên kết ngược của nó"
-#: ../IkiWiki/Render.pm:414
+#: ../IkiWiki/Render.pm:418
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr "đang gỡ bỏ %s, không còn được vẽ lại bởi %s"
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:444
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr "ikiwiki: không thể vẽ %s"
@@ -331,7 +331,7 @@ msgstr "xong"
#. translators: A list of one or more pages that were changed,
#. translators: And the name of the user making the change.
#. translators: This is used as the subject of a commit email.
-#: ../IkiWiki/UserInfo.pm:139
+#: ../IkiWiki/UserInfo.pm:146
#, perl-format
msgid "update of %s's %s by %s"
msgstr "cập nhật %2$s của %1$s bởi %3$s"
@@ -372,12 +372,12 @@ msgstr "%s đã được tạo ra"
msgid "usage: ikiwiki [options] source dest"
msgstr "cách sử dụng: ikiwiki [tùy chọn] nguồn đích"
-#: ../IkiWiki.pm:103
+#: ../IkiWiki.pm:104
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
"Cần phải xác định địa chỉ URL tới wiki với « --url » khi dùng « --cgi »"
-#: ../IkiWiki.pm:148 ../IkiWiki.pm:149
+#: ../IkiWiki.pm:151 ../IkiWiki.pm:152
msgid "Error"
msgstr "Lỗi"
@@ -385,7 +385,7 @@ msgstr "Lỗi"
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:532
+#: ../IkiWiki.pm:549
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr "vòng lặp tiền xử lý %s được phát hiện trên %s ở độ sâu %i"
diff --git a/templates/editpage.tmpl b/templates/editpage.tmpl
index f63a4b089..68b7d1942 100644
--- a/templates/editpage.tmpl
+++ b/templates/editpage.tmpl
@@ -21,6 +21,18 @@ Conflict markers have been inserted into the page content. Reconcile the
conflict and commit again to save your changes.
</p>
</TMPL_IF>
+<TMPL_IF NAME="FAILED_SAVE">
+<p>
+<b>Failed to save your changes.</b>
+</p>
+<p>
+Your changes were not able to be saved to disk. The system gave the error:
+<blockquote>
+<TMPL_VAR ERROR_MESSAGE>
+</blockquote>
+Your changes are preserved below, and you can try again to save them.
+</p>
+</TMPL_IF>
<TMPL_VAR FORM-START>
<div class="header">
<span><TMPL_VAR INDEXLINK>/ <TMPL_VAR FORM-TITLE></span>