Print download and cache statistics.

This commit is contained in:
Bastian Kleineidam 2012-09-17 15:23:25 +02:00
parent dddd19be99
commit 6e1841cf1f
13 changed files with 344 additions and 194 deletions

View file

@ -8,6 +8,7 @@ Changes:
- doc: Mention 7-zip to extract the .tar.xz under Windows.
Closes: SF bug #3564733
- checking: Send a HTTP Do-Not-Track header.
- logging: Print download and cache statistics in text output logger.
Fixes:
- logging: Close logger properly on I/O errors.

View file

@ -25,31 +25,54 @@ from ..containers import LFUCache
from ..decorators import synchronized
_lock = get_lock("addrinfo")
addrinfos = LFUCache(size=10000)
class AddrInfo(object):
def __init__(self):
self.addrinfos = LFUCache(size=100)
self.misses = self.hits = 0
def getaddrinfo(self, host, port):
"""Determine address information for given host and port for
streaming sockets (SOCK_STREAM).
Already cached information is used."""
key = u"%s:%s" % (unicode(host), unicode(port))
if key in self.addrinfos:
self.hits += 1
value = self.addrinfos[key]
else:
self.misses += 1
# check if it's an ascii host
if isinstance(host, unicode):
try:
host = host.encode('ascii')
except UnicodeEncodeError:
pass
try:
value = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)
except socket.error:
value = sys.exc_info()[1]
except UnicodeError, msg:
args = dict(host=host, msg=str(msg))
value = LinkCheckerError(_("could not parse host %(host)r: %(msg)s") % args)
self.addrinfos[key] = value
if isinstance(value, Exception):
raise value
return value
_addrinfo = AddrInfo()
@synchronized(_lock)
def getaddrinfo (host, port):
def getaddrinfo(host, port):
"""Determine address information for given host and port for
streaming sockets (SOCK_STREAM).
Already cached information is used."""
key = u"%s:%s" % (unicode(host), unicode(port))
if key in addrinfos:
value = addrinfos[key]
else:
# check if it's an ascii host
if isinstance(host, unicode):
try:
host = host.encode('ascii')
except UnicodeEncodeError:
pass
try:
value = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM)
except socket.error:
value = sys.exc_info()[1]
except UnicodeError, msg:
args = dict(host=host, msg=str(msg))
value = LinkCheckerError(_("could not parse host %(host)r: %(msg)s") % args)
addrinfos[key] = value
if isinstance(value, Exception):
raise value
return value
return _addrinfo.getaddrinfo(host, port)
@synchronized(_lock)
def getstats():
"""Get cache statistics.
@return: hits and misses
@rtype tuple(int, int)
"""
return _addrinfo.hits, _addrinfo.misses

View file

@ -37,12 +37,17 @@ class RobotsTxt (object):
"""Initialize per-URL robots.txt cache."""
# mapping {URL -> parsed robots.txt}
self.cache = LFUCache(size=100)
self.hits = self.misses = 0
@synchronized(_lock)
def allows_url (self, roboturl, url, proxy, user, password, callback=None):
"""Ask robots.txt allowance."""
useragent = str(configuration.UserAgent)
if roboturl not in self.cache:
if roboturl in self.cache:
self.hits += 1
rp = self.cache[roboturl]
else:
self.misses = 1
rp = robotparser2.RobotFileParser(proxy=proxy, user=user,
password=password)
rp.set_url(roboturl)
@ -53,6 +58,4 @@ class RobotsTxt (object):
wait = rp.get_crawldelay(useragent)
callback(host, wait)
self.cache[roboturl] = rp
else:
rp = self.cache[roboturl]
return rp.can_fetch(useragent, url)

View file

@ -220,6 +220,7 @@ class FtpUrl (internpaturl.InternPatternUrl, proxysupport.ProxySupport):
buf = StringIO()
def stor_data (s):
"""Helper method storing given data"""
self.aggregate.add_download_bytes(len(s))
# limit the download size
if (buf.tell() + len(s)) > self.MaxFilesizeBytes:
raise LinkCheckerError(_("FTP file size too large"))

View file

@ -695,6 +695,7 @@ class HttpUrl (internpaturl.InternPatternUrl, proxysupport.ProxySupport):
read_content()"""
data = response.read()
self._size = len(data)
self.aggregate.add_download_bytes(self._size)
encoding = headers.get_content_encoding(self.headers)
if encoding in _supported_encodings:
try:

View file

@ -292,6 +292,10 @@ class UrlBase (object):
"""
return False
def is_local(self):
"""Return True for local (ie. file://) URLs."""
return self.is_file()
def add_warning (self, s, tag=None):
"""
Add a warning string.
@ -729,6 +733,8 @@ class UrlBase (object):
if self.size > self.MaxFilesizeBytes:
raise LinkCheckerError(_("File size too large"))
data = self.url_connection.read()
if not self.is_local():
self.aggregate.add_download_bytes(len(data))
return data, len(data)
def check_content (self):

View file

@ -21,12 +21,13 @@ import time
import threading
from .. import log, LOG_CHECK
from ..decorators import synchronized
from ..cache import urlqueue
from ..cache import urlqueue, addrinfo
from . import logger, status, checker, cleanup
_w3_time_lock = threading.Lock()
_threads_lock = threading.Lock()
_download_lock = threading.Lock()
class Aggregate (object):
"""Store thread-safe data collections for checker threads."""
@ -41,6 +42,7 @@ class Aggregate (object):
self.logger = logger.Logger(config)
self.threads = []
self.last_w3_call = 0
self.downloaded_bytes = 0
@synchronized(_threads_lock)
def start_threads (self):
@ -118,6 +120,7 @@ class Aggregate (object):
for t in self.threads:
t.stop()
self.connections.clear()
self.gather_statistics()
@synchronized(_threads_lock)
def is_finished (self):
@ -131,3 +134,21 @@ class Aggregate (object):
if time.time() - self.last_w3_call < 1:
time.sleep(1)
self.last_w3_call = time.time()
@synchronized(_download_lock)
def add_download_bytes(self, bytes):
"""Add gibven bytes to number of downloaded bytes.
@param bytes: number of bytes downloaded
@ptype bytes: int
"""
self.downloaded_bytes += bytes
def gather_statistics(self):
"""Gather download and cache statistics and send them to the
logger.
"""
robots_txt_stats = self.robots_txt.hits, self.robots_txt.misses
addrinfo_stats = addrinfo.getstats()
download_stats = self.downloaded_bytes
self.logger.add_statistics(robots_txt_stats, addrinfo_stats,
download_stats)

View file

@ -47,6 +47,11 @@ class Logger (object):
for logger in self.loggers:
logger.end_output()
def add_statistics(self, robots_txt_stats, addrinfo_stats, download_stats):
"""Add statistics to logger."""
for logger in self.loggers:
logger.add_statistics(robots_txt_stats, addrinfo_stats, download_stats)
def do_print (self, url_data):
"""Determine if URL entry should be logged or not."""
if self.complete:

View file

@ -82,12 +82,20 @@ class LogStatistics (object):
self.warnings_printed = 0
# number of internal errors
self.internal_errors = 0
# the set of checked domains
self.domains = set()
# link types
self.link_types = ContentTypes.copy()
# URL length statistics
self.max_url_length = 0
self.min_url_length = 0
self.avg_url_length = 0.0
self.avg_number = 0
# download stats
self.downloaded_bytes = None
# cache stats
self.robots_txt_stats = None
self.addrinfo_stats = None
def log_url (self, url_data, do_print):
"""Log URL statistics."""
@ -422,6 +430,12 @@ class Logger (object):
log.warn(LOG_CHECK, "internal error occurred")
self.stats.log_internal_error()
def add_statistics(self, robots_txt_stats, addrinfo_stats, download_stats):
"""Add cache and download statistics."""
self.stats.robots_txt_stats = robots_txt_stats
self.stats.addrinfo_stats = addrinfo_stats
self.stats.downloaded_bytes = download_stats
# the standard URL logger implementations
from .text import TextLogger

View file

@ -238,6 +238,12 @@ class TextLogger (Logger):
"""Write check statistic info."""
self.writeln()
self.writeln(_("Statistics:"))
if self.stats.downloaded_bytes > 0:
self.writeln(_("Downloaded: %s") % strformat.strsize(self.stats.downloaded_bytes))
hitsmisses = strformat.str_cache_stats(*self.stats.robots_txt_stats)
self.writeln(_("Robots.txt cache: %s") % hitsmisses)
hitsmisses = strformat.str_cache_stats(*self.stats.addrinfo_stats)
self.writeln(_("DNS cache: %s") % hitsmisses)
if len(self.stats.domains) > 1:
self.writeln(_("Number of domains: %d") % len(self.stats.domains))
if self.stats.number > 0:

View file

@ -317,3 +317,17 @@ def format_feature_warning (**kwargs):
be installed for a certain URL.
"""
return _("Could not import %(module)s for %(feature)s. Install %(module)s from %(url)s to use this feature.") % kwargs
def str_cache_stats(hits, misses):
"""Format hits and misses string for cache statistics.
@param hits: number of hits
@ptype hits: int
@param misses: number of cache misses
@ptype misses: int
@return: string with this and misses
@rtype: unicode
"""
strhits = _n("%d hit", "%d hits", hits) % hits
strmisses = _n("%d miss", "%d misses", misses) % misses
return u"%s, %s" % (strhits, strmisses)

202
po/de.po
View file

@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: $Id$\n"
"Report-Msgid-Bugs-To: calvin@users.sourceforge.net\n"
"POT-Creation-Date: 2012-09-02 19:55+0200\n"
"PO-Revision-Date: 2012-09-02 19:56+0100\n"
"POT-Creation-Date: 2012-09-16 11:53+0200\n"
"PO-Revision-Date: 2012-09-16 11:55+0100\n"
"Last-Translator: Bastian Kleineidam <calvin@users.sourceforge.net>\n"
"Language-Team: de <de@li.org>\n"
"Language: \n"
@ -15,7 +15,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../linkcheck/director/aggregator.py:71
#: ../linkcheck/director/aggregator.py:73
msgid "These URLs are still active:"
msgstr "Folgende URLs sind noch aktiv:"
@ -121,15 +121,15 @@ msgstr "Fehler bei Login URL: %(msg)s."
msgid "Could not start a new thread. Check that the current user is allowed to start new threads."
msgstr "Konnte keinen neuen Thread starten. Überprüfen sie, ob der aktuelle Benutzer neue Threads starten darf."
#: ../linkcheck/director/__init__.py:179
#: ../linkcheck/director/__init__.py:178
msgid "user interrupt; waiting for active threads to finish"
msgstr "Benutzerabbruch; warte auf Beendigung von aktiven Verbindungen"
#: ../linkcheck/director/__init__.py:181
#: ../linkcheck/director/__init__.py:180
msgid "another interrupt will exit immediately"
msgstr "ein weiter Abbruch beendet dieses Programm sofort"
#: ../linkcheck/director/__init__.py:197
#: ../linkcheck/director/__init__.py:196
msgid "user abort; force shutdown"
msgstr "Benutzerabbruch; erzwinge Programmende"
@ -137,7 +137,7 @@ msgstr "Benutzerabbruch; erzwinge Programmende"
msgid "could not download update information"
msgstr "konnte Update-Informationen nicht herunterladen"
#: ../linkcheck/cache/addrinfo.py:51
#: ../linkcheck/cache/addrinfo.py:57
#, python-format
msgid "could not parse host %(host)r: %(msg)s"
msgstr "konnte Rechnernamen %(host)r nicht parsen: %(msg)s"
@ -152,62 +152,62 @@ msgstr "Fehler beim Parsen der Konfiguration: %s"
msgid "invalid negative value for %s: %d\n"
msgstr "ungültiger negativer Wert für %s: %d\n"
#: ../linkcheck/configuration/confparse.py:170
#: ../linkcheck/configuration/confparse.py:171
#, python-format
msgid "missing auth part in entry %(val)r"
msgstr "fehlende Authentifizierung in entry %(val)r"
#: ../linkcheck/configuration/confparse.py:176
#: ../linkcheck/configuration/confparse.py:177
#, python-format
msgid "invalid login URL `%s'. Only HTTP and HTTPS URLs are supported."
msgstr "ungültige Login URL `%s'. Nur HTTP und HTTPS URLs sind unterstützt."
#: ../linkcheck/configuration/__init__.py:317
#: ../linkcheck/configuration/__init__.py:318
msgid "missing user or URL pattern in authentication data."
msgstr "Fehlender Benutzer oder regulärer URL Ausdruck in Authentifizierungsdaten."
#: ../linkcheck/configuration/__init__.py:363
#: ../linkcheck/configuration/__init__.py:365
msgid "activating text logger output."
msgstr "aktiviere Loggerausgabe text."
#: ../linkcheck/configuration/__init__.py:373
#: ../linkcheck/configuration/__init__.py:384
msgid "Clamav could not be initialized"
msgstr "Clamav konnte nicht initialisiert werden"
#: ../linkcheck/configuration/__init__.py:379
#: ../linkcheck/configuration/__init__.py:390
msgid "activating sendcookies."
msgstr "aktiviere Option sendcookies."
#: ../linkcheck/configuration/__init__.py:382
#: ../linkcheck/configuration/__init__.py:393
msgid "activating storecookies."
msgstr "aktiviere Option storecookies."
#: ../linkcheck/configuration/__init__.py:391
#: ../linkcheck/configuration/__init__.py:402
msgid "no CGI password fieldname given for login URL."
msgstr " kein CGI Passwort Feldname für Login URL angegeben."
#: ../linkcheck/configuration/__init__.py:395
#: ../linkcheck/configuration/__init__.py:406
msgid "no CGI user fieldname given for login URL."
msgstr "kein CGI Benutzer Feldname für Login URL angegeben."
#: ../linkcheck/configuration/__init__.py:399
#: ../linkcheck/configuration/__init__.py:410
msgid "no user/password authentication data found for login URL."
msgstr "keine Benutzer/Passwort-Authentifizierung für Login URL gefunden."
#: ../linkcheck/configuration/__init__.py:402
#: ../linkcheck/configuration/__init__.py:413
msgid "login URL is not a HTTP URL."
msgstr "Login URL ist keine HTTP URL."
#: ../linkcheck/configuration/__init__.py:406
#: ../linkcheck/configuration/__init__.py:417
msgid "login URL is incomplete."
msgstr "Login URL ist unvollständig."
#: ../linkcheck/configuration/__init__.py:410
#: ../linkcheck/configuration/__init__.py:421
#, python-format
msgid "disabling login URL %(url)s."
msgstr "deaktiviere Login URL %(url)s."
#: ../linkcheck/configuration/__init__.py:450
#: ../linkcheck/configuration/__init__.py:461
#, python-format
msgid "could not copy initial configuration file %(src)r to %(dst)r: %(errmsg)r"
msgstr "Konnte initiale Konfigurationsdatei %(src)r nicht nach %(dst)r kopieren: %(errmsg)r"
@ -266,25 +266,25 @@ msgid "Statistics"
msgstr "Statistik"
#: ../linkcheck/logger/html.py:249
#: ../linkcheck/logger/text.py:242
#: ../linkcheck/logger/text.py:248
#, python-format
msgid "Number of domains: %d"
msgstr "Anzahl von Domains: %d"
#: ../linkcheck/logger/html.py:253
#: ../linkcheck/logger/text.py:245
#: ../linkcheck/logger/text.py:251
#, python-format
msgid "Content types: %(image)d image, %(text)d text, %(video)d video, %(audio)d audio, %(application)d application, %(mail)d mail and %(other)d other."
msgstr "Inhalte: %(image)d Bild, %(text)d Text, %(video)d Video, %(audio)d Audio, %(application)d Anwendung, %(mail)d E-Mail und %(other)d andere Inhalte."
#: ../linkcheck/logger/html.py:257
#: ../linkcheck/logger/text.py:248
#: ../linkcheck/logger/text.py:254
#, python-format
msgid "URL lengths: min=%(min)d, max=%(max)d, avg=%(avg)d."
msgstr "URL Längen: min=%(min)d, max=%(max)d, ∅=%(avg)d"
#: ../linkcheck/logger/html.py:262
#: ../linkcheck/logger/text.py:253
#: ../linkcheck/logger/text.py:259
msgid "No statistics available since no URLs were checked."
msgstr "Keine Statistik verfügbar, da keine URLs geprüft wurden."
@ -339,7 +339,7 @@ msgstr[1] "Es gab %(num)d interne Fehler."
#: ../linkcheck/logger/html.py:293
#: ../linkcheck/logger/text.py:233
#: ../linkcheck/logger/__init__.py:358
#: ../linkcheck/logger/__init__.py:386
#, python-format
msgid "Stopped checking at %(time)s (%(duration)s)"
msgstr "Beende Prüfen am %(time)s (%(duration)s)"
@ -360,19 +360,19 @@ msgid "Support this project at %s"
msgstr "Unterstütze dieses Projekt unter %s"
#: ../linkcheck/logger/text.py:81
#: ../linkcheck/logger/__init__.py:346
#: ../linkcheck/logger/__init__.py:374
#, python-format
msgid "Get the newest version at %(url)s"
msgstr "Die neueste Version gibt es unter %(url)s"
#: ../linkcheck/logger/text.py:83
#: ../linkcheck/logger/__init__.py:348
#: ../linkcheck/logger/__init__.py:376
#, python-format
msgid "Write comments and bugs to %(url)s"
msgstr "Schreiben Sie Kommentare und Fehler an %(url)s"
#: ../linkcheck/logger/text.py:85
#: ../linkcheck/logger/__init__.py:350
#: ../linkcheck/logger/__init__.py:378
#, python-format
msgid "Support this project at %(url)s"
msgstr "Unterstütze dieses Projekt unter %(url)s"
@ -381,6 +381,21 @@ msgstr "Unterstütze dieses Projekt unter %(url)s"
msgid "Statistics:"
msgstr "Statistik:"
#: ../linkcheck/logger/text.py:242
#, python-format
msgid "Downloaded: %s"
msgstr "Heruntergeladen: %s"
#: ../linkcheck/logger/text.py:244
#, python-format
msgid "Robots.txt cache: %s"
msgstr "Robots.txt-Cache: %s"
#: ../linkcheck/logger/text.py:246
#, python-format
msgid "DNS cache: %s"
msgstr "DNS-Cache: %s"
#: ../linkcheck/logger/__init__.py:31
msgid "Real URL"
msgstr "Tats. URL"
@ -450,12 +465,12 @@ msgstr "URL"
msgid "Level"
msgstr "Tiefe"
#: ../linkcheck/logger/__init__.py:253
#: ../linkcheck/logger/__init__.py:272
#, python-format
msgid "Happy birthday for LinkChecker, I'm %d years old today!"
msgstr "Herzlichen Glückwunsch zum Geburtstag, LinkChecker, ich bin heute %d Jahre alt geworden!"
#: ../linkcheck/logger/__init__.py:343
#: ../linkcheck/logger/__init__.py:371
#, python-format
msgid "created by %(app)s at %(time)s"
msgstr "erstellt von %(app)s am %(time)s"
@ -744,123 +759,123 @@ msgstr "URL besitzt einen nicht analysierbaren Rechnernamen: %(name)s"
msgid "Leading or trailing whitespace in URL `%(url)s'."
msgstr "Die URL %(url)s enthält Leerzeichen am Anfang oder Ende."
#: ../linkcheck/checker/urlbase.py:381
#: ../linkcheck/checker/urlbase.py:385
msgid "URL is missing"
msgstr "URL fehlt"
#: ../linkcheck/checker/urlbase.py:384
#: ../linkcheck/checker/urlbase.py:388
msgid "URL is empty"
msgstr "URL ist leer"
#: ../linkcheck/checker/urlbase.py:391
#: ../linkcheck/checker/urlbase.py:395
#, python-format
msgid "Effective URL %(url)r."
msgstr "Effektive URL %(url)r."
#: ../linkcheck/checker/urlbase.py:450
#: ../linkcheck/checker/urlbase.py:454
#, python-format
msgid "URL has invalid port %(port)r"
msgstr "URL hat eine ungültige Portnummer %(port)r"
#: ../linkcheck/checker/urlbase.py:455
#: ../linkcheck/checker/urlbase.py:459
msgid "URL has empty hostname"
msgstr "URL hat leeren Rechnernamen"
#: ../linkcheck/checker/urlbase.py:466
#: ../linkcheck/checker/urlbase.py:470
#, python-format
msgid "URL %(url)s has obfuscated IP address %(ip)s"
msgstr "URL %(url)s besitzt die verschleierte IP-Adresse %(ip)s"
#: ../linkcheck/checker/urlbase.py:493
#: ../linkcheck/checker/urlbase.py:497
#, python-format
msgid "URL is located in %(country)s."
msgstr "URL befindet sich in %(country)s."
#: ../linkcheck/checker/urlbase.py:518
#: ../linkcheck/checker/urlbase.py:522
msgid "Hostname not found"
msgstr "Rechnername nicht gefunden"
#: ../linkcheck/checker/urlbase.py:521
#: ../linkcheck/checker/urlbase.py:525
#, python-format
msgid "Bad HTTP response %(line)r"
msgstr "Ungültige HTTP Antwort %(line)r"
#: ../linkcheck/checker/urlbase.py:534
#: ../linkcheck/checker/urlbase.py:538
#, python-format
msgid "could not get content: %(msg)r"
msgstr "konnte Inhalt nicht parsen: %(msg)r"
#: ../linkcheck/checker/urlbase.py:675
#: ../linkcheck/checker/urlbase.py:679
#, python-format
msgid "Anchor `%(name)s' not found."
msgstr "Anker `%(name)s' nicht gefunden."
#: ../linkcheck/checker/urlbase.py:676
#: ../linkcheck/checker/urlbase.py:680
#, python-format
msgid "Available anchors: %(anchors)s."
msgstr "Verfügbare Anker: %(anchors)s."
#: ../linkcheck/checker/urlbase.py:730
#: ../linkcheck/checker/urlbase.py:734
#: ../linkcheck/checker/fileurl.py:193
#: ../linkcheck/checker/httpurl.py:685
#: ../linkcheck/checker/httpurl.py:686
msgid "File size too large"
msgstr "Dateigröße ist zu groß"
#: ../linkcheck/checker/urlbase.py:772
#: ../linkcheck/checker/urlbase.py:778
#, python-format
msgid "Found %(match)r at line %(line)d in link contents."
msgstr "Habe %(match)r in Zeile %(line)d im Inhalt der Verknüpfung gefunden."
#: ../linkcheck/checker/urlbase.py:788
#: ../linkcheck/checker/urlbase.py:794
msgid "Content size is zero."
msgstr "Größe des Inhalts ist Null."
#: ../linkcheck/checker/urlbase.py:794
#: ../linkcheck/checker/urlbase.py:800
#, python-format
msgid "Content size %(dlsize)s is larger than %(maxbytes)s."
msgstr "Inhalt %(dlsize)s is größer als %(maxbytes)s."
#: ../linkcheck/checker/urlbase.py:799
#: ../linkcheck/checker/urlbase.py:805
#, python-format
msgid "Download size (%(dlsize)d Byte) does not equal content size (%(size)d Byte)."
msgstr "Download Grüße (%(dlsize)d Byte) ist ungleich der Inhaltsgröße (%(size)d Byte)."
#: ../linkcheck/checker/urlbase.py:820
#: ../linkcheck/checker/urlbase.py:885
#: ../linkcheck/checker/urlbase.py:826
#: ../linkcheck/checker/urlbase.py:891
msgid "valid HTML syntax"
msgstr "gültige HTML Syntax"
#: ../linkcheck/checker/urlbase.py:826
#: ../linkcheck/checker/urlbase.py:832
#, python-format
msgid "tidy HTML parsing caused error: %(msg)s "
msgstr "tidy HTML Parser verursachte Fehler: %(msg)s"
#: ../linkcheck/checker/urlbase.py:848
#: ../linkcheck/checker/urlbase.py:921
#: ../linkcheck/checker/urlbase.py:854
#: ../linkcheck/checker/urlbase.py:927
msgid "valid CSS syntax"
msgstr "gültige CSS Syntax"
#: ../linkcheck/checker/urlbase.py:854
#: ../linkcheck/checker/urlbase.py:860
#, python-format
msgid "cssutils parsing caused error: %(msg)s"
msgstr "cssutils Parser verursachte Fehler: %(msg)s"
#: ../linkcheck/checker/urlbase.py:863
#: ../linkcheck/checker/urlbase.py:869
#, python-format
msgid "%(w3type)s validation error at line %(line)s col %(column)s: %(msg)s"
msgstr "%(w3type)s Validierungsfehler in Zeile %(line)s Spalte %(column)s: %(msg)s"
#: ../linkcheck/checker/urlbase.py:894
#: ../linkcheck/checker/urlbase.py:900
#, python-format
msgid "HTML W3C validation caused error: %(msg)s "
msgstr "HTML W3C Validierung verursachte Fehler: %(msg)s"
#: ../linkcheck/checker/urlbase.py:929
#: ../linkcheck/checker/urlbase.py:935
#, python-format
msgid "CSS W3C validation caused error: %(msg)s "
msgstr "CSS W3C Validierung verursachte Fehler: %(msg)s"
#: ../linkcheck/checker/urlbase.py:982
#: ../linkcheck/checker/urlbase.py:988
#, python-format
msgid "%(num)d URL parsed."
msgid_plural "%(num)d URLs parsed."
@ -932,7 +947,7 @@ msgstr "Keine Antwort vom FTP Server"
msgid "Missing trailing directory slash in ftp url."
msgstr "Fehlender / am Ende der FTP url."
#: ../linkcheck/checker/ftpurl.py:225
#: ../linkcheck/checker/ftpurl.py:226
msgid "FTP file size too large"
msgstr "FTP Dateigröße ist zu groß"
@ -1028,27 +1043,27 @@ msgstr "OK"
msgid "Last modified %(date)s."
msgstr "Letzte Änderung %(date)s."
#: ../linkcheck/checker/httpurl.py:590
#: ../linkcheck/checker/httpurl.py:591
#, python-format
msgid "Sent Cookie: %(cookie)s."
msgstr "Gesendetes Cookie: %(cookie)s."
#: ../linkcheck/checker/httpurl.py:596
#: ../linkcheck/checker/httpurl.py:597
#, python-format
msgid "Could not store cookies from headers: %(error)s."
msgstr "Konnte Cookies nicht aus Kopfdaten speichern: %(error)s."
#: ../linkcheck/checker/httpurl.py:659
#: ../linkcheck/checker/httpurl.py:660
#, python-format
msgid "Unsupported HTTP url scheme `%(scheme)s'"
msgstr "Nicht unterstütztes HTTP URL Schema `%(scheme)s'"
#: ../linkcheck/checker/httpurl.py:705
#: ../linkcheck/checker/httpurl.py:707
#, python-format
msgid "Decompress error %(err)s"
msgstr "Entkomprimierungsfehler %(err)s"
#: ../linkcheck/checker/httpurl.py:721
#: ../linkcheck/checker/httpurl.py:723
#, python-format
msgid "Unsupported content encoding `%(encoding)s'."
msgstr "Content-Encoding `%(encoding)s' wird nicht unterstützt."
@ -1506,7 +1521,7 @@ msgid "Closing pending connections..."
msgstr "Schließe aktuelle Verbindungen..."
#: ../linkcheck/gui/__init__.py:429
#: ../linkchecker:705
#: ../linkchecker:698
msgid "Dumping memory statistics..."
msgstr "Generiere Speicherabzug..."
@ -1770,6 +1785,20 @@ msgstr[1] "%d Jahre"
msgid "Could not import %(module)s for %(feature)s. Install %(module)s from %(url)s to use this feature."
msgstr "Konnte Modul %(module)s für %(feature)s nicht importieren. Installieren Sie %(module)s von %(url)s, um dieses Feature zu nutzen."
#: ../linkcheck/strformat.py:331
#, python-format
msgid "%d hit"
msgid_plural "%d hits"
msgstr[0] "%d Teffer"
msgstr[1] "%d Treffer"
#: ../linkcheck/strformat.py:332
#, python-format
msgid "%d miss"
msgid_plural "%d misses"
msgstr[0] "%d Fehler"
msgstr[1] "%d Fehler"
#: ../linkchecker:57
msgid "USAGE\tlinkchecker [options] [file-or-url]..."
msgstr "BENUTZUNG\tlinkchecker [Optionen] [datei-oder-url]..."
@ -2365,52 +2394,48 @@ msgstr "Nicht lesbare Konfigurationsdatei: %r"
msgid "Running with python -O disables debugging."
msgstr "Die Option python -O verhindert das Debuggen."
#: ../linkchecker:517
#: ../linkchecker:548
#: ../linkchecker:518
#: ../linkchecker:550
#, python-format
msgid "Unknown logger type %(type)r in %(output)r for option %(option)s"
msgstr "Unbekannter Logtyp %(type)r in %(output)r für Option %(option)s"
#: ../linkchecker:521
#: ../linkchecker:554
#: ../linkchecker:522
#: ../linkchecker:556
#, python-format
msgid "Unknown encoding %(encoding)r in %(output)r for option %(option)s"
msgstr "Unbekanntes Encoding %(encoding)r in %(output)r für Option %(option)s"
#: ../linkchecker:566
#: ../linkchecker:568
#, python-format
msgid "Enter LinkChecker HTTP/FTP password for user %(user)s:"
msgstr "Gebe LinkChecker HTTP/FTP Passwort für Benutzer %(user)s ein:"
#: ../linkchecker:569
#: ../linkchecker:571
msgid "Enter LinkChecker HTTP/FTP password:"
msgstr "Gebe LinkChecker HTTP/FTP Passwort ein:"
#: ../linkchecker:576
#: ../linkchecker:594
#: ../linkchecker:578
#: ../linkchecker:596
#, python-format
msgid "Illegal argument %(arg)r for option %(option)s"
msgstr "Ungültiges Argument %(arg)r für Option %(option)s"
#: ../linkchecker:633
#: ../linkchecker:635
#, python-format
msgid "Enter LinkChecker password for user %(user)s at %(strpattern)s:"
msgstr "Gebe LinkChecker Passwort für Benutzer %(user)s bei %(strpattern)s ein:"
#: ../linkchecker:650
msgid "Using DOT or GML loggers without --complete output gives an incomplete sitemap graph."
msgstr "Benutzung von DOT oder GML Ausgaben ohne --complete ergibt einen unvollständigen Sitemap Graphen."
#: ../linkchecker:663
#: ../linkchecker:656
#, python-format
msgid "Could not parse cookie file: %s"
msgstr "Konnte Cookie-Datei nicht parsen: %s"
#: ../linkchecker:677
#: ../linkchecker:670
msgid "no files or URLs given"
msgstr "keine Dateien oder URLs angegeben"
#: ../linkchecker:682
#: ../linkchecker:675
#, python-format
msgid ""
"Overwrite profiling file %(file)r?\n"
@ -2419,15 +2444,15 @@ msgstr ""
"Profildatei %(file)r überschreiben?\n"
"Drücken Sie Strg-C zum Abbrechen, EINGABETASTE zum Fortfahren."
#: ../linkchecker:688
#: ../linkchecker:681
msgid "Canceled."
msgstr "Abgebrochen."
#: ../linkchecker:692
#: ../linkchecker:685
msgid "The `cProfile' Python module is not installed, therefore the --profile option is disabled."
msgstr "Das `cProfile' Python Modul ist nicht installiert, deshalb ist die --profile Option deaktiviert."
#: ../linkchecker:707
#: ../linkchecker:700
#, python-format
msgid "The memory dump has been written to `%(filename)s'."
msgstr "Der Speicherabzug wurde in Datei `%(filename)s' geschrieben."
@ -2506,6 +2531,13 @@ msgstr "%s Option erfordert %d Argumente"
msgid "%s option does not take a value"
msgstr "%s Option nimmt kein Wert"
#~ msgid ""
#~ "Using DOT or GML loggers without --complete output gives an incomplete "
#~ "sitemap graph."
#~ msgstr ""
#~ "Benutzung von DOT oder GML Ausgaben ohne --complete ergibt einen "
#~ "unvollständigen Sitemap Graphen."
#~ msgid "unauthorized access is missing WWW-Authenticate header"
#~ msgstr "dem nicht authorisierten Zugriff fehlt der WWW-Authenticate Header"

View file

@ -1,5 +1,5 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2012 Bastian Kleineidam <calvin@users.sourceforge.net>
# Copyright (C) YEAR Bastian Kleineidam <calvin@users.sourceforge.net>
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: calvin@users.sourceforge.net\n"
"POT-Creation-Date: 2012-09-02 19:55+0200\n"
"POT-Creation-Date: 2012-09-16 11:53+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"
@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: ../linkcheck/director/aggregator.py:71
#: ../linkcheck/director/aggregator.py:73
msgid "These URLs are still active:"
msgstr ""
@ -110,15 +110,15 @@ msgid ""
"new threads."
msgstr ""
#: ../linkcheck/director/__init__.py:179
#: ../linkcheck/director/__init__.py:178
msgid "user interrupt; waiting for active threads to finish"
msgstr ""
#: ../linkcheck/director/__init__.py:181
#: ../linkcheck/director/__init__.py:180
msgid "another interrupt will exit immediately"
msgstr ""
#: ../linkcheck/director/__init__.py:197
#: ../linkcheck/director/__init__.py:196
msgid "user abort; force shutdown"
msgstr ""
@ -126,7 +126,7 @@ msgstr ""
msgid "could not download update information"
msgstr ""
#: ../linkcheck/cache/addrinfo.py:51
#: ../linkcheck/cache/addrinfo.py:57
#, python-format
msgid "could not parse host %(host)r: %(msg)s"
msgstr ""
@ -141,62 +141,62 @@ msgstr ""
msgid "invalid negative value for %s: %d\n"
msgstr ""
#: ../linkcheck/configuration/confparse.py:170
#: ../linkcheck/configuration/confparse.py:171
#, python-format
msgid "missing auth part in entry %(val)r"
msgstr ""
#: ../linkcheck/configuration/confparse.py:176
#: ../linkcheck/configuration/confparse.py:177
#, python-format
msgid "invalid login URL `%s'. Only HTTP and HTTPS URLs are supported."
msgstr ""
#: ../linkcheck/configuration/__init__.py:317
#: ../linkcheck/configuration/__init__.py:318
msgid "missing user or URL pattern in authentication data."
msgstr ""
#: ../linkcheck/configuration/__init__.py:363
#: ../linkcheck/configuration/__init__.py:365
msgid "activating text logger output."
msgstr ""
#: ../linkcheck/configuration/__init__.py:373
#: ../linkcheck/configuration/__init__.py:384
msgid "Clamav could not be initialized"
msgstr ""
#: ../linkcheck/configuration/__init__.py:379
#: ../linkcheck/configuration/__init__.py:390
msgid "activating sendcookies."
msgstr ""
#: ../linkcheck/configuration/__init__.py:382
#: ../linkcheck/configuration/__init__.py:393
msgid "activating storecookies."
msgstr ""
#: ../linkcheck/configuration/__init__.py:391
#: ../linkcheck/configuration/__init__.py:402
msgid "no CGI password fieldname given for login URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:395
#: ../linkcheck/configuration/__init__.py:406
msgid "no CGI user fieldname given for login URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:399
#: ../linkcheck/configuration/__init__.py:410
msgid "no user/password authentication data found for login URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:402
#: ../linkcheck/configuration/__init__.py:413
msgid "login URL is not a HTTP URL."
msgstr ""
#: ../linkcheck/configuration/__init__.py:406
#: ../linkcheck/configuration/__init__.py:417
msgid "login URL is incomplete."
msgstr ""
#: ../linkcheck/configuration/__init__.py:410
#: ../linkcheck/configuration/__init__.py:421
#, python-format
msgid "disabling login URL %(url)s."
msgstr ""
#: ../linkcheck/configuration/__init__.py:450
#: ../linkcheck/configuration/__init__.py:461
#, python-format
msgid "could not copy initial configuration file %(src)r to %(dst)r: %(errmsg)r"
msgstr ""
@ -245,24 +245,24 @@ msgstr ""
msgid "Statistics"
msgstr ""
#: ../linkcheck/logger/html.py:249 ../linkcheck/logger/text.py:242
#: ../linkcheck/logger/html.py:249 ../linkcheck/logger/text.py:248
#, python-format
msgid "Number of domains: %d"
msgstr ""
#: ../linkcheck/logger/html.py:253 ../linkcheck/logger/text.py:245
#: ../linkcheck/logger/html.py:253 ../linkcheck/logger/text.py:251
#, python-format
msgid ""
"Content types: %(image)d image, %(text)d text, %(video)d video, %(audio)d "
"audio, %(application)d application, %(mail)d mail and %(other)d other."
msgstr ""
#: ../linkcheck/logger/html.py:257 ../linkcheck/logger/text.py:248
#: ../linkcheck/logger/html.py:257 ../linkcheck/logger/text.py:254
#, python-format
msgid "URL lengths: min=%(min)d, max=%(max)d, avg=%(avg)d."
msgstr ""
#: ../linkcheck/logger/html.py:262 ../linkcheck/logger/text.py:253
#: ../linkcheck/logger/html.py:262 ../linkcheck/logger/text.py:259
msgid "No statistics available since no URLs were checked."
msgstr ""
@ -309,7 +309,7 @@ msgstr[0] ""
msgstr[1] ""
#: ../linkcheck/logger/html.py:293 ../linkcheck/logger/text.py:233
#: ../linkcheck/logger/__init__.py:358
#: ../linkcheck/logger/__init__.py:386
#, python-format
msgid "Stopped checking at %(time)s (%(duration)s)"
msgstr ""
@ -329,17 +329,17 @@ msgstr ""
msgid "Support this project at %s"
msgstr ""
#: ../linkcheck/logger/text.py:81 ../linkcheck/logger/__init__.py:346
#: ../linkcheck/logger/text.py:81 ../linkcheck/logger/__init__.py:374
#, python-format
msgid "Get the newest version at %(url)s"
msgstr ""
#: ../linkcheck/logger/text.py:83 ../linkcheck/logger/__init__.py:348
#: ../linkcheck/logger/text.py:83 ../linkcheck/logger/__init__.py:376
#, python-format
msgid "Write comments and bugs to %(url)s"
msgstr ""
#: ../linkcheck/logger/text.py:85 ../linkcheck/logger/__init__.py:350
#: ../linkcheck/logger/text.py:85 ../linkcheck/logger/__init__.py:378
#, python-format
msgid "Support this project at %(url)s"
msgstr ""
@ -348,6 +348,21 @@ msgstr ""
msgid "Statistics:"
msgstr ""
#: ../linkcheck/logger/text.py:242
#, python-format
msgid "Downloaded: %s"
msgstr ""
#: ../linkcheck/logger/text.py:244
#, python-format
msgid "Robots.txt cache: %s"
msgstr ""
#: ../linkcheck/logger/text.py:246
#, python-format
msgid "DNS cache: %s"
msgstr ""
#: ../linkcheck/logger/__init__.py:31
msgid "Real URL"
msgstr ""
@ -414,12 +429,12 @@ msgstr ""
msgid "Level"
msgstr ""
#: ../linkcheck/logger/__init__.py:253
#: ../linkcheck/logger/__init__.py:272
#, python-format
msgid "Happy birthday for LinkChecker, I'm %d years old today!"
msgstr ""
#: ../linkcheck/logger/__init__.py:343
#: ../linkcheck/logger/__init__.py:371
#, python-format
msgid "created by %(app)s at %(time)s"
msgstr ""
@ -713,121 +728,121 @@ msgstr ""
msgid "Leading or trailing whitespace in URL `%(url)s'."
msgstr ""
#: ../linkcheck/checker/urlbase.py:381
#: ../linkcheck/checker/urlbase.py:385
msgid "URL is missing"
msgstr ""
#: ../linkcheck/checker/urlbase.py:384
#: ../linkcheck/checker/urlbase.py:388
msgid "URL is empty"
msgstr ""
#: ../linkcheck/checker/urlbase.py:391
#: ../linkcheck/checker/urlbase.py:395
#, python-format
msgid "Effective URL %(url)r."
msgstr ""
#: ../linkcheck/checker/urlbase.py:450
#: ../linkcheck/checker/urlbase.py:454
#, python-format
msgid "URL has invalid port %(port)r"
msgstr ""
#: ../linkcheck/checker/urlbase.py:455
#: ../linkcheck/checker/urlbase.py:459
msgid "URL has empty hostname"
msgstr ""
#: ../linkcheck/checker/urlbase.py:466
#: ../linkcheck/checker/urlbase.py:470
#, python-format
msgid "URL %(url)s has obfuscated IP address %(ip)s"
msgstr ""
#: ../linkcheck/checker/urlbase.py:493
#: ../linkcheck/checker/urlbase.py:497
#, python-format
msgid "URL is located in %(country)s."
msgstr ""
#: ../linkcheck/checker/urlbase.py:518
#: ../linkcheck/checker/urlbase.py:522
msgid "Hostname not found"
msgstr ""
#: ../linkcheck/checker/urlbase.py:521
#: ../linkcheck/checker/urlbase.py:525
#, python-format
msgid "Bad HTTP response %(line)r"
msgstr ""
#: ../linkcheck/checker/urlbase.py:534
#: ../linkcheck/checker/urlbase.py:538
#, python-format
msgid "could not get content: %(msg)r"
msgstr ""
#: ../linkcheck/checker/urlbase.py:675
#: ../linkcheck/checker/urlbase.py:679
#, python-format
msgid "Anchor `%(name)s' not found."
msgstr ""
#: ../linkcheck/checker/urlbase.py:676
#: ../linkcheck/checker/urlbase.py:680
#, python-format
msgid "Available anchors: %(anchors)s."
msgstr ""
#: ../linkcheck/checker/urlbase.py:730 ../linkcheck/checker/fileurl.py:193
#: ../linkcheck/checker/httpurl.py:685
#: ../linkcheck/checker/urlbase.py:734 ../linkcheck/checker/fileurl.py:193
#: ../linkcheck/checker/httpurl.py:686
msgid "File size too large"
msgstr ""
#: ../linkcheck/checker/urlbase.py:772
#: ../linkcheck/checker/urlbase.py:778
#, python-format
msgid "Found %(match)r at line %(line)d in link contents."
msgstr ""
#: ../linkcheck/checker/urlbase.py:788
#: ../linkcheck/checker/urlbase.py:794
msgid "Content size is zero."
msgstr ""
#: ../linkcheck/checker/urlbase.py:794
#: ../linkcheck/checker/urlbase.py:800
#, python-format
msgid "Content size %(dlsize)s is larger than %(maxbytes)s."
msgstr ""
#: ../linkcheck/checker/urlbase.py:799
#: ../linkcheck/checker/urlbase.py:805
#, python-format
msgid ""
"Download size (%(dlsize)d Byte) does not equal content size (%(size)d Byte)."
msgstr ""
#: ../linkcheck/checker/urlbase.py:820 ../linkcheck/checker/urlbase.py:885
#: ../linkcheck/checker/urlbase.py:826 ../linkcheck/checker/urlbase.py:891
msgid "valid HTML syntax"
msgstr ""
#: ../linkcheck/checker/urlbase.py:826
#: ../linkcheck/checker/urlbase.py:832
#, python-format
msgid "tidy HTML parsing caused error: %(msg)s "
msgstr ""
#: ../linkcheck/checker/urlbase.py:848 ../linkcheck/checker/urlbase.py:921
#: ../linkcheck/checker/urlbase.py:854 ../linkcheck/checker/urlbase.py:927
msgid "valid CSS syntax"
msgstr ""
#: ../linkcheck/checker/urlbase.py:854
#: ../linkcheck/checker/urlbase.py:860
#, python-format
msgid "cssutils parsing caused error: %(msg)s"
msgstr ""
#: ../linkcheck/checker/urlbase.py:863
#: ../linkcheck/checker/urlbase.py:869
#, python-format
msgid "%(w3type)s validation error at line %(line)s col %(column)s: %(msg)s"
msgstr ""
#: ../linkcheck/checker/urlbase.py:894
#: ../linkcheck/checker/urlbase.py:900
#, python-format
msgid "HTML W3C validation caused error: %(msg)s "
msgstr ""
#: ../linkcheck/checker/urlbase.py:929
#: ../linkcheck/checker/urlbase.py:935
#, python-format
msgid "CSS W3C validation caused error: %(msg)s "
msgstr ""
#: ../linkcheck/checker/urlbase.py:982
#: ../linkcheck/checker/urlbase.py:988
#, python-format
msgid "%(num)d URL parsed."
msgid_plural "%(num)d URLs parsed."
@ -899,7 +914,7 @@ msgstr ""
msgid "Missing trailing directory slash in ftp url."
msgstr ""
#: ../linkcheck/checker/ftpurl.py:225
#: ../linkcheck/checker/ftpurl.py:226
msgid "FTP file size too large"
msgstr ""
@ -998,27 +1013,27 @@ msgstr ""
msgid "Last modified %(date)s."
msgstr ""
#: ../linkcheck/checker/httpurl.py:590
#: ../linkcheck/checker/httpurl.py:591
#, python-format
msgid "Sent Cookie: %(cookie)s."
msgstr ""
#: ../linkcheck/checker/httpurl.py:596
#: ../linkcheck/checker/httpurl.py:597
#, python-format
msgid "Could not store cookies from headers: %(error)s."
msgstr ""
#: ../linkcheck/checker/httpurl.py:659
#: ../linkcheck/checker/httpurl.py:660
#, python-format
msgid "Unsupported HTTP url scheme `%(scheme)s'"
msgstr ""
#: ../linkcheck/checker/httpurl.py:705
#: ../linkcheck/checker/httpurl.py:707
#, python-format
msgid "Decompress error %(err)s"
msgstr ""
#: ../linkcheck/checker/httpurl.py:721
#: ../linkcheck/checker/httpurl.py:723
#, python-format
msgid "Unsupported content encoding `%(encoding)s'."
msgstr ""
@ -1466,7 +1481,7 @@ msgstr ""
msgid "Closing pending connections..."
msgstr ""
#: ../linkcheck/gui/__init__.py:429 ../linkchecker:705
#: ../linkcheck/gui/__init__.py:429 ../linkchecker:698
msgid "Dumping memory statistics..."
msgstr ""
@ -1727,6 +1742,20 @@ msgid ""
"to use this feature."
msgstr ""
#: ../linkcheck/strformat.py:331
#, python-format
msgid "%d hit"
msgid_plural "%d hits"
msgstr[0] ""
msgstr[1] ""
#: ../linkcheck/strformat.py:332
#, python-format
msgid "%d miss"
msgid_plural "%d misses"
msgstr[0] ""
msgstr[1] ""
#: ../linkchecker:57
msgid "USAGE\tlinkchecker [options] [file-or-url]..."
msgstr ""
@ -2132,68 +2161,62 @@ msgstr ""
msgid "Running with python -O disables debugging."
msgstr ""
#: ../linkchecker:517 ../linkchecker:548
#: ../linkchecker:518 ../linkchecker:550
#, python-format
msgid "Unknown logger type %(type)r in %(output)r for option %(option)s"
msgstr ""
#: ../linkchecker:521 ../linkchecker:554
#: ../linkchecker:522 ../linkchecker:556
#, python-format
msgid "Unknown encoding %(encoding)r in %(output)r for option %(option)s"
msgstr ""
#: ../linkchecker:566
#: ../linkchecker:568
#, python-format
msgid "Enter LinkChecker HTTP/FTP password for user %(user)s:"
msgstr ""
#: ../linkchecker:569
#: ../linkchecker:571
msgid "Enter LinkChecker HTTP/FTP password:"
msgstr ""
#: ../linkchecker:576 ../linkchecker:594
#: ../linkchecker:578 ../linkchecker:596
#, python-format
msgid "Illegal argument %(arg)r for option %(option)s"
msgstr ""
#: ../linkchecker:633
#: ../linkchecker:635
#, python-format
msgid "Enter LinkChecker password for user %(user)s at %(strpattern)s:"
msgstr ""
#: ../linkchecker:650
msgid ""
"Using DOT or GML loggers without --complete output gives an incomplete "
"sitemap graph."
msgstr ""
#: ../linkchecker:663
#: ../linkchecker:656
#, python-format
msgid "Could not parse cookie file: %s"
msgstr ""
#: ../linkchecker:677
#: ../linkchecker:670
msgid "no files or URLs given"
msgstr ""
#: ../linkchecker:682
#: ../linkchecker:675
#, python-format
msgid ""
"Overwrite profiling file %(file)r?\n"
"Press Ctrl-C to cancel, RETURN to continue."
msgstr ""
#: ../linkchecker:688
#: ../linkchecker:681
msgid "Canceled."
msgstr ""
#: ../linkchecker:692
#: ../linkchecker:685
msgid ""
"The `cProfile' Python module is not installed, therefore the --profile option "
"is disabled."
msgstr ""
#: ../linkchecker:707
#: ../linkchecker:700
#, python-format
msgid "The memory dump has been written to `%(filename)s'."
msgstr ""