Subversion Repositories LCARS

Compare Revisions

Last modification

Ignore whitespace Rev 23 → Rev 22

/trunk/tools/network/news/newsstat/newsstat.pl
1,7 → 1,6
#!/usr/bin/env perl
use strict;
use warnings;
require 5.004;
 
#use diagnostics;
use utf8;
13,67 → 12,23
binmode STDOUT, ':encoding(UTF-8)';
binmode STDERR, ':encoding(UTF-8)';
 
## L10n
use locale ':not_characters';
 
# setlocale( LC_MESSAGES, '' );
require Number::Format;
 
## i18n
## FIXME: Automatically include resolved '.' in @INC
# FIXME: Automatically include resolved '.' in @INC
# print join "\n", @INC;
 
use locale ':not_characters';
use Locale::TextDomain ('de.pointedears.newsstat');
use POSIX ('locale_h');
use POSIX ('locale_h');
use Locale::Messages qw (bind_textdomain_filter
bind_textdomain_codeset
turn_utf_8_on);
 
bind_textdomain_filter 'de.pointedears.newsstat', \&turn_utf_8_on;
bind_textdomain_codeset
turn_utf_8_on);
#setlocale( LC_MESSAGES, '' );
bind_textdomain_filter 'de.pointedears.newsstat', \&turn_utf_8_on;
bind_textdomain_codeset 'de.pointedears.newsstat', 'utf-8';
 
require Mail::Message;
require DateTime;
require DateTime::Format::Mail;
 
# See comments in previous example
my ( $thousands_sep, $mon_thousands_sep, $grouping, $decimal_point ) =
@{ localeconv() }{ 'thousands_sep', 'mon_thousands_sep', 'grouping',
'decimal_point' };
 
# Apply defaults if values are missing
$thousands_sep = $mon_thousands_sep unless $thousands_sep;
$thousands_sep = ' ' unless $thousands_sep;
 
# grouping and mon_grouping are packed lists
# of small integers (characters) telling the
# grouping (thousand_seps and mon_thousand_seps
# being the group dividers) of numbers and
# monetary quantities. The integers' meanings:
# 255 means no more grouping, 0 means repeat
# the previous grouping, 1-254 means use that
# as the current grouping. Grouping goes from
# right to left (low to high digits). In the
# below we cheat slightly by never using anything
# else than the first grouping (whatever that is).
my @grouping;
if ($grouping)
{
@grouping = unpack( "C*", $grouping );
}
else
{
@grouping = (3);
}
 
## FIXME: Why don't the defaults work already?
my $formatter = new Number::Format(
-decimal_point => $decimal_point,
-thousands_sep => $thousands_sep,
 
# -grouping => $grouping[0]
);
 
###################### USER CONFIGURATIONS ############################
 
## The name of the group to do stats for
583,76 → 538,61
sub display_results
{
#################### DISPLAY RESULTS #####################
println( "=" x 76 );
print "=" x 76, "\n";
printf "%s\n",
centred(
__x( "Analysis of posts to {newsgroup}", newsgroup => $newsgroup_name ),
76 );
println( "=" x 76 );
print "=" x 76, "\n";
printf "%s\n",
centred(
__(
"(compiled with a script by Thomas 'PointedEars' Lahn, based on work by\nGarry Knight et al.)"
),
__
"(compiled with a script by Thomas 'PointedEars' Lahn, based on work by\nGarry Knight et al.)",
76
);
print "\n\n";
printf __"Total posts considered: %s over %d days\n",
$formatter->format_number($totalposts),
$formatter->format_number($numdays);
my $time_locale = setlocale(LC_TIME);
printf __"Total posts considered: %s over %d days" . "\n",
commify($totalposts),
$numdays;
my $time_locale = setlocale(LC_TIME);
my $earliest_datetime = DateTime->from_epoch(
epoch => $earliest,
locale => $time_locale,
epoch => $earliest,
locale => $time_locale,
time_zone => 'UTC',
);
my $latest_datetime = DateTime->from_epoch(
epoch => $latest,
locale => $time_locale,
epoch => $latest,
locale => $time_locale,
time_zone => 'UTC',
);
my $datetime_format = '%a, %Y-%m-%dT%H:%M:%S %Z';
printf __"Earliest article: %s\n",
$earliest_datetime->strftime($datetime_format);
printf __"Latest article: %s\n",
$latest_datetime->strftime($datetime_format);
printf __"Original articles: %s; replies: %s\n",
$formatter->format_number($origposts),
$formatter->format_number($replies);
printf __"Total size of posts: %s bytes (%s)" . "\n",
$formatter->format_number($totsize),
$formatter->format_bytes( $totsize, ( 'precision' => 1, 'mode' => 'iec' ) );
printf __"Average %s articles per day, %s per day, %s bytes per article\n",
$formatter->format_number( int( $totalposts / $numdays ) ),
$formatter->format_bytes( $totsize / $numdays, ( 'mode' => 'iec' ) ),
$formatter->format_number( int( $totsize / $totalposts ) );
 
printf __"Earliest article" . ": %s\n", $earliest_datetime->strftime($datetime_format);
printf __"Latest article" . ": %s\n", $latest_datetime->strftime($datetime_format);
printf __"Original articles: %s; replies" . ": %s\n",
commify($origposts),
commify($replies);
printf __"Total size of posts: %s bytes (%s KiB) (%.2f MiB)" . "\n",
commify($totsize), commify( int( $totsize / 1024 ) ), $totsize / 1048576; #
printf __
"Average %s articles per day, %.2f MiB per day, %s bytes per article\n",
commify( int( $totalposts / $numdays ) ), $totsize / $numdays / 1048576,
commify( int( $totsize / $totalposts ) );
my $count = keys %data;
printf __"Total headers: %s; bodies: %s\n",
$formatter->format_bytes(
$totheader, ( 'precision' => 1, 'mode' => 'iec' )
),
$formatter->format_bytes( $totbody, ( 'precision' => 1, 'mode' => 'iec' ) );
printf __"Total headers: %s KiB; bodies: %s KiB\n",
commify( int( $totheader / 1024 ) ), commify( int( $totbody / 1024 ) );
printf __
"Body text - quoted: %s; original: %s = %s%%; sigs: %s\n",
$formatter->format_bytes(
$totquoted, ( 'precision' => 1, 'mode' => 'iec' )
),
$formatter->format_bytes( $totorig, ( 'precision' => 1, 'mode' => 'iec' ) ),
$formatter->format_number( ( $totorig * 100 ) / ( $totorig + $totquoted ) ),
$formatter->format_bytes( $totsig, ( 'precision' => 1, 'mode' => 'iec' ) );
printf __"Total number of posters: %s, average %s per poster\n",
$formatter->format_number($count),
$formatter->format_bytes( $totsize / $count,
( 'precision' => 1, 'mode' => 'iec' ) );
"Body text - quoted: %s KiB; original: %s KiB = %02.2f%%; sigs: %s KiB\n",
commify( int( $totquoted / 1024 ) ), commify( int( $totorig / 1024 ) ),
( $totorig * 100 ) / ( $totorig + $totquoted ),
commify( int( $totsig / 1024 ) );
printf __"Total number of posters: %s, average %s bytes per poster\n",
commify($count), commify( int( $totsize / $count ) ); #/
$count = keys %threads;
printf __"Total number of threads: %s, average %s per thread\n",
$formatter->format_number($count),
$formatter->format_bytes( $totsize / $count,
( 'precision' => 1, 'mode' => 'iec' ) );
printf __"Total number of user agents: %d\n",
$formatter->format_number( scalar keys %agents );
print "\n", "=" x 76, "\n" ;
printf __"Total number of threads: %s, average %s bytes per thread\n",
commify($count), commify( int( $totsize / $count ) ); #/
printf __"Total number of user agents: %d\n", scalar keys %agents;
print "\n", "=" x 76, "\n";
 
########################################
## Show posters by article count Sec 1;
########################################
668,9 → 608,7
}
printf "%s\n",
centred(
__x( "Top {count} posters by number of articles", count => $topposters ),
76
);
__x( "Top {count} posters by number of articles", count => $topposters ), 76 );
print "=" x 76, "\n";
my $i = 0;
foreach
700,8 → 638,7
printf "%s\n",
centred(
__x( "Top {count} posters by article size in KiB", count => $topposters ),
76
);
76 );
print "=" x 76, "\n";
my $i = 0;
foreach
805,8 → 742,7
$count = $topthreads;
}
printf "%s\n",
centred(
__x( "Top {count} threads by no. of articles", count => $topthreads ),
centred( __x( "Top {count} threads by no. of articles", count => $topthreads ),
76 );
print "=" x 76, "\n";
my $i = 0;
837,8 → 773,8
$count = $topthreads;
}
printf "%s\n",
centred(
__x( "Top {count} threads by size in KiB", count => $topthreads ), 76 );
centred( __x( "Top {count} threads by size in KiB", count => $topthreads ),
76 );
print "=" x 76, "\n";
my $i = 0;
foreach my $thread (
869,8 → 805,7
$count = $topcrossposts;
}
printf "%s\n",
centred(
__x( "Top {count} cross-posted groups", count => $topcrossposts ), 76 );
centred( __x( "Top {count} cross-posted groups", count => $topcrossposts ), 76 );
print "=" x 76, "\n";
my $i = 0;
foreach
926,8 → 861,7
printf "%s\n",
centred(
__x( "Top {count} user agents by number of posts", count => $topagents ),
76
);
76 );
print "=" x 76, "\n";
my $i = 0;
foreach my $agent (
956,8 → 890,7
{
$count = $toptz;
}
printf "%s\n",
centred( __x( "Top {count} time zones", count => $toptz ), 76 );
printf "%s\n", centred( __x("Top {count} time zones", count => $toptz), 76 );
print "=" x 76, "\n";
my $i = 0;
foreach my $zone ( sort { $tz{$b} <=> $tz{$a} } keys %tz )
1004,20 → 937,37
###########################
## Put commas into a number
###########################
# Get some of locale's numeric formatting parameters
my ($thousands_sep, $grouping) =
@{localeconv()}{'thousands_sep', 'grouping'};
# Apply defaults if values are missing
$thousands_sep = ',' unless $thousands_sep;
# grouping and mon_grouping are packed lists
# of small integers (characters) telling the
# grouping (thousand_seps and mon_thousand_seps
# being the group dividers) of numbers and
# monetary quantities. The integers' meanings:
# 255 means no more grouping, 0 means repeat
# the previous grouping, 1-254 means use that
# as the current grouping. Grouping goes from
# right to left (low to high digits). In the
# below we cheat slightly by never using anything
# else than the first grouping (whatever that is).
my @grouping;
if ($grouping) {
@grouping = unpack("C*", $grouping);
} else {
@grouping = (3);
}
 
sub commify
{
local $_ = shift;
my $number = $_;
$_ = int; # Chop non-integer part
#1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
$_ = int; # Chop non-integer part
1 while
s/([-+]?\d)(\d{$grouping[0]}($|\Q$thousands_sep\E))/$1$thousands_sep$2/;
my $int_part = $_;
my $real_part = '';
if ( $number =~ /(\Q$decimal_point\E\d+)$/ )
{
$real_part = $1;
}
return $int_part . $real_part;
s/(\d)(\d{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/;
return $_;
}
 
################################################################
1034,7 → 984,7
 
sub usage
{
println( __ "usage: newsstat.pl NEWS.GROUP" );
print __"usage: newsstat.pl NEWS.GROUP\n";
exit 1;
}
 
1048,8 → 998,3
my ( $level, @msg ) = @_;
print STDERR @msg, "\n" if $level >= DEBUG;
}
 
sub println
{
print @_, "\n";
}
/trunk/tools/network/news/newsstat/po/de.po
3,12 → 3,13
# This file is distributed under the same license as the newsstat package.
# Thomas 'PointedEars' Lahn <startrek@PointedEars.de>, 2012.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: newsstat r23\n"
"Project-Id-Version: newsstat r22\n"
"Report-Msgid-Bugs-To: Thomas 'PointedEars' Lahn <startrek@PointedEars.de>\n"
"POT-Creation-Date: 2012-07-07 04:56+0200\n"
"PO-Revision-Date: 2012-06-07 04:57+0200\n"
"POT-Creation-Date: 2012-06-03 222:46+0200\n"
"PO-Revision-Date: 2012-06-03 22:46+0200\n"
"Last-Translator: Thomas 'PointedEars' Lahn <startrek@PointedEars.de>\n"
"Language-Team: German <startrek@PointedEars.de>\n"
"Language: de\n"
16,149 → 17,143
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
 
#: ../newsstat.pl:187
#: ../newsstat.pl:142
#, perl-brace-format
msgid "Can't cd to {newsgroup}: {error}\n"
msgstr ""
 
#: ../newsstat.pl:193
#: ../newsstat.pl:148
#, perl-brace-format
msgid "Can't open {newsgroup}: {error}\n"
msgstr ""
 
#: ../newsstat.pl:225
#: ../newsstat.pl:180
#, perl-brace-format
msgid "Can't open {file}: {error}\n"
msgstr ""
 
#: ../newsstat.pl:280
#: ../newsstat.pl:399
#: ../newsstat.pl:235 ../newsstat.pl:354
msgid "unknown"
msgstr "unbekannt"
 
#: ../newsstat.pl:534
#: ../newsstat.pl:489
#, perl-brace-format
msgid "Can't create XDATA: {error}\n"
msgstr ""
 
#: ../newsstat.pl:589
#: ../newsstat.pl:544
#, perl-brace-format
msgid "Analysis of posts to {newsgroup}"
msgstr "Analyse der Artikel in {newsgroup}"
 
#: ../newsstat.pl:595
msgid ""
"(compiled with a script by Thomas 'PointedEars' Lahn, based on work by\n"
"Garry Knight et al.)"
msgstr "(erstellt mit einem Skript von Thomas 'PointedEars' Lahn, basierend auf\n"
"der Arbeit von Garry Knight und anderen)"
#: ../newsstat.pl:550
msgid "(compiled with a script by Thomas 'PointedEars' Lahn, based on work by\nGarry Knight et al.)"
msgstr "(erstellt mit einem Skript von Thomas 'PointedEars' Lahn, basierend auf\nder Arbeit von Garry Knight und anderen)"
 
#: ../newsstat.pl:600
#: ../newsstat.pl:554
#, perl-format
msgid "Total posts considered: %s over %d days\n"
msgstr "Berücksichtigte Postings: %s über %d Tage\n"
 
#: ../newsstat.pl:615
#: ../newsstat.pl:557
#, perl-format
msgid "Earliest article: %s\n"
msgstr "Ältester Artikel: %s\n"
 
#: ../newsstat.pl:617
#: ../newsstat.pl:558
#, perl-format
msgid "Latest article: %s\n"
msgstr "Neuester Artikel: %s\n"
 
#: ../newsstat.pl:619
#: ../newsstat.pl:559
#, perl-format
msgid "Original articles: %s; replies: %s\n"
msgstr "Originalartikel: %s; Antworten: %s\n"
 
#: ../newsstat.pl:622
#: ../newsstat.pl:562
#, perl-format
msgid "Total size of posts: %s bytes (%s)\n"
msgstr "Postings insgesamt: %s Bytes (%s)\n"
msgid "Total size of posts: %s bytes (%s KiB) (%.2f MiB)\n"
msgstr "Postings insgesamt: %s Bytes (%s KiB) (%.2f MiB)\n"
 
#: ../newsstat.pl:625
#: ../newsstat.pl:565
#, perl-format
msgid "Average %s articles per day, %s per day, %s bytes per article\n"
msgstr "Durchschnittlich %s Artikel je Tag, %s je Tag, %s Bytes je Artikel\n"
msgid "Average %s articles per day, %.2f MiB per day, %s bytes per article\n"
msgstr "Durchschnittlich %s Artikel je Tag, %.2f MiB je Tag, %s Bytes je Artikel\n"
 
#: ../newsstat.pl:631
#: ../newsstat.pl:569
#, perl-format
msgid "Total headers: %s; bodies: %s\n"
msgstr "Header insgesamt: %s; Bodys: %s\n"
msgid "Total headers: %s KiB; bodies: %s KiB\n"
msgstr "Header insgesamt: %s KiB; Bodys: %s KiB\n"
 
#: ../newsstat.pl:637
#: ../newsstat.pl:572
#, perl-format
msgid "Body text - quoted: %s; original: %s = %s%%; sigs: %s\n"
msgstr "Body-Text - zitiert: %s; original: %s = %s%%; sigs: %s\n"
msgid "Body text - quoted: %s KiB; original: %s KiB = %02.2f%%; sigs: %s KiB\n"
msgstr "Body-Text - zitiert: %s KiB; original: %s KiB = %02.2f%%; sigs: %s KiB\n"
 
#: ../newsstat.pl:644
#: ../newsstat.pl:576
#, perl-format
msgid "Total number of posters: %s, average %s per poster\n"
msgstr "Poster insgesamt: %s, durchschnittlich %s je Poster\n"
msgid "Total number of posters: %s, average %s bytes per poster\n"
msgstr "Poster insgesamt: %s, durchschnittlich %s Bytes je Poster\n"
 
#: ../newsstat.pl:649
#: ../newsstat.pl:579
#, perl-format
msgid "Total number of threads: %s, average %s per thread\n"
msgstr "Threads insgesamt: %s, durchschnittlich %s je Thread\n"
msgid "Total number of threads: %s, average %s bytes per thread\n"
msgstr "Threads insgesamt: %s, durchschnittlich %s Bytes je Thread\n"
 
#: ../newsstat.pl:653
#: ../newsstat.pl:581
#, perl-format
msgid "Total number of user agents: %d\n"
msgstr "Benutzerprogramme insgesamt: %d\n"
 
#: ../newsstat.pl:671
#: ../newsstat.pl:599
#, perl-brace-format
msgid "Top {count} posters by number of articles"
msgstr "{count} häufigste Poster nach Anzahl der Artikel"
 
#: ../newsstat.pl:702
#: ../newsstat.pl:628
#, perl-brace-format
msgid "Top {count} posters by article size in KiB"
msgstr "{count} häufigste Poster nach Artikelgrösse in KiB"
 
#: ../newsstat.pl:734
#: ../newsstat.pl:659
#, perl-brace-format
msgid "Top {count} responders by original text (> 5 posts)"
msgstr "{count} häufigste Antwortende nach Originaltext (> 5 Postings)"
 
#: ../newsstat.pl:772
#: ../newsstat.pl:697
#, perl-brace-format
msgid "Bottom {count} responders by original text (> 5 posts)"
msgstr "{count} seltenste Antwortende nach Originaltext (> 5 Postings)"
 
#: ../newsstat.pl:809
#: ../newsstat.pl:733
#, perl-brace-format
msgid "Top {count} threads by no. of articles"
msgstr "Top {count} der Threads nach Anzahl der Artikel"
 
#: ../newsstat.pl:841
#: ../newsstat.pl:764
#, perl-brace-format
msgid "Top {count} threads by size in KiB"
msgstr "Top {count} der Threads nach Grösse in KiB"
 
#: ../newsstat.pl:873
#: ../newsstat.pl:796
#, perl-brace-format
msgid "Top {count} cross-posted groups"
msgstr "{count} häufigste Gruppen, in die gecrosspostet wurde"
 
#: ../newsstat.pl:900
#: ../newsstat.pl:823
#, perl-brace-format
msgid "Top {count} user agents by poster"
msgstr "{count} häufigste Benutzerprogramme je Poster"
 
#: ../newsstat.pl:928
#: ../newsstat.pl:851
#, perl-brace-format
msgid "Top {count} user agents by number of posts"
msgstr "{count} häufigste Benutzerprogramme nach der Anzahl Postings"
 
#: ../newsstat.pl:960
#, perl-brace-format
#: ../newsstat.pl:881
msgid "Top {count} time zones"
msgstr "{count} häufigste Zeitzonen"
 
#: ../newsstat.pl:1037
msgid "usage: newsstat.pl NEWS.GROUP"
#: ../newsstat.pl:949
msgid "usage: newsstat.pl NEWS.GROUP\n"
msgstr ""
 
/trunk/tools/network/news/newsstat/po/de.pointedears.newsstat.pot
1,162 → 1,159
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Thomas 'PointedEars' Lahn
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# newsstat LANGUAGE language file
# Copyright (C) 2012 Thomas 'PointedEars' Lahn
# This file is distributed under the same license as the newsstat package.
# Thomas 'PointedEars' Lahn <startrek@PointedEars.de>, 2012.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: newsstat r22\n"
"Report-Msgid-Bugs-To: Thomas 'PointedEars' Lahn <startrek@PointedEars.de>\n"
"POT-Creation-Date: 2012-07-07 04:56+0200\n"
"POT-Creation-Date: 2012-06-03 22:46+0200\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"
"Language: \n"
"Language: LANGUAGE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
 
#: ../newsstat.pl:187
#: ../newsstat.pl:142
#, perl-brace-format
msgid "Can't cd to {newsgroup}: {error}\n"
msgstr ""
 
#: ../newsstat.pl:193
#: ../newsstat.pl:148
#, perl-brace-format
msgid "Can't open {newsgroup}: {error}\n"
msgstr ""
 
#: ../newsstat.pl:225
#: ../newsstat.pl:180
#, perl-brace-format
msgid "Can't open {file}: {error}\n"
msgstr ""
 
#: ../newsstat.pl:280 ../newsstat.pl:399
#: ../newsstat.pl:235 ../newsstat.pl:354
msgid "unknown"
msgstr ""
 
#: ../newsstat.pl:534
#: ../newsstat.pl:489
#, perl-brace-format
msgid "Can't create XDATA: {error}\n"
msgstr ""
 
#: ../newsstat.pl:589
#: ../newsstat.pl:544
#, perl-brace-format
msgid "Analysis of posts to {newsgroup}"
msgstr ""
 
#: ../newsstat.pl:595
msgid ""
"(compiled with a script by Thomas 'PointedEars' Lahn, based on work by\n"
"Garry Knight et al.)"
#: ../newsstat.pl:550
msgid "(compiled with a script by Thomas 'PointedEars' Lahn, based on work by Garry Knight et al.)"
msgstr ""
 
#: ../newsstat.pl:600
#: ../newsstat.pl:554
#, perl-format
msgid "Total posts considered: %s over %d days\n"
msgstr ""
 
#: ../newsstat.pl:615
#: ../newsstat.pl:557
#, perl-format
msgid "Earliest article: %s\n"
msgstr ""
 
#: ../newsstat.pl:617
#: ../newsstat.pl:558
#, perl-format
msgid "Latest article: %s\n"
msgstr ""
 
#: ../newsstat.pl:619
#: ../newsstat.pl:559
#, perl-format
msgid "Original articles: %s; replies: %s\n"
msgid "Original articles: %s, replies: %s\n"
msgstr ""
 
#: ../newsstat.pl:622
#: ../newsstat.pl:562
#, perl-format
msgid "Total size of posts: %s bytes (%s)\n"
msgid "Total size of posts: %s bytes (%s KiB) (%.2f MiB)\n"
msgstr ""
 
#: ../newsstat.pl:625
#: ../newsstat.pl:565
#, perl-format
msgid "Average %s articles per day, %s per day, %s bytes per article\n"
msgid "Average %s articles per day, %.2f MiB per day, %s bytes per article\n"
msgstr ""
 
#: ../newsstat.pl:631
#: ../newsstat.pl:569
#, perl-format
msgid "Total headers: %s; bodies: %s\n"
msgid "Total headers: %s KiB bodies: %s KiB\n"
msgstr ""
 
#: ../newsstat.pl:637
#: ../newsstat.pl:572
#, perl-format
msgid "Body text - quoted: %s; original: %s = %s%%; sigs: %s\n"
msgid "Body text - quoted: %s KiB, original: %s KiB = %02.2f%%, sigs: %s KiB\n"
msgstr ""
 
#: ../newsstat.pl:644
#: ../newsstat.pl:576
#, perl-format
msgid "Total number of posters: %s, average %s per poster\n"
msgid "Total number of posters: %s, average %s bytes per poster\n"
msgstr ""
 
#: ../newsstat.pl:649
#: ../newsstat.pl:579
#, perl-format
msgid "Total number of threads: %s, average %s per thread\n"
msgid "Total number of threads: %s, average %s bytes per thread\n"
msgstr ""
 
#: ../newsstat.pl:653
#: ../newsstat.pl:581
#, perl-format
msgid "Total number of user agents: %d\n"
msgstr ""
 
#: ../newsstat.pl:671
#: ../newsstat.pl:599
#, perl-brace-format
msgid "Top {count} posters by number of articles"
msgstr ""
 
#: ../newsstat.pl:702
#: ../newsstat.pl:628
#, perl-brace-format
msgid "Top {count} posters by article size in KiB"
msgstr ""
 
#: ../newsstat.pl:734
#: ../newsstat.pl:659
#, perl-brace-format
msgid "Top {count} responders by original text (> 5 posts)"
msgstr ""
 
#: ../newsstat.pl:772
#: ../newsstat.pl:697
#, perl-brace-format
msgid "Bottom {count} responders by original text (> 5 posts)"
msgstr ""
 
#: ../newsstat.pl:809
#: ../newsstat.pl:733
#, perl-brace-format
msgid "Top {count} threads by no. of articles"
msgstr ""
 
#: ../newsstat.pl:841
#: ../newsstat.pl:764
#, perl-brace-format
msgid "Top {count} threads by size in KiB"
msgstr ""
 
#: ../newsstat.pl:873
#: ../newsstat.pl:796
#, perl-brace-format
msgid "Top {count} cross-posted groups"
msgstr ""
 
#: ../newsstat.pl:900
#: ../newsstat.pl:823
#, perl-brace-format
msgid "Top {count} user agents by poster"
msgstr ""
 
#: ../newsstat.pl:928
#: ../newsstat.pl:851
#, perl-brace-format
msgid "Top {count} user agents by number of posts"
msgstr ""
 
#: ../newsstat.pl:960
#, perl-brace-format
#: ../newsstat.pl:881
msgid "Top {count} time zones"
msgstr ""
 
#: ../newsstat.pl:1037
msgid "usage: newsstat.pl NEWS.GROUP"
#: ../newsstat.pl:949
msgid "usage: newsstat.pl NEWS.GROUP\n"
msgstr ""