* newsstat/* - Proper spacing in original text and translations - Use Number::Format - Improved commify() (unused) - Use println() - Organized imports
| /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,22 → 12,16 |
| 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 Locale::Messages qw (bind_textdomain_filter |
| 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'; |
| 36,44 → 29,6 |
| 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,23 → 538,22 |
| 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); |
| 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, |
| 612,47 → 566,33 |
| 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 ); |
| 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,21 → 937,38 |
| ########################### |
| ## 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 = $_; |
| #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; |
| s/(\d)(\d{$grouping[0]}($|$thousands_sep))/$1$thousands_sep$2/; |
| return $_; |
| } |
| return $int_part . $real_part; |
| } |
| ################################################################ |
| ## Returns a string with leading and trailing whitespace removed |
| 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 "" |