? configure.lineno
? install.log
? Mailman/Defaults.py.in.patch
? Mailman/Commands/cmd_password.py.patch
? Mailman/Handlers/Scrubber.py.patch
? Mailman/Queue/CommandRunner.py.patch
? bin/update.patch
? messages/ja/LC_MESSAGES/mailman.po.x
? messages/ja/LC_MESSAGES/mailman.po.z
Index: Mailman/Bouncer.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Bouncer.py,v
retrieving revision 2.37.2.3
diff -u -r2.37.2.3 Bouncer.py
--- Mailman/Bouncer.py 10 Feb 2004 22:38:26 -0000 2.37.2.3
+++ Mailman/Bouncer.py 25 Apr 2004 04:43:02 -0000
@@ -268,6 +268,8 @@
# provided in the exception argument.
sender = msg.get_sender()
subject = msg.get('subject', _('(no subject)'))
+ subject = Utils.oneline(subject,
+ Utils.GetCharSet(self.preferred_language))
if e is None:
notice = _('[No bounce details are available]')
else:
Index: Mailman/Defaults.py.in
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Defaults.py.in,v
retrieving revision 2.112.2.15
diff -u -r2.112.2.15 Defaults.py.in
--- Mailman/Defaults.py.in 25 Apr 2004 02:30:03 -0000 2.112.2.15
+++ Mailman/Defaults.py.in 25 Apr 2004 04:43:02 -0000
@@ -256,6 +256,10 @@
# should modify the Message object as necessary.
ARCHIVE_SCRUBBER = 'Mailman.Handlers.Scrubber'
+# Mailman.Handlers.Scrubber uses attachment's filename as is.
+# If you don't like this (long MIME filename) then set this true.
+SCRUBBER_DONT_USE_ATTACHMENT_FILENAME = False
+
# This variable defines what happens to text/html subparts. They can be
# stripped completely, escaped, or filtered through an external program. The
# legal values are:
@@ -453,6 +457,7 @@
'Moderate',
'Hold',
'MimeDel',
+ 'Scrubber',
'Emergency',
'Tagger',
'CalcRecips',
@@ -785,9 +790,13 @@
DEFAULT_MAX_NUM_RECIPIENTS = 10
DEFAULT_MAX_MESSAGE_SIZE = 40 # KB
+# Discard held messages after this days
+DEFAULT_MAX_DAYS_TO_HOLD = 3 # days
+
# These format strings will be expanded w.r.t. the dictionary for the
# mailing list instance.
-DEFAULT_SUBJECT_PREFIX = "[%(real_name)s] "
+# Add %d (seqnum) in prefix
+DEFAULT_SUBJECT_PREFIX = "[%(real_name)s %%d]"
DEFAULT_MSG_HEADER = ""
DEFAULT_MSG_FOOTER = """_______________________________________________
%(real_name)s mailing list
@@ -795,6 +804,9 @@
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
"""
+# Scrub regular delivery
+DEFAULT_SCRUB_NONDIGEST = False
+
# Mail command processor will ignore mail command lines after designated max.
DEFAULT_MAIL_COMMANDS_MAX_LINES = 25
Index: Mailman/MailList.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/MailList.py,v
retrieving revision 2.100.2.19
diff -u -r2.100.2.19 MailList.py
--- Mailman/MailList.py 4 Mar 2004 14:10:28 -0000 2.100.2.19
+++ Mailman/MailList.py 25 Apr 2004 04:43:03 -0000
@@ -382,6 +382,10 @@
self.encode_ascii_prefixes = 0
else:
self.encode_ascii_prefixes = 2
+ # automatic discarding
+ self.max_days_to_hold = mm_cfg.DEFAULT_MAX_DAYS_TO_HOLD
+ # scrub regular delivery
+ self.scrub_nondigest = mm_cfg.DEFAULT_SCRUB_NONDIGEST
#
@@ -963,7 +967,8 @@
text = Utils.maketext(
"adminsubscribeack.txt",
{"listname" : realname,
- "member" : formataddr((name, email)),
+ "member" : email,
+ #"member" : formataddr((name, email)),
}, mlist=self)
msg = Message.OwnerNotification(self, subject, text)
msg.send(self)
@@ -1166,6 +1171,10 @@
whence = 'email confirmation'
else:
whence = 'web confirmation'
+ if self.unsubscribe_policy == 1:
+ self.HoldUnsubscription(addr)
+ raise Errors.MMNeedApproval, _(
+ 'unsubscriptions require moderator approval')
# Can raise NotAMemberError if they unsub'd via other means
self.ApprovedDeleteMember(addr, whence=whence)
return op, addr
Index: Mailman/Version.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Version.py,v
retrieving revision 2.51.2.16
diff -u -r2.51.2.16 Version.py
--- Mailman/Version.py 25 Apr 2004 02:38:11 -0000 2.51.2.16
+++ Mailman/Version.py 25 Apr 2004 04:43:03 -0000
@@ -36,7 +36,7 @@
(REL_LEVEL << 4) | (REL_SERIAL << 0))
# config.pck schema version number
-DATA_FILE_VERSION = 90
+DATA_FILE_VERSION = 92
# qfile/*.db schema version number
QFILE_SCHEMA_VERSION = 3
Index: Mailman/versions.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/versions.py,v
retrieving revision 2.38.2.3
diff -u -r2.38.2.3 versions.py
--- Mailman/versions.py 1 Dec 2003 00:58:44 -0000 2.38.2.3
+++ Mailman/versions.py 25 Apr 2004 04:43:04 -0000
@@ -394,6 +394,9 @@
add_only_if_missing('encode_ascii_prefixes', encode)
add_only_if_missing('news_moderation', 0)
add_only_if_missing('header_filter_rules', [])
+ # automatic discard
+ add_only_if_missing('max_days_to_hold', 0)
+ add_only_if_missing('scrub_nondigest', 0)
Index: Mailman/Archiver/Archiver.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Archiver/Archiver.py,v
retrieving revision 2.28.2.2
diff -u -r2.28.2.2 Archiver.py
--- Mailman/Archiver/Archiver.py 1 Dec 2003 01:07:26 -0000 2.28.2.2
+++ Mailman/Archiver/Archiver.py 25 Apr 2004 04:43:04 -0000
@@ -25,6 +25,7 @@
import os
import errno
import traceback
+import re
from cStringIO import StringIO
from Mailman import mm_cfg
@@ -135,15 +136,15 @@
self.internal_name() + '.mbox')
def GetBaseArchiveURL(self):
+ url = self.GetScriptURL('private', absolute=1) + '/'
if self.archive_private:
- return self.GetScriptURL('private', absolute=1) + '/'
+ return url
else:
- inv = {}
- for k, v in mm_cfg.VIRTUAL_HOSTS.items():
- inv[v] = k
+ hostname = re.match('[^:]*://([^/]*)/.*', url).group(1)\
+ or mm_cfg.DEFAULT_URL_HOST
url = mm_cfg.PUBLIC_ARCHIVE_URL % {
'listname': self.internal_name(),
- 'hostname': inv.get(self.host_name, mm_cfg.DEFAULT_URL_HOST),
+ 'hostname': hostname
}
if not url.endswith('/'):
url += '/'
Index: Mailman/Cgi/confirm.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/confirm.py,v
retrieving revision 2.31.2.4
diff -u -r2.31.2.4 confirm.py
--- Mailman/Cgi/confirm.py 10 Feb 2004 22:50:10 -0000 2.31.2.4
+++ Mailman/Cgi/confirm.py 25 Apr 2004 04:43:05 -0000
@@ -410,6 +410,7 @@
mlist.Unlock()
sys.exit(0)
+ listname = mlist.real_name
mlist.Lock()
try:
try:
@@ -420,6 +421,16 @@
i18n.set_language(lang)
doc.set_language(lang)
op, addr = mlist.ProcessConfirmation(cookie)
+ except Errors.MMNeedApproval:
+ title = _('Awaiting moderator approval')
+ doc.SetTitle(title)
+ doc.AddItem(Header(3, Bold(FontAttr(title, size='+2'))))
+ doc.AddItem(_("""\
+ You have successfully confirmed your unsubscription request to the
+ mailing list %(listname)s, however final approval is required from
+ the list moderator before you will be unsubscribed. Your request
+ has been forwarded to the list moderator, and you will be notified
+ of the moderator's decision."""))
except Errors.NotAMemberError:
bad_confirmation(doc, _('''Invalid confirmation string. It is
possible that you are attempting to confirm a request for an
Index: Mailman/Gui/General.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Gui/General.py,v
retrieving revision 2.22.2.1
diff -u -r2.22.2.1 General.py
--- Mailman/Gui/General.py 17 Feb 2004 19:27:46 -0000 2.22.2.1
+++ Mailman/Gui/General.py 25 Apr 2004 04:43:05 -0000
@@ -145,7 +145,10 @@
posted to the list, to distinguish mailing list messages in in
mailbox summaries. Brevity is premium here, it's ok to shorten
long mailing list names to something more concise, as long as it
- still identifies the mailing list.""")),
+ still identifies the mailing list. You can also add a sequencial
+ number by %%d directive when the prefix is closed in [], {} or
+ (). Example: [listname %%d] -> [listname 123], (listname %%05d)
+ -> (listname 00123)""")),
('anonymous_list', mm_cfg.Radio, (_('No'), _('Yes')), 0,
_("""Hide the sender of a message, replacing it with the list
@@ -408,6 +411,12 @@
does not affect the inclusion of the other List-*:
headers.)"""))
)
+ # Discard held messages after this number of days
+ rtn.append(
+ ('max_days_to_hold', mm_cfg.Number, 7, 0,
+ _("""Discard held messages older than this number of days.
+ Use 0 for no automatic discarding."""))
+ )
return rtn
Index: Mailman/Gui/NonDigest.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Gui/NonDigest.py,v
retrieving revision 2.10.2.1
diff -u -r2.10.2.1 NonDigest.py
--- Mailman/Gui/NonDigest.py 20 Apr 2003 04:02:05 -0000 2.10.2.1
+++ Mailman/Gui/NonDigest.py 25 Apr 2004 04:43:05 -0000
@@ -134,6 +134,15 @@
_('''Text appended to the bottom of every immediately-delivery
message. ''') + headfoot + extra),
])
+
+ info.extend([
+ ('scrub_nondigest', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ _('Scrub attachments of regular delivery message?'),
+ _('''When you scrub attachments, they are stored in archive
+ area and links are made in the message so that the member can
+ access via web browser. If you want the attachments totally
+ disappear, you can use content filter options.''')),
+ ])
return info
def _setValue(self, mlist, property, val, doc):
Index: Mailman/Handlers/CookHeaders.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/CookHeaders.py,v
retrieving revision 2.33.2.6
diff -u -r2.33.2.6 CookHeaders.py
--- Mailman/Handlers/CookHeaders.py 18 Dec 2003 14:58:22 -0000 2.33.2.6
+++ Mailman/Handlers/CookHeaders.py 25 Apr 2004 04:43:06 -0000
@@ -15,6 +15,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
"""Cook a message's Subject header.
+ (sequence version)
"""
from __future__ import nested_scopes
@@ -22,7 +23,7 @@
from types import UnicodeType
from email.Charset import Charset
-from email.Header import Header, decode_header
+from email.Header import Header, decode_header, make_header
from email.Utils import parseaddr, formataddr, getaddresses
from Mailman import mm_cfg
@@ -39,21 +40,19 @@
def _isunicode(s):
return isinstance(s, UnicodeType)
+nonascii = re.compile('[^\s!-~]')
+
def uheader(mlist, s, header_name=None, continuation_ws='\t', maxlinelen=None):
- # Get the charset to encode the string in. If this is us-ascii, we'll use
- # iso-8859-1 instead, just to get a little extra coverage, and because the
- # Header class tries us-ascii first anyway.
+ # Get the charset to encode the string in. Then search if there is any
+ # non-ascii character is in the string. If there is and the charset is
+ # us-ascii then we use iso-8859-1 instead. If the string is ascii only
+ # we use 'us-ascii' if another charset is specified.
charset = Utils.GetCharSet(mlist.preferred_language)
- if charset == 'us-ascii':
- charset = 'iso-8859-1'
- charset = Charset(charset)
- # Convert the string to unicode so Header will do the 3-charset encoding.
- # If s is a byte string and there are funky characters in it that don't
- # match the charset, we might as well replace them now.
- if not _isunicode(s):
- codec = charset.input_codec or 'ascii'
- s = unicode(s, codec, 'replace')
- # We purposefully leave no space b/w prefix and subject!
+ if nonascii.search(s):
+ if charset == 'us-ascii':
+ charset = 'iso-8859-1'
+ else:
+ charset = 'us-ascii'
return Header(s, charset, maxlinelen, header_name, continuation_ws)
@@ -71,7 +70,12 @@
# VirginRunner sets _fasttrack for internally crafted messages.
fasttrack = msgdata.get('_fasttrack')
if not msgdata.get('isdigest') and not fasttrack:
- prefix_subject(mlist, msg, msgdata)
+ try:
+ prefix_subject(mlist, msg, msgdata)
+ except (UnicodeError, ValueError):
+ # TK: Sometimes subject header is not MIME encoded for 8bit
+ # simply abort prefixing.
+ pass
# Mark message so we know we've been here, but leave any existing
# X-BeenThere's intact.
msg['X-BeenThere'] = mlist.GetListEmail()
@@ -127,7 +131,7 @@
# because some folks think that some MUAs make it easier to delete
# addresses from the right than from the left.
if mlist.reply_goes_to_list == 1:
- i18ndesc = uheader(mlist, mlist.description)
+ i18ndesc = uheader(mlist, mlist.description, 'Reply-To')
add((str(i18ndesc), mlist.GetListEmail()))
del msg['reply-to']
# Don't put Reply-To: back if there's nothing to add!
@@ -150,7 +154,7 @@
d = {}
for pair in getaddresses(msg.get_all('cc', [])):
add(pair)
- i18ndesc = uheader(mlist, mlist.description)
+ i18ndesc = uheader(mlist, mlist.description, 'Cc')
add((str(i18ndesc), mlist.GetListEmail()))
del msg['Cc']
msg['Cc'] = COMMASPACE.join([formataddr(pair) for pair in new])
@@ -165,15 +169,13 @@
return
# This will act like an email address for purposes of formataddr()
listid = '%s.%s' % (mlist.internal_name(), mlist.host_name)
+ cset = Utils.GetCharSet(mlist.preferred_language)
if mlist.description:
- # Don't wrap the header since here we just want to get it properly RFC
- # 2047 encoded.
- h = uheader(mlist, mlist.description, 'List-Id', maxlinelen=10000)
- desc = str(h)
+ i18ndesc = uheader(mlist, mlist.description, 'List-Id')
+ listid_h = formataddr((str(i18ndesc), listid))
else:
- desc = ''
- listid_h = formataddr((desc, listid))
- # BAW: I think the message object should handle any necessary wrapping.
+ listid_h = '<%s>' % listid
+ # We always add a List-ID: header.
del msg['list-id']
msg['List-Id'] = listid_h
# For internally crafted messages, we
@@ -218,7 +220,9 @@
# Add the subject prefix unless the message is a digest or is being fast
# tracked (e.g. internally crafted, delivered to a single user such as the
# list admin).
- prefix = mlist.subject_prefix
+ prefix = mlist.subject_prefix.strip()
+ if not prefix:
+ return
subject = msg.get('subject', '')
# Try to figure out what the continuation_ws is for the header
if isinstance(subject, Header):
@@ -229,35 +233,91 @@
if len(lines) > 1 and lines[1] and lines[1][0] in ' \t':
ws = lines[1][0]
msgdata['origsubj'] = subject
- if not subject:
+ # The subject may be multilingual but we take the first charset
+ # as major one and try to decode. If it is decodable, returned
+ # subject is in one line and cset is properly set. If fail,
+ # subject is mime-encoded and cset is set as us-ascii. See detail
+ # for ch_oneline() (CookHeaders one line function).
+ subject, cset = ch_oneline(subject)
+ # Note: searching prefix in subject is REMOVED. (seq version)
+ # If the subject_prefix contains '%d', it is replaced with the
+ # mailing list sequential number. Also, if the prefix is closed with
+ # [],(), or {}, the prefix in the responding post subject will be cared.
+ # sequential number format allows '%05d' like pattern.
+ p = re.compile('%\d*d')
+ if p.search(prefix,1):
+ # prefix have number, so we should search prefix w/number
+ # in subject.
+ prefix_pattern = p.sub(r'\s*\d+\s*', prefix)
+ else:
+ prefix_pattern = prefix
+ prefix_pattern = re.sub('([\[\(\{\)])', '\\\\\g<1>', prefix_pattern)
+ subject = re.sub(prefix_pattern, '', subject)
+ subject = re.compile('(RE:\s*)+', re.I).sub('Re: ', subject, 1)
+ # At this point, subject may become null if someone post mail with
+ # subject: [subject prefix]
+ if subject.strip() == '':
subject = _('(no subject)')
- # The header may be multilingual; decode it from base64/quopri and search
- # each chunk for the prefix. BAW: Note that if the prefix contains spaces
- # and each word of the prefix is encoded in a different chunk in the
- # header, we won't find it. I think in practice that's unlikely though.
- headerbits = decode_header(subject)
- if prefix and subject:
- pattern = re.escape(prefix.strip())
- for decodedsubj, charset in headerbits:
- if re.search(pattern, decodedsubj, re.IGNORECASE):
- # The subject's already got the prefix, so don't change it
- return
- del msg['subject']
+ cset = Utils.GetCharSet(mlist.preferred_language)
+ # and substitute %d in prefix with post_id
+ try:
+ prefix = prefix % mlist.post_id
+ except TypeError:
+ pass
+ # If charset is 'us-ascii', try to concatnate as string because there
+ # is some weirdness in Header module (TK)
+ if cset == 'us-ascii':
+ try:
+ h = prefix + ' ' + subject
+ if type(h) == UnicodeType:
+ h = h.encode('us-ascii')
+ else:
+ h = unicode(h, 'us-ascii').encode('us-ascii')
+ del msg['subject']
+ msg['Subject'] = h
+ return
+ except UnicodeError:
+ pass
# Get the header as a Header instance, with proper unicode conversion
h = uheader(mlist, prefix, 'Subject', continuation_ws=ws)
- for s, c in headerbits:
- # Once again, convert the string to unicode.
- if c is None:
- c = Charset('iso-8859-1')
- if not isinstance(c, Charset):
- c = Charset(c)
- if not _isunicode(s):
- codec = c.input_codec or 'ascii'
- try:
- s = unicode(s, codec, 'replace')
- except LookupError:
- # Unknown codec, is this default reasonable?
- s = unicode(s, Utils.GetCharSet(mlist.preferred_language),
- 'replace')
- h.append(s, c)
+ # in seq version, subject header is already concatnated
+ if not _isunicode(subject):
+ try:
+ subject = unicode(subject, cset, 'replace')
+ except (LookupError, TypeError):
+ # unknown codec
+ cset = Utils.GetCharSet(mlist.preferred_language)
+ subject = unicode(subject, cset, 'replace')
+ subject = subject.encode(cset,'replace')
+ h.append(subject, cset)
+ del msg['subject']
msg['Subject'] = h
+
+
+def ch_oneline(s):
+ # Decode header string in one line and convert into single charset
+ # copied and modified from ToDigest.py and Utils.py
+ # return (string, cset) tuple as check for failure
+ try:
+ d = decode_header(s)
+ # at this point, we should rstrip() every string because some
+ # MUA deliberately add trailing spaces when composing return
+ # message.
+ i = 0
+ for (s,c) in d:
+ s = s.rstrip()
+ d[i] = (s,c)
+ i += 1
+ cset = 'us-ascii'
+ for x in d:
+ # search for no-None charset
+ if x[1]:
+ cset = x[1]
+ break
+ h = make_header(d)
+ ustr = h.__unicode__()
+ oneline = u''.join(ustr.splitlines())
+ return oneline.encode(cset, 'replace'), cset
+ except (LookupError, UnicodeError, HeaderParseError):
+ # possibly charset problem. return with undecoded string in one line.
+ return ''.join(s.splitlines()), 'us-ascii'
Index: Mailman/Handlers/Decorate.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/Decorate.py,v
retrieving revision 2.21.2.3
diff -u -r2.21.2.3 Decorate.py
--- Mailman/Handlers/Decorate.py 1 Dec 2003 14:21:08 -0000 2.21.2.3
+++ Mailman/Handlers/Decorate.py 25 Apr 2004 04:43:06 -0000
@@ -53,7 +53,12 @@
# BAW: Hmm, should we allow this?
d['user_password'] = mlist.getMemberPassword(member)
d['user_language'] = mlist.getMemberLanguage(member)
- d['user_name'] = mlist.getMemberName(member) or _('not available')
+ username = mlist.getMemberName(member)
+ if username:
+ username = username.encode(Utils.GetCharSet(d['user_language']))
+ else:
+ username = member
+ d['user_name'] = username
d['user_optionsurl'] = mlist.GetOptionsURL(member)
except Errors.NotAMemberError:
pass
@@ -83,18 +88,36 @@
# BAW: If the charsets don't match, should we add the header and footer by
# MIME multipart chroming the message?
wrap = True
- if not msg.is_multipart() and msgtype == 'text/plain' and \
- msg.get('content-transfer-encoding', '').lower() <> 'base64' and \
- (lcset == 'us-ascii' or mcset == lcset):
- oldpayload = msg.get_payload()
- frontsep = endsep = ''
- if header and not header.endswith('\n'):
- frontsep = '\n'
- if footer and not oldpayload.endswith('\n'):
- endsep = '\n'
- payload = header + frontsep + oldpayload + endsep + footer
- msg.set_payload(payload)
- wrap = False
+ if not msg.is_multipart() and msgtype == 'text/plain':
+ # TK: Try to keep the message plain by converting the header/
+ # footer/oldpayload into unicode and encode with mcset/lcset.
+ # Try to decode qp/base64 also.
+ uheader = unicode(header, lcset)
+ ufooter = unicode(footer, lcset)
+ try:
+ oldpayload = unicode(msg.get_payload(decode=1), mcset)
+ frontsep = endsep = u''
+ if header and not header.endswith('\n'):
+ frontsep = u'\n'
+ if footer and not oldpayload.endswith('\n'):
+ endsep = u'\n'
+ payload = uheader + frontsep + oldpayload + endsep + ufooter
+ try:
+ # first, try encode with list charset
+ payload = payload.encode(lcset)
+ newcset = lcset
+ except UnicodeError:
+ if lcset != mcset:
+ # if fail, encode with message charset (if different)
+ payload = payload.encode(mcset)
+ newcset = mcset
+ # if this fails, fallback to outer try and wrap=true
+ del msg['content-transfer-encoding']
+ del msg['content-type']
+ msg.set_payload(payload, newcset)
+ wrap = False
+ except (LookupError, UnicodeError):
+ pass
elif msg.get_type() == 'multipart/mixed':
# The next easiest thing to do is just prepend the header and append
# the footer as additional subparts
Index: Mailman/Handlers/Scrubber.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/Scrubber.py,v
retrieving revision 2.18.2.6
diff -u -r2.18.2.6 Scrubber.py
--- Mailman/Handlers/Scrubber.py 1 Dec 2003 01:43:18 -0000 2.18.2.6
+++ Mailman/Handlers/Scrubber.py 25 Apr 2004 04:43:06 -0000
@@ -27,7 +27,7 @@
import binascii
import tempfile
from cStringIO import StringIO
-from types import IntType
+from types import IntType, StringType
from email.Utils import parsedate
from email.Parser import HeaderParser
@@ -167,6 +167,13 @@
outer = True
if msgdata is None:
msgdata = {}
+ if msgdata:
+ # msgdata is available if it is in GLOBAL_PIPELINE
+ # check if the list owner want to scrub regular delivery
+ if mlist.scrub_nondigest:
+ pass
+ else:
+ return
dir = calculate_attachments_dir(mlist, msg, msgdata)
charset = None
lcset = Utils.GetCharSet(mlist.preferred_language)
@@ -180,11 +187,29 @@
# message.
if charset is None:
charset = part.get_content_charset(lcset)
+ # TK: if part is attached then check charset and scrub if none
+ if part.get('content-disposition') and \
+ not part.get_content_charset():
+ omask = os.umask(002)
+ try:
+ url = save_attachment(mlist, part, dir)
+ finally:
+ os.umask(omask)
+ filename = part.get_filename(_('not available'))
+ filename = Utils.oneline(filename, lcset)
+ del part['content-type']
+ del part['content-transfer-encoding']
+ part.set_payload(_("""\
+An embedded and charset-unspecified text was scrubbed...
+Name: %(filename)s
+Url: %(url)s
+"""), lcset)
elif ctype == 'text/html' and isinstance(sanitize, IntType):
if sanitize == 0:
if outer:
raise DiscardMessage
del part['content-type']
+ del part['content-transfer-encoding']
part.set_payload(_('HTML attachment scrubbed and removed'),
# Adding charset arg and removing content-tpe
# sets content-type to text/plain
@@ -202,6 +227,7 @@
finally:
os.umask(omask)
del part['content-type']
+ del part['content-transfer-encoding']
part.set_payload(_("""\
An HTML attachment was scrubbed...
URL: %(url)s
@@ -267,6 +293,7 @@
os.umask(omask)
desc = part.get('content-description', _('not available'))
filename = part.get_filename(_('not available'))
+ filename = Utils.oneline(filename, lcset)
del part['content-type']
del part['content-transfer-encoding']
part.set_payload(_("""\
@@ -285,7 +312,7 @@
# By default we take the charset of the first text/plain part in the
# message, but if there was none, we'll use the list's preferred
# language's charset.
- if charset is None or charset == 'us-ascii':
+ if not charset or charset == 'us-ascii':
charset = lcset
# We now want to concatenate all the parts which have been scrubbed to
# text/plain, into a single text/plain payload. We need to make sure
@@ -294,17 +321,27 @@
# BAW: Martin's original patch suggested we might want to try
# generalizing to utf-8, and that's probably a good idea (eventually).
text = []
- for part in msg.get_payload():
+ for part in msg.walk():
+ if part.get_content_maintype() == 'multipart':
+ continue
# All parts should be scrubbed to text/plain by now.
partctype = part.get_content_type()
if partctype <> 'text/plain':
- text.append(_('Skipped content of type %(partctype)s'))
+ text.append(_('Skipped content of type %(partctype)s\n'))
continue
try:
t = part.get_payload(decode=True)
except binascii.Error:
t = part.get_payload()
- partcharset = part.get_content_charset()
+ # TK: get_content_charset() returns 'iso-2022-jp' for internally
+ # crafted (scrubbed) 'euc-jp' text part. So, first try
+ # get_charset(), then get_content_charset() for the parts
+ # which are already embeded in the incoming message.
+ partcharset = part.get_charset()
+ if partcharset:
+ partcharset = str(partcharset)
+ else:
+ partcharset = part.get_content_charset()
if partcharset and partcharset <> charset:
try:
t = unicode(t, partcharset, 'replace')
@@ -320,9 +357,10 @@
except (UnicodeError, LookupError, ValueError):
t = t.encode(lcset, 'replace')
# Separation is useful
- if not t.endswith('\n'):
- t += '\n'
- text.append(t)
+ if isinstance(t, StringType):
+ if not t.endswith('\n'):
+ t += '\n'
+ text.append(t)
# Now join the text and set the payload
sep = _('-------------- next part --------------\n')
del msg['content-type']
@@ -356,7 +394,11 @@
# e.g. image/jpg (should be image/jpeg). For now we just store such
# things as application/octet-streams since that seems the safest.
ctype = msg.get_content_type()
- fnext = os.path.splitext(msg.get_filename(''))[1]
+ # i18n file name is encoded
+ lcset = Utils.GetCharSet(mlist.preferred_language)
+ filename = Utils.oneline(msg.get_filename(''), lcset)
+ fnext = os.path.splitext(filename)[1]
+ # fnext = os.path.splitext(msg.get_filename(''))[1]
ext = guess_extension(ctype, fnext)
if not ext:
# We don't know what it is, so assume it's just a shapeless
@@ -376,7 +418,7 @@
# Now base the filename on what's in the attachment, uniquifying it if
# necessary.
filename = msg.get_filename()
- if not filename:
+ if not filename or mm_cfg.SCRUBBER_DONT_USE_ATTACHMENT_FILENAME:
filebase = 'attachment'
else:
# Sanitize the filename given in the message headers
Index: Mailman/Queue/CommandRunner.py
===================================================================
RCS file: /cvsroot/mailman/mailman/Mailman/Queue/CommandRunner.py,v
retrieving revision 2.26.2.4
diff -u -r2.26.2.4 CommandRunner.py
--- Mailman/Queue/CommandRunner.py 1 Dec 2003 01:52:12 -0000 2.26.2.4
+++ Mailman/Queue/CommandRunner.py 25 Apr 2004 04:43:06 -0000
@@ -77,7 +77,7 @@
subj = make_header(decode_header(subj)).__unicode__()
# Always process the Subject: header first
self.commands.append(subj)
- except HeaderParseError:
+ except (HeaderParseError, UnicodeError, LookupError):
# We couldn't parse it so ignore the Subject header
pass
# Find the first text/plain part
Index: cron/checkdbs
===================================================================
RCS file: /cvsroot/mailman/mailman/cron/checkdbs,v
retrieving revision 2.17.2.3
diff -u -r2.17.2.3 checkdbs
--- cron/checkdbs 26 Dec 2003 22:51:10 -0000 2.17.2.3
+++ cron/checkdbs 25 Apr 2004 04:43:06 -0000
@@ -52,6 +52,8 @@
_ = i18n._
i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+now = time.time()
+
def usage(code, msg=''):
@@ -99,16 +101,24 @@
if count:
i18n.set_language(mlist.preferred_language)
realname = mlist.real_name
- text = Utils.maketext(
- 'checkdbs.txt',
- {'count' : count,
- 'host_name': mlist.host_name,
- 'adminDB' : mlist.GetScriptURL('admindb', absolute=1),
- 'real_name': realname,
- }, mlist=mlist)
- text += '\n' + pending_requests(mlist)
+ discarded = auto_discard(mlist)
+ if discarded:
+ count = count - discarded
+ text = _(
+ 'Notice: %(discarded)d old request(s) automatically expired.\n\n')
+ else:
+ text = ''
+ if count:
+ text += Utils.maketext(
+ 'checkdbs.txt',
+ {'count' : count,
+ 'host_name': mlist.host_name,
+ 'adminDB' : mlist.GetScriptURL('admindb', absolute=1),
+ 'real_name': realname,
+ }, mlist=mlist)
+ text += '\n' + pending_requests(mlist)
subject = _(
- '%(count)d %(realname)s moderator request(s) waiting')
+ '%(realname)s moderator requests notice')
msg = Message.UserNotification(mlist.GetOwnerEmail(),
mlist.GetBouncesEmail(),
subject, text,
@@ -121,6 +131,7 @@
def pending_requests(mlist):
+ lcset = Utils.GetCharSet(mlist.preferred_language)
# Must return a byte string
lcset = Utils.GetCharSet(mlist.preferred_language)
pending = []
@@ -172,6 +183,18 @@
utext = unicode(text, incodec, 'replace')
return utext.encode(outcodec, 'replace')
+def auto_discard(mlist):
+ # Discard old held messages
+ discard_count = 0
+ expire = mlist.max_days_to_hold * 86400 # days
+ heldmsgs = mlist.GetHeldMessageIds()
+ if expire and len(heldmsgs):
+ for id in heldmsgs:
+ if now - mlist.GetRecord(id)[0] > expire:
+ mlist.HandleRequest(id, mm_cfg.DISCARD)
+ discard_count += 1
+ mlist.Save()
+ return discard_count
if __name__ == '__main__':
Index: messages/Makefile.in
===================================================================
RCS file: /cvsroot/mailman/mailman/messages/Makefile.in,v
retrieving revision 2.31.2.13
diff -u -r2.31.2.13 Makefile.in
--- messages/Makefile.in 25 Apr 2004 02:30:04 -0000 2.31.2.13
+++ messages/Makefile.in 25 Apr 2004 04:43:06 -0000
@@ -107,7 +107,8 @@
po=$(srcdir)/$$d/LC_MESSAGES/mailman.po; \
mo=$(srcdir)/$$d/LC_MESSAGES/mailman.mo; \
dir=$(DESTDIR)$(prefix)/messages/$$d/LC_MESSAGES; \
- $(INSTALL) -m $(FILEMODE) $$po $$mo $$dir; \
+ $(INSTALL) -m $(FILEMODE) $$po $$dir; \
+ $(INSTALL) -m $(FILEMODE) $$mo $$dir; \
done
mofiles: $(MOFILES)
Index: messages/docstring.files
===================================================================
RCS file: /cvsroot/mailman/mailman/messages/docstring.files,v
retrieving revision 2.1.2.4
diff -u -r2.1.2.4 docstring.files
--- messages/docstring.files 16 Mar 2004 06:04:00 -0000 2.1.2.4
+++ messages/docstring.files 25 Apr 2004 04:43:06 -0000
@@ -8,6 +8,7 @@
bin/clone_member
bin/config_list
bin/convert.py
+bin/discard
bin/dumpdb
bin/find_member
bin/fix_url.py
@@ -17,23 +18,21 @@
bin/list_lists
bin/list_members
bin/list_owners
+bin/newlist
bin/mailmanctl
bin/mmsitepass
-bin/newlist
+bin/msgfmt.py
bin/qrunner
+bin/rb-archfix
bin/remove_members
bin/rmlist
+bin/show_qfiles
bin/sync_members
bin/transcheck
bin/unshunt
bin/update
bin/version
bin/withlist
-bin/rb-archfix
-bin/rb-archfix.~1~
-bin/msgfmt.py
-bin/show_qfiles
-bin/discard
cron/bumpdigests
cron/checkdbs
cron/disabled
Index: messages/mailman.pot
===================================================================
RCS file: /cvsroot/mailman/mailman/messages/mailman.pot,v
retrieving revision 2.37.2.11
diff -u -r2.37.2.11 mailman.pot
--- messages/mailman.pot 16 Mar 2004 06:04:00 -0000 2.37.2.11
+++ messages/mailman.pot 25 Apr 2004 04:43:09 -0000
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: Mon Mar 15 22:04:14 2004\n"
+"POT-Creation-Date: Sun Apr 25 13:14:21 2004\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -220,13 +220,13 @@
msgstr ""
#: Mailman/Bouncer.py:270 Mailman/Deliverer.py:136
-#: Mailman/Handlers/Acknowledge.py:44 Mailman/Handlers/CookHeaders.py:233
+#: Mailman/Handlers/Acknowledge.py:44 Mailman/Handlers/CookHeaders.py:260
#: Mailman/Handlers/Hold.py:205 Mailman/Handlers/ToDigest.py:217
#: Mailman/ListAdmin.py:215
msgid "(no subject)"
msgstr ""
-#: Mailman/Bouncer.py:272
+#: Mailman/Bouncer.py:274
msgid "[No bounce details are available]"
msgstr ""
@@ -498,15 +498,15 @@
msgid "Spam Filter Regexp:"
msgstr ""
-#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:289
-#: Mailman/Cgi/admindb.py:348 Mailman/Cgi/admindb.py:391
-#: Mailman/Cgi/admindb.py:625
+#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:294
+#: Mailman/Cgi/admindb.py:353 Mailman/Cgi/admindb.py:396
+#: Mailman/Cgi/admindb.py:630
msgid "Defer"
msgstr ""
-#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:291
-#: Mailman/Cgi/admindb.py:350 Mailman/Cgi/admindb.py:391
-#: Mailman/Cgi/admindb.py:625 Mailman/Gui/ContentFilter.py:37
+#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:296
+#: Mailman/Cgi/admindb.py:355 Mailman/Cgi/admindb.py:396
+#: Mailman/Cgi/admindb.py:630 Mailman/Gui/ContentFilter.py:37
#: Mailman/Gui/Privacy.py:216 Mailman/Gui/Privacy.py:290
msgid "Reject"
msgstr ""
@@ -516,19 +516,19 @@
msgid "Hold"
msgstr ""
-#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:292
-#: Mailman/Cgi/admindb.py:351 Mailman/Cgi/admindb.py:391
-#: Mailman/Cgi/admindb.py:625 Mailman/Gui/ContentFilter.py:37
+#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:297
+#: Mailman/Cgi/admindb.py:356 Mailman/Cgi/admindb.py:396
+#: Mailman/Cgi/admindb.py:630 Mailman/Gui/ContentFilter.py:37
#: Mailman/Gui/Privacy.py:216 Mailman/Gui/Privacy.py:290
msgid "Discard"
msgstr ""
-#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:391
+#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:396
#: Mailman/Gui/Privacy.py:290
msgid "Accept"
msgstr ""
-#: Mailman/Cgi/admin.py:767 Mailman/Cgi/admindb.py:631
+#: Mailman/Cgi/admin.py:767 Mailman/Cgi/admindb.py:636
msgid "Action:"
msgstr ""
@@ -764,18 +764,19 @@
#: Mailman/Gui/Bounce.py:155 Mailman/Gui/ContentFilter.py:70
#: Mailman/Gui/ContentFilter.py:103 Mailman/Gui/Digest.py:46
#: Mailman/Gui/Digest.py:62 Mailman/Gui/Digest.py:84 Mailman/Gui/Digest.py:89
-#: Mailman/Gui/General.py:150 Mailman/Gui/General.py:156
-#: Mailman/Gui/General.py:234 Mailman/Gui/General.py:261
-#: Mailman/Gui/General.py:288 Mailman/Gui/General.py:299
-#: Mailman/Gui/General.py:302 Mailman/Gui/General.py:312
-#: Mailman/Gui/General.py:317 Mailman/Gui/General.py:327
-#: Mailman/Gui/General.py:347 Mailman/Gui/General.py:375
-#: Mailman/Gui/General.py:398 Mailman/Gui/NonDigest.py:44
-#: Mailman/Gui/NonDigest.py:52 Mailman/Gui/Privacy.py:110
-#: Mailman/Gui/Privacy.py:116 Mailman/Gui/Privacy.py:149
-#: Mailman/Gui/Privacy.py:197 Mailman/Gui/Privacy.py:305
-#: Mailman/Gui/Privacy.py:318 Mailman/Gui/Usenet.py:52
-#: Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93 Mailman/Gui/Usenet.py:105
+#: Mailman/Gui/General.py:153 Mailman/Gui/General.py:159
+#: Mailman/Gui/General.py:237 Mailman/Gui/General.py:264
+#: Mailman/Gui/General.py:291 Mailman/Gui/General.py:302
+#: Mailman/Gui/General.py:305 Mailman/Gui/General.py:315
+#: Mailman/Gui/General.py:320 Mailman/Gui/General.py:330
+#: Mailman/Gui/General.py:350 Mailman/Gui/General.py:378
+#: Mailman/Gui/General.py:401 Mailman/Gui/NonDigest.py:44
+#: Mailman/Gui/NonDigest.py:52 Mailman/Gui/NonDigest.py:139
+#: Mailman/Gui/Privacy.py:110 Mailman/Gui/Privacy.py:116
+#: Mailman/Gui/Privacy.py:149 Mailman/Gui/Privacy.py:197
+#: Mailman/Gui/Privacy.py:305 Mailman/Gui/Privacy.py:318
+#: Mailman/Gui/Usenet.py:52 Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93
+#: Mailman/Gui/Usenet.py:105
msgid "No"
msgstr ""
@@ -789,19 +790,19 @@
#: Mailman/Gui/Bounce.py:146 Mailman/Gui/Bounce.py:155
#: Mailman/Gui/ContentFilter.py:70 Mailman/Gui/ContentFilter.py:103
#: Mailman/Gui/Digest.py:46 Mailman/Gui/Digest.py:62 Mailman/Gui/Digest.py:84
-#: Mailman/Gui/Digest.py:89 Mailman/Gui/General.py:150
-#: Mailman/Gui/General.py:156 Mailman/Gui/General.py:234
-#: Mailman/Gui/General.py:261 Mailman/Gui/General.py:288
-#: Mailman/Gui/General.py:299 Mailman/Gui/General.py:302
-#: Mailman/Gui/General.py:312 Mailman/Gui/General.py:317
-#: Mailman/Gui/General.py:327 Mailman/Gui/General.py:347
-#: Mailman/Gui/General.py:375 Mailman/Gui/General.py:398
+#: Mailman/Gui/Digest.py:89 Mailman/Gui/General.py:153
+#: Mailman/Gui/General.py:159 Mailman/Gui/General.py:237
+#: Mailman/Gui/General.py:264 Mailman/Gui/General.py:291
+#: Mailman/Gui/General.py:302 Mailman/Gui/General.py:305
+#: Mailman/Gui/General.py:315 Mailman/Gui/General.py:320
+#: Mailman/Gui/General.py:330 Mailman/Gui/General.py:350
+#: Mailman/Gui/General.py:378 Mailman/Gui/General.py:401
#: Mailman/Gui/NonDigest.py:44 Mailman/Gui/NonDigest.py:52
-#: Mailman/Gui/Privacy.py:110 Mailman/Gui/Privacy.py:116
-#: Mailman/Gui/Privacy.py:149 Mailman/Gui/Privacy.py:197
-#: Mailman/Gui/Privacy.py:305 Mailman/Gui/Privacy.py:318
-#: Mailman/Gui/Usenet.py:52 Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93
-#: Mailman/Gui/Usenet.py:105
+#: Mailman/Gui/NonDigest.py:139 Mailman/Gui/Privacy.py:110
+#: Mailman/Gui/Privacy.py:116 Mailman/Gui/Privacy.py:149
+#: Mailman/Gui/Privacy.py:197 Mailman/Gui/Privacy.py:305
+#: Mailman/Gui/Privacy.py:318 Mailman/Gui/Usenet.py:52
+#: Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93 Mailman/Gui/Usenet.py:105
msgid "Yes"
msgstr ""
@@ -966,206 +967,210 @@
msgid "Administrative requests for mailing list:"
msgstr ""
-#: Mailman/Cgi/admindb.py:191 Mailman/Cgi/admindb.py:234
+#: Mailman/Cgi/admindb.py:191 Mailman/Cgi/admindb.py:239
msgid "Submit All Data"
msgstr ""
-#: Mailman/Cgi/admindb.py:204
-msgid "all of %(esender)s's held messages."
+#: Mailman/Cgi/admindb.py:195
+msgid "Discard all messages marked Defer"
msgstr ""
#: Mailman/Cgi/admindb.py:209
-msgid "a single held message."
+msgid "all of %(esender)s's held messages."
msgstr ""
#: Mailman/Cgi/admindb.py:214
+msgid "a single held message."
+msgstr ""
+
+#: Mailman/Cgi/admindb.py:219
msgid "all held messages."
msgstr ""
-#: Mailman/Cgi/admindb.py:249
+#: Mailman/Cgi/admindb.py:254
msgid "Mailman Administrative Database Error"
msgstr ""
-#: Mailman/Cgi/admindb.py:254
+#: Mailman/Cgi/admindb.py:259
msgid "list of available mailing lists."
msgstr ""
-#: Mailman/Cgi/admindb.py:255
+#: Mailman/Cgi/admindb.py:260
msgid "You must specify a list name. Here is the %(link)s"
msgstr ""
-#: Mailman/Cgi/admindb.py:268
+#: Mailman/Cgi/admindb.py:273
msgid "Subscription Requests"
msgstr ""
-#: Mailman/Cgi/admindb.py:270
+#: Mailman/Cgi/admindb.py:275
msgid "Address/name"
msgstr ""
-#: Mailman/Cgi/admindb.py:271 Mailman/Cgi/admindb.py:322
+#: Mailman/Cgi/admindb.py:276 Mailman/Cgi/admindb.py:327
msgid "Your decision"
msgstr ""
-#: Mailman/Cgi/admindb.py:272 Mailman/Cgi/admindb.py:323
+#: Mailman/Cgi/admindb.py:277 Mailman/Cgi/admindb.py:328
msgid "Reason for refusal"
msgstr ""
-#: Mailman/Cgi/admindb.py:290 Mailman/Cgi/admindb.py:349
-#: Mailman/Cgi/admindb.py:625
+#: Mailman/Cgi/admindb.py:295 Mailman/Cgi/admindb.py:354
+#: Mailman/Cgi/admindb.py:630
msgid "Approve"
msgstr ""
-#: Mailman/Cgi/admindb.py:300
+#: Mailman/Cgi/admindb.py:305
msgid "Permanently ban from this list"
msgstr ""
-#: Mailman/Cgi/admindb.py:321
+#: Mailman/Cgi/admindb.py:326
msgid "User address/name"
msgstr ""
-#: Mailman/Cgi/admindb.py:361
+#: Mailman/Cgi/admindb.py:366
msgid "Unsubscription Requests"
msgstr ""
-#: Mailman/Cgi/admindb.py:384 Mailman/Cgi/admindb.py:608
+#: Mailman/Cgi/admindb.py:389 Mailman/Cgi/admindb.py:613
msgid "From:"
msgstr ""
-#: Mailman/Cgi/admindb.py:387
+#: Mailman/Cgi/admindb.py:392
msgid "Action to take on all these held messages:"
msgstr ""
-#: Mailman/Cgi/admindb.py:399
+#: Mailman/Cgi/admindb.py:404
msgid "Preserve messages for the site administrator"
msgstr ""
-#: Mailman/Cgi/admindb.py:405
+#: Mailman/Cgi/admindb.py:410
msgid "Forward messages (individually) to:"
msgstr ""
-#: Mailman/Cgi/admindb.py:423
+#: Mailman/Cgi/admindb.py:428
msgid "Clear this member's moderate flag"
msgstr ""
-#: Mailman/Cgi/admindb.py:427
+#: Mailman/Cgi/admindb.py:432
msgid "The sender is now a member of this list"
msgstr ""
-#: Mailman/Cgi/admindb.py:436
+#: Mailman/Cgi/admindb.py:441
msgid "Add %(esender)s to one of these sender filters:"
msgstr ""
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Accepts"
msgstr ""
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Discards"
msgstr ""
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Holds"
msgstr ""
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Rejects"
msgstr ""
-#: Mailman/Cgi/admindb.py:450
+#: Mailman/Cgi/admindb.py:455
msgid ""
"Ban %(esender)s from ever subscribing to this\n"
" mailing list"
msgstr ""
-#: Mailman/Cgi/admindb.py:455
+#: Mailman/Cgi/admindb.py:460
msgid ""
"Click on the message number to view the individual\n"
" message, or you can "
msgstr ""
-#: Mailman/Cgi/admindb.py:457
+#: Mailman/Cgi/admindb.py:462
msgid "view all messages from %(esender)s"
msgstr ""
-#: Mailman/Cgi/admindb.py:479 Mailman/Cgi/admindb.py:611
+#: Mailman/Cgi/admindb.py:484 Mailman/Cgi/admindb.py:616
msgid "Subject:"
msgstr ""
-#: Mailman/Cgi/admindb.py:482
+#: Mailman/Cgi/admindb.py:487
msgid " bytes"
msgstr ""
-#: Mailman/Cgi/admindb.py:482
+#: Mailman/Cgi/admindb.py:487
msgid "Size:"
msgstr ""
-#: Mailman/Cgi/admindb.py:486 Mailman/Handlers/Decorate.py:56
-#: Mailman/Handlers/Scrubber.py:268 Mailman/Handlers/Scrubber.py:269
+#: Mailman/Cgi/admindb.py:491 Mailman/Handlers/Scrubber.py:198
+#: Mailman/Handlers/Scrubber.py:294 Mailman/Handlers/Scrubber.py:295
msgid "not available"
msgstr ""
-#: Mailman/Cgi/admindb.py:487 Mailman/Cgi/admindb.py:614
+#: Mailman/Cgi/admindb.py:492 Mailman/Cgi/admindb.py:619
msgid "Reason:"
msgstr ""
-#: Mailman/Cgi/admindb.py:491 Mailman/Cgi/admindb.py:618
+#: Mailman/Cgi/admindb.py:496 Mailman/Cgi/admindb.py:623
msgid "Received:"
msgstr ""
-#: Mailman/Cgi/admindb.py:549
+#: Mailman/Cgi/admindb.py:554
msgid "Posting Held for Approval"
msgstr ""
-#: Mailman/Cgi/admindb.py:551
+#: Mailman/Cgi/admindb.py:556
msgid " (%(count)d of %(total)d)"
msgstr ""
-#: Mailman/Cgi/admindb.py:562
+#: Mailman/Cgi/admindb.py:567
msgid "Message with id #%(id)d was lost."
msgstr ""
-#: Mailman/Cgi/admindb.py:571
+#: Mailman/Cgi/admindb.py:576
msgid "Message with id #%(id)d is corrupted."
msgstr ""
-#: Mailman/Cgi/admindb.py:635
+#: Mailman/Cgi/admindb.py:640
msgid "Preserve message for site administrator"
msgstr ""
-#: Mailman/Cgi/admindb.py:639
+#: Mailman/Cgi/admindb.py:644
msgid "Additionally, forward this message to: "
msgstr ""
-#: Mailman/Cgi/admindb.py:643
+#: Mailman/Cgi/admindb.py:648
msgid "[No explanation given]"
msgstr ""
-#: Mailman/Cgi/admindb.py:645
+#: Mailman/Cgi/admindb.py:650
msgid "If you reject this post, please explain (optional):"
msgstr ""
-#: Mailman/Cgi/admindb.py:651
+#: Mailman/Cgi/admindb.py:656
msgid "Message Headers:"
msgstr ""
-#: Mailman/Cgi/admindb.py:656
+#: Mailman/Cgi/admindb.py:661
msgid "Message Excerpt:"
msgstr ""
-#: Mailman/Cgi/admindb.py:689 Mailman/Deliverer.py:134
+#: Mailman/Cgi/admindb.py:701 Mailman/Deliverer.py:134
msgid "No reason given"
msgstr ""
-#: Mailman/Cgi/admindb.py:750 Mailman/ListAdmin.py:288
+#: Mailman/Cgi/admindb.py:762 Mailman/ListAdmin.py:288
#: Mailman/ListAdmin.py:406
msgid "[No reason given]"
msgstr ""
-#: Mailman/Cgi/admindb.py:779
+#: Mailman/Cgi/admindb.py:791
msgid "Database Updated..."
msgstr ""
-#: Mailman/Cgi/admindb.py:782
+#: Mailman/Cgi/admindb.py:794
msgid " is already a member"
msgstr ""
@@ -1295,7 +1300,7 @@
msgid "You have canceled your subscription request."
msgstr ""
-#: Mailman/Cgi/confirm.py:354
+#: Mailman/Cgi/confirm.py:354 Mailman/Cgi/confirm.py:425
msgid "Awaiting moderator approval"
msgstr ""
@@ -1308,8 +1313,8 @@
" of the moderator's decision."
msgstr ""
-#: Mailman/Cgi/confirm.py:364 Mailman/Cgi/confirm.py:424
-#: Mailman/Cgi/confirm.py:513 Mailman/Cgi/confirm.py:736
+#: Mailman/Cgi/confirm.py:364 Mailman/Cgi/confirm.py:435
+#: Mailman/Cgi/confirm.py:524 Mailman/Cgi/confirm.py:747
msgid ""
"Invalid confirmation string. It is\n"
" possible that you are attempting to confirm a request for an\n"
@@ -1347,26 +1352,35 @@
msgid "You have canceled your unsubscription request."
msgstr ""
-#: Mailman/Cgi/confirm.py:430
+#: Mailman/Cgi/confirm.py:428
+msgid ""
+" You have successfully confirmed your unsubscription request to the\n"
+" mailing list %(listname)s, however final approval is required from\n"
+" the list moderator before you will be unsubscribed. Your request\n"
+" has been forwarded to the list moderator, and you will be notified\n"
+" of the moderator's decision."
+msgstr ""
+
+#: Mailman/Cgi/confirm.py:441
msgid "Unsubscription request confirmed"
msgstr ""
-#: Mailman/Cgi/confirm.py:434
+#: Mailman/Cgi/confirm.py:445
msgid ""
" You have successfully unsubscribed from the %(listname)s mailing\n"
" list. You can now visit the list's main\n"
" information page."
msgstr ""
-#: Mailman/Cgi/confirm.py:445
+#: Mailman/Cgi/confirm.py:456
msgid "Confirm unsubscription request"
msgstr ""
-#: Mailman/Cgi/confirm.py:460 Mailman/Cgi/confirm.py:550
+#: Mailman/Cgi/confirm.py:471 Mailman/Cgi/confirm.py:561
msgid "Not available"
msgstr ""
-#: Mailman/Cgi/confirm.py:463
+#: Mailman/Cgi/confirm.py:474
msgid ""
"Your confirmation is required in order to complete the\n"
" unsubscription request from the mailing list %(listname)s. You\n"
@@ -1383,24 +1397,24 @@
" request."
msgstr ""
-#: Mailman/Cgi/confirm.py:479 Mailman/Cgi/options.py:696
+#: Mailman/Cgi/confirm.py:490 Mailman/Cgi/options.py:696
#: Mailman/Cgi/options.py:837 Mailman/Cgi/options.py:847
msgid "Unsubscribe"
msgstr ""
-#: Mailman/Cgi/confirm.py:480 Mailman/Cgi/confirm.py:579
+#: Mailman/Cgi/confirm.py:491 Mailman/Cgi/confirm.py:590
msgid "Cancel and discard"
msgstr ""
-#: Mailman/Cgi/confirm.py:490
+#: Mailman/Cgi/confirm.py:501
msgid "You have canceled your change of address request."
msgstr ""
-#: Mailman/Cgi/confirm.py:519
+#: Mailman/Cgi/confirm.py:530
msgid "Change of address request confirmed"
msgstr ""
-#: Mailman/Cgi/confirm.py:523
+#: Mailman/Cgi/confirm.py:534
msgid ""
" You have successfully changed your address on the %(listname)s\n"
" mailing list from %(oldaddr)s to %(newaddr)s. You\n"
@@ -1408,15 +1422,15 @@
" login page."
msgstr ""
-#: Mailman/Cgi/confirm.py:535
+#: Mailman/Cgi/confirm.py:546
msgid "Confirm change of address request"
msgstr ""
-#: Mailman/Cgi/confirm.py:554
+#: Mailman/Cgi/confirm.py:565
msgid "globally"
msgstr ""
-#: Mailman/Cgi/confirm.py:557
+#: Mailman/Cgi/confirm.py:568
msgid ""
"Your confirmation is required in order to complete the\n"
" change of address request for the mailing list %(listname)s. You\n"
@@ -1438,25 +1452,25 @@
" request."
msgstr ""
-#: Mailman/Cgi/confirm.py:578
+#: Mailman/Cgi/confirm.py:589
msgid "Change address"
msgstr ""
-#: Mailman/Cgi/confirm.py:587 Mailman/Cgi/confirm.py:701
+#: Mailman/Cgi/confirm.py:598 Mailman/Cgi/confirm.py:712
msgid "Continue awaiting approval"
msgstr ""
-#: Mailman/Cgi/confirm.py:595
+#: Mailman/Cgi/confirm.py:606
msgid ""
"Okay, the list moderator will still have the\n"
" opportunity to approve or reject this message."
msgstr ""
-#: Mailman/Cgi/confirm.py:621
+#: Mailman/Cgi/confirm.py:632
msgid "Sender discarded message via web."
msgstr ""
-#: Mailman/Cgi/confirm.py:623
+#: Mailman/Cgi/confirm.py:634
msgid ""
"The held message with the Subject:\n"
" header %(subject)s could not be found. The most likely\n"
@@ -1465,28 +1479,28 @@
" time."
msgstr ""
-#: Mailman/Cgi/confirm.py:631
+#: Mailman/Cgi/confirm.py:642
msgid "Posted message canceled"
msgstr ""
-#: Mailman/Cgi/confirm.py:634
+#: Mailman/Cgi/confirm.py:645
msgid ""
" You have successfully canceled the posting of your message with\n"
" the Subject: header %(subject)s to the mailing list\n"
" %(listname)s."
msgstr ""
-#: Mailman/Cgi/confirm.py:645
+#: Mailman/Cgi/confirm.py:656
msgid "Cancel held message posting"
msgstr ""
-#: Mailman/Cgi/confirm.py:670
+#: Mailman/Cgi/confirm.py:681
msgid ""
"The held message you were referred to has\n"
" already been handled by the list administrator."
msgstr ""
-#: Mailman/Cgi/confirm.py:684
+#: Mailman/Cgi/confirm.py:695
msgid ""
"Your confirmation is required in order to cancel the\n"
" posting of your message to the mailing list %(listname)s:\n"
@@ -1502,22 +1516,22 @@
" allow the list moderator to approve or reject the message."
msgstr ""
-#: Mailman/Cgi/confirm.py:700
+#: Mailman/Cgi/confirm.py:711
msgid "Cancel posting"
msgstr ""
-#: Mailman/Cgi/confirm.py:712
+#: Mailman/Cgi/confirm.py:723
msgid ""
"You have canceled the re-enabling of your membership. If\n"
" we continue to receive bounces from your address, it could be deleted from\n"
" this mailing list."
msgstr ""
-#: Mailman/Cgi/confirm.py:742
+#: Mailman/Cgi/confirm.py:753
msgid "Membership re-enabled."
msgstr ""
-#: Mailman/Cgi/confirm.py:746
+#: Mailman/Cgi/confirm.py:757
msgid ""
" You have successfully re-enabled your membership in the\n"
" %(listname)s mailing list. You can now list information page."
msgstr ""
-#: Mailman/Cgi/confirm.py:789
+#: Mailman/Cgi/confirm.py:800
msgid "not available"
msgstr ""
-#: Mailman/Cgi/confirm.py:793
+#: Mailman/Cgi/confirm.py:804
msgid ""
"Your membership in the %(realname)s mailing list is\n"
" currently disabled due to excessive bounces. Your confirmation is\n"
@@ -1560,11 +1574,11 @@
" "
msgstr ""
-#: Mailman/Cgi/confirm.py:813
+#: Mailman/Cgi/confirm.py:824
msgid "Re-enable membership"
msgstr ""
-#: Mailman/Cgi/confirm.py:814
+#: Mailman/Cgi/confirm.py:825
msgid "Cancel"
msgstr ""
@@ -1974,8 +1988,8 @@
msgid "Passwords did not match!"
msgstr ""
-#: Mailman/Cgi/options.py:414 Mailman/Commands/cmd_password.py:79
-#: Mailman/Commands/cmd_password.py:105
+#: Mailman/Cgi/options.py:414 Mailman/Commands/cmd_password.py:83
+#: Mailman/Commands/cmd_password.py:109
msgid "Password successfully changed."
msgstr ""
@@ -2518,24 +2532,24 @@
" response is always sent to the subscribed address.\n"
msgstr ""
-#: Mailman/Commands/cmd_password.py:51 Mailman/Commands/cmd_password.py:64
+#: Mailman/Commands/cmd_password.py:51 Mailman/Commands/cmd_password.py:66
msgid "Your password is: %(password)s"
msgstr ""
-#: Mailman/Commands/cmd_password.py:55 Mailman/Commands/cmd_password.py:68
-#: Mailman/Commands/cmd_password.py:91 Mailman/Commands/cmd_password.py:117
+#: Mailman/Commands/cmd_password.py:57 Mailman/Commands/cmd_password.py:72
+#: Mailman/Commands/cmd_password.py:95 Mailman/Commands/cmd_password.py:121
#: Mailman/Commands/cmd_set.py:149 Mailman/Commands/cmd_set.py:219
msgid "You are not a member of the %(listname)s mailing list"
msgstr ""
-#: Mailman/Commands/cmd_password.py:81 Mailman/Commands/cmd_password.py:107
+#: Mailman/Commands/cmd_password.py:85 Mailman/Commands/cmd_password.py:111
msgid ""
"You did not give the correct old password, so your password has not been\n"
"changed. Use the no argument version of the password command to retrieve your\n"
"current password, then try again."
msgstr ""
-#: Mailman/Commands/cmd_password.py:85 Mailman/Commands/cmd_password.py:111
+#: Mailman/Commands/cmd_password.py:89 Mailman/Commands/cmd_password.py:115
msgid ""
"\n"
"Usage:"
@@ -2890,119 +2904,119 @@
msgid "Digest members:"
msgstr ""
-#: Mailman/Defaults.py:1249
+#: Mailman/Defaults.py:1261
msgid "Catalan"
msgstr ""
-#: Mailman/Defaults.py:1250
+#: Mailman/Defaults.py:1262
msgid "Czech"
msgstr ""
-#: Mailman/Defaults.py:1251
+#: Mailman/Defaults.py:1263
msgid "Danish"
msgstr ""
-#: Mailman/Defaults.py:1252
+#: Mailman/Defaults.py:1264
msgid "German"
msgstr ""
-#: Mailman/Defaults.py:1253
+#: Mailman/Defaults.py:1265
msgid "English (USA)"
msgstr ""
-#: Mailman/Defaults.py:1254
+#: Mailman/Defaults.py:1266
msgid "Spanish (Spain)"
msgstr ""
-#: Mailman/Defaults.py:1255
+#: Mailman/Defaults.py:1267
msgid "Estonian"
msgstr ""
-#: Mailman/Defaults.py:1256
+#: Mailman/Defaults.py:1268
msgid "Euskara"
msgstr ""
-#: Mailman/Defaults.py:1257
+#: Mailman/Defaults.py:1269
msgid "Finnish"
msgstr ""
-#: Mailman/Defaults.py:1258
+#: Mailman/Defaults.py:1270
msgid "French"
msgstr ""
-#: Mailman/Defaults.py:1259
+#: Mailman/Defaults.py:1271
msgid "Croatian"
msgstr ""
-#: Mailman/Defaults.py:1260
+#: Mailman/Defaults.py:1272
msgid "Hungarian"
msgstr ""
-#: Mailman/Defaults.py:1261
+#: Mailman/Defaults.py:1273
msgid "Italian"
msgstr ""
-#: Mailman/Defaults.py:1262
+#: Mailman/Defaults.py:1274
msgid "Japanese"
msgstr ""
-#: Mailman/Defaults.py:1263
+#: Mailman/Defaults.py:1275
msgid "Korean"
msgstr ""
-#: Mailman/Defaults.py:1264
+#: Mailman/Defaults.py:1276
msgid "Lithuanian"
msgstr ""
-#: Mailman/Defaults.py:1265
+#: Mailman/Defaults.py:1277
msgid "Dutch"
msgstr ""
-#: Mailman/Defaults.py:1266
+#: Mailman/Defaults.py:1278
msgid "Norwegian"
msgstr ""
-#: Mailman/Defaults.py:1267
+#: Mailman/Defaults.py:1279
msgid "Polish"
msgstr ""
-#: Mailman/Defaults.py:1268
+#: Mailman/Defaults.py:1280
msgid "Portuguese"
msgstr ""
-#: Mailman/Defaults.py:1269
+#: Mailman/Defaults.py:1281
msgid "Portuguese (Brazil)"
msgstr ""
-#: Mailman/Defaults.py:1270
+#: Mailman/Defaults.py:1282
msgid "Romanian"
msgstr ""
-#: Mailman/Defaults.py:1271
+#: Mailman/Defaults.py:1283
msgid "Russian"
msgstr ""
-#: Mailman/Defaults.py:1272
+#: Mailman/Defaults.py:1284
msgid "Serbian"
msgstr ""
-#: Mailman/Defaults.py:1273
+#: Mailman/Defaults.py:1285
msgid "Slovenian"
msgstr ""
-#: Mailman/Defaults.py:1274
+#: Mailman/Defaults.py:1286
msgid "Swedish"
msgstr ""
-#: Mailman/Defaults.py:1275
+#: Mailman/Defaults.py:1287
msgid "Ukrainian"
msgstr ""
-#: Mailman/Defaults.py:1276
+#: Mailman/Defaults.py:1288
msgid "Chinese (China)"
msgstr ""
-#: Mailman/Defaults.py:1277
+#: Mailman/Defaults.py:1289
msgid "Chinese (Taiwan)"
msgstr ""
@@ -3289,7 +3303,7 @@
" Is Disabled warnings. This value must be an integer."
msgstr ""
-#: Mailman/Gui/Bounce.py:117 Mailman/Gui/General.py:259
+#: Mailman/Gui/Bounce.py:117 Mailman/Gui/General.py:262
msgid "Notifications"
msgstr ""
@@ -3759,20 +3773,23 @@
" posted to the list, to distinguish mailing list messages in in\n"
" mailbox summaries. Brevity is premium here, it's ok to shorten\n"
" long mailing list names to something more concise, as long as it\n"
-" still identifies the mailing list."
+" still identifies the mailing list. You can also add a sequencial\n"
+" number by %%d directive when the prefix is closed in [], {} or\n"
+" (). Example: [listname %%d] -> [listname 123], (listname %%05d)\n"
+" -> (listname 00123)"
msgstr ""
-#: Mailman/Gui/General.py:151
+#: Mailman/Gui/General.py:154
msgid ""
"Hide the sender of a message, replacing it with the list\n"
" address (Removes From, Sender and Reply-To fields)"
msgstr ""
-#: Mailman/Gui/General.py:154
+#: Mailman/Gui/General.py:157
msgid "Reply-To: header munging"
msgstr ""
-#: Mailman/Gui/General.py:157
+#: Mailman/Gui/General.py:160
msgid ""
"Should any existing Reply-To: header found in the\n"
" original message be stripped? If so, this will be done\n"
@@ -3780,26 +3797,26 @@
" added by Mailman or not."
msgstr ""
-#: Mailman/Gui/General.py:163
+#: Mailman/Gui/General.py:166
msgid "Explicit address"
msgstr ""
-#: Mailman/Gui/General.py:163
+#: Mailman/Gui/General.py:166
msgid "Poster"
msgstr ""
-#: Mailman/Gui/General.py:163
+#: Mailman/Gui/General.py:166
msgid "This list"
msgstr ""
-#: Mailman/Gui/General.py:164
+#: Mailman/Gui/General.py:167
msgid ""
"Where are replies to list messages directed?\n"
" Poster is strongly recommended for most mailing\n"
" lists."
msgstr ""
-#: Mailman/Gui/General.py:169
+#: Mailman/Gui/General.py:172
msgid ""
"This option controls what Mailman does to the\n"
" Reply-To: header in messages flowing through this\n"
@@ -3833,11 +3850,11 @@
" list."
msgstr ""
-#: Mailman/Gui/General.py:201
+#: Mailman/Gui/General.py:204
msgid "Explicit Reply-To: header."
msgstr ""
-#: Mailman/Gui/General.py:203
+#: Mailman/Gui/General.py:206
msgid ""
"This is the address set in the Reply-To: header\n"
" when the Reply-To: header, it will not be changed."
msgstr ""
-#: Mailman/Gui/General.py:232
+#: Mailman/Gui/General.py:235
msgid "Umbrella list settings"
msgstr ""
-#: Mailman/Gui/General.py:235
+#: Mailman/Gui/General.py:238
msgid ""
"Send password reminders to, eg, \"-owner\" address instead of\n"
" directly to user."
msgstr ""
-#: Mailman/Gui/General.py:238
+#: Mailman/Gui/General.py:241
msgid ""
"Set this to yes when this list is intended to cascade only\n"
" to other mailing lists. When set, meta notices like\n"
@@ -3889,14 +3906,14 @@
" account name."
msgstr ""
-#: Mailman/Gui/General.py:246
+#: Mailman/Gui/General.py:249
msgid ""
"Suffix for use when this list is an umbrella for other\n"
" lists, according to setting of previous \"umbrella_list\"\n"
" setting."
msgstr ""
-#: Mailman/Gui/General.py:250
+#: Mailman/Gui/General.py:253
msgid ""
"When \"umbrella_list\" is set to indicate that this list has\n"
" other mailing lists as members, then administrative notices like\n"
@@ -3908,24 +3925,24 @@
" is \"No\"."
msgstr ""
-#: Mailman/Gui/General.py:262
+#: Mailman/Gui/General.py:265
msgid "Send monthly password reminders?"
msgstr ""
-#: Mailman/Gui/General.py:264
+#: Mailman/Gui/General.py:267
msgid ""
"Turn this on if you want password reminders to be sent once\n"
" per month to your members. Note that members may disable their\n"
" own individual password reminders."
msgstr ""
-#: Mailman/Gui/General.py:269
+#: Mailman/Gui/General.py:272
msgid ""
"List-specific text prepended to new-subscriber welcome\n"
" message"
msgstr ""
-#: Mailman/Gui/General.py:272
+#: Mailman/Gui/General.py:275
msgid ""
"This value, if any, will be added to the front of the\n"
" new-subscriber welcome message. The rest of the welcome message\n"
@@ -3944,11 +3961,11 @@
" "
msgstr ""
-#: Mailman/Gui/General.py:289
+#: Mailman/Gui/General.py:292
msgid "Send welcome message to newly subscribed members?"
msgstr ""
-#: Mailman/Gui/General.py:290
+#: Mailman/Gui/General.py:293
msgid ""
"Turn this off only if you plan on subscribing people manually\n"
" and don't want them to know that you did so. This option is most\n"
@@ -3956,23 +3973,23 @@
" list manager to Mailman."
msgstr ""
-#: Mailman/Gui/General.py:296
+#: Mailman/Gui/General.py:299
msgid ""
"Text sent to people leaving the list. If empty, no special\n"
" text will be added to the unsubscribe message."
msgstr ""
-#: Mailman/Gui/General.py:300
+#: Mailman/Gui/General.py:303
msgid "Send goodbye message to members when they are unsubscribed?"
msgstr ""
-#: Mailman/Gui/General.py:303
+#: Mailman/Gui/General.py:306
msgid ""
"Should the list moderators get immediate notice of new\n"
" requests, as well as daily notices about collected ones?"
msgstr ""
-#: Mailman/Gui/General.py:306
+#: Mailman/Gui/General.py:309
msgid ""
"List moderators (and list administrators) are sent daily\n"
" reminders of requests pending approval, like subscriptions to a\n"
@@ -3981,17 +3998,17 @@
" immediately on the arrival of new requests as well."
msgstr ""
-#: Mailman/Gui/General.py:313
+#: Mailman/Gui/General.py:316
msgid ""
"Should administrator get notices of subscribes and\n"
" unsubscribes?"
msgstr ""
-#: Mailman/Gui/General.py:318
+#: Mailman/Gui/General.py:321
msgid "Send mail to poster when their posting is held for approval?"
msgstr ""
-#: Mailman/Gui/General.py:320
+#: Mailman/Gui/General.py:323
msgid ""
"Approval notices are sent when mail triggers certain of the\n"
" limits except routine list moderation and spam filters,\n"
@@ -3999,15 +4016,15 @@
" ever sending the notice."
msgstr ""
-#: Mailman/Gui/General.py:325
+#: Mailman/Gui/General.py:328
msgid "Additional settings"
msgstr ""
-#: Mailman/Gui/General.py:328
+#: Mailman/Gui/General.py:331
msgid "Emergency moderation of all list traffic."
msgstr ""
-#: Mailman/Gui/General.py:329
+#: Mailman/Gui/General.py:332
msgid ""
"When this option is enabled, all list traffic is emergency\n"
" moderated, i.e. held for moderation. Turn this option on when\n"
@@ -4015,25 +4032,25 @@
" period."
msgstr ""
-#: Mailman/Gui/General.py:341
+#: Mailman/Gui/General.py:344
msgid ""
"Default options for new members joining this list."
msgstr ""
-#: Mailman/Gui/General.py:344
+#: Mailman/Gui/General.py:347
msgid ""
"When a new member is subscribed to this list, their initial\n"
" set of options is taken from the this variable's setting."
msgstr ""
-#: Mailman/Gui/General.py:348
+#: Mailman/Gui/General.py:351
msgid ""
"(Administrivia filter) Check postings and intercept ones\n"
" that seem to be administrative requests?"
msgstr ""
-#: Mailman/Gui/General.py:351
+#: Mailman/Gui/General.py:354
msgid ""
"Administrivia tests will check postings to see whether it's\n"
" really meant as an administrative request (like subscribe,\n"
@@ -4042,17 +4059,17 @@
" in the process."
msgstr ""
-#: Mailman/Gui/General.py:358
+#: Mailman/Gui/General.py:361
msgid ""
"Maximum length in kilobytes (KB) of a message body. Use 0\n"
" for no limit."
msgstr ""
-#: Mailman/Gui/General.py:362
+#: Mailman/Gui/General.py:365
msgid "Host name this list prefers for email."
msgstr ""
-#: Mailman/Gui/General.py:364
+#: Mailman/Gui/General.py:367
msgid ""
"The \"host_name\" is the preferred name for email to\n"
" mailman-related addresses on this host, and generally should be\n"
@@ -4061,7 +4078,7 @@
" multiple addresses."
msgstr ""
-#: Mailman/Gui/General.py:376
+#: Mailman/Gui/General.py:379
msgid ""
"Should messages from this mailing list include the\n"
" RFC 2369\n"
@@ -4069,7 +4086,7 @@
" recommended."
msgstr ""
-#: Mailman/Gui/General.py:381
+#: Mailman/Gui/General.py:384
msgid ""
"RFC 2369 defines a set of List-* headers that are\n"
" normally added to every message sent to the list membership.\n"
@@ -4086,11 +4103,11 @@
" these headers may eventually go away)."
msgstr ""
-#: Mailman/Gui/General.py:399
+#: Mailman/Gui/General.py:402
msgid "Should postings include the List-Post: header?"
msgstr ""
-#: Mailman/Gui/General.py:400
+#: Mailman/Gui/General.py:403
msgid ""
"The List-Post: header is one of the headers\n"
" recommended by\n"
@@ -4104,14 +4121,20 @@
" headers.)"
msgstr ""
-#: Mailman/Gui/General.py:418
+#: Mailman/Gui/General.py:417
+msgid ""
+"Discard held messages older than this number of days. \n"
+" Use 0 for no automatic discarding."
+msgstr ""
+
+#: Mailman/Gui/General.py:427
msgid ""
"real_name attribute not\n"
" changed! It must differ from the list's name by case\n"
" only."
msgstr ""
-#: Mailman/Gui/General.py:448
+#: Mailman/Gui/General.py:457
msgid ""
"You cannot add a Reply-To: to an explicit\n"
" address if that address is blank. Resetting these values."
@@ -4318,6 +4341,18 @@
" message. "
msgstr ""
+#: Mailman/Gui/NonDigest.py:140
+msgid "Scrub attachments of regular delivery message?"
+msgstr ""
+
+#: Mailman/Gui/NonDigest.py:141
+msgid ""
+"When you scrub attachments, they are stored in archive\n"
+" area and links are made in the message so that the member can\n"
+" access via web browser. If you want the attachments totally\n"
+" disappear, you can use content filter options."
+msgstr ""
+
#: Mailman/Gui/Passwords.py:27
msgid "Passwords"
msgstr ""
@@ -5439,29 +5474,36 @@
msgid "The Mailman Replybot"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:188
+#: Mailman/Handlers/Scrubber.py:202
+msgid ""
+"An embedded and charset-unspecified text was scrubbed...\n"
+"Name: %(filename)s\n"
+"Url: %(url)s\n"
+msgstr ""
+
+#: Mailman/Handlers/Scrubber.py:213
msgid "HTML attachment scrubbed and removed"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:205 Mailman/Handlers/Scrubber.py:231
+#: Mailman/Handlers/Scrubber.py:231 Mailman/Handlers/Scrubber.py:257
msgid ""
"An HTML attachment was scrubbed...\n"
"URL: %(url)s\n"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:243
+#: Mailman/Handlers/Scrubber.py:269
msgid "no subject"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:244
+#: Mailman/Handlers/Scrubber.py:270
msgid "no date"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:245
+#: Mailman/Handlers/Scrubber.py:271
msgid "unknown sender"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:248
+#: Mailman/Handlers/Scrubber.py:274
msgid ""
"An embedded message was scrubbed...\n"
"From: %(who)s\n"
@@ -5471,7 +5513,7 @@
"Url: %(url)s\n"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:272
+#: Mailman/Handlers/Scrubber.py:299
msgid ""
"A non-text attachment was scrubbed...\n"
"Name: %(filename)s\n"
@@ -5481,11 +5523,12 @@
"Url : %(url)s\n"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:301
-msgid "Skipped content of type %(partctype)s"
+#: Mailman/Handlers/Scrubber.py:330
+msgid ""
+"Skipped content of type %(partctype)s\n"
msgstr ""
-#: Mailman/Handlers/Scrubber.py:327
+#: Mailman/Handlers/Scrubber.py:365
msgid ""
"-------------- next part --------------\n"
msgstr ""
@@ -5640,35 +5683,35 @@
msgid "%(dbfile)s owned by %(owner)s (must be owned by %(user)s"
msgstr ""
-#: Mailman/MailList.py:756
+#: Mailman/MailList.py:760
msgid "You have been invited to join the %(listname)s mailing list"
msgstr ""
-#: Mailman/MailList.py:860 Mailman/MailList.py:1249
+#: Mailman/MailList.py:864 Mailman/MailList.py:1258
msgid " from %(remote)s"
msgstr ""
-#: Mailman/MailList.py:894
+#: Mailman/MailList.py:898
msgid "subscriptions to %(realname)s require moderator approval"
msgstr ""
-#: Mailman/MailList.py:958 bin/add_members:242
+#: Mailman/MailList.py:962 bin/add_members:242
msgid "%(realname)s subscription notification"
msgstr ""
-#: Mailman/MailList.py:977
+#: Mailman/MailList.py:982 Mailman/MailList.py:1176
msgid "unsubscriptions require moderator approval"
msgstr ""
-#: Mailman/MailList.py:997
+#: Mailman/MailList.py:1002
msgid "%(realname)s unsubscribe notification"
msgstr ""
-#: Mailman/MailList.py:1158
+#: Mailman/MailList.py:1163
msgid "subscriptions to %(name)s require administrator approval"
msgstr ""
-#: Mailman/MailList.py:1418
+#: Mailman/MailList.py:1427
msgid "Last autoresponse notification for today"
msgstr ""
@@ -5906,7 +5949,7 @@
msgstr ""
#: bin/add_members:230 bin/change_pw:158 bin/check_db:114 bin/discard:83
-#: bin/sync_members:244 bin/update:552 cron/bumpdigests:78
+#: bin/sync_members:244 bin/update:555 cron/bumpdigests:78
msgid "Nothing to do."
msgstr ""
@@ -7282,39 +7325,6 @@
"This script is provided for convenience purposes only. It isn't supported.\n"
msgstr ""
-#: bin/rb-archfix.~1~:21
-#, docstring
-msgid ""
-"Reduce disk space usage for Pipermail archives.\n"
-"\n"
-"Only use this script if you have correctly installed the patch file\n"
-"fixarchiver-2.1.3-0.1.patch that this file came with. Using this if you have\n"
-"not installed the rest of the patch (including restarting mailmanctl) will ruin\n"
-"your whole day.\n"
-"\n"
-"Usage: %(PROGRAM)s [options] file ...\n"
-"\n"
-"Where options are:\n"
-" -h / --help\n"
-" Print this help message and exit.\n"
-"\n"
-"Only use this to 'fix' archive -article database files that have been written\n"
-"with Mailman 2.1.3 or earlier and have html_body attributes in them . These\n"
-"attributes can cause huge amounts of memory bloat and impact performance for\n"
-"high activity lists, particularly those having large text postings made to\n"
-"them. Use like this from your $PREFIX directory:\n"
-"\n"
-"\n"
-"%% ls -1 archives/private/*/database/*-article | xargs %(PROGRAM)s\n"
-"\n"
-"(note the backquotes are required)\n"
-"\n"
-"You will need to run `bin/check_perms -f' after running this script.\n"
-"\n"
-"You will probably want to delete the -article.bak files created by this script\n"
-"when you are satisifed the upad\n"
-msgstr ""
-
#: bin/remove_members:19
#, docstring
msgid ""
@@ -7681,7 +7691,7 @@
msgid "Fixing language templates: %(listname)s"
msgstr ""
-#: bin/update:196 bin/update:686
+#: bin/update:196 bin/update:689
msgid "WARNING: could not acquire lock for list: %(listname)s"
msgstr ""
@@ -7792,61 +7802,61 @@
msgid "updating old qfiles"
msgstr ""
-#: bin/update:509
+#: bin/update:512
msgid "message is unparsable: %(filebase)s"
msgstr ""
-#: bin/update:538
+#: bin/update:541
msgid "Updating Mailman 2.0 pending_subscriptions.db database"
msgstr ""
-#: bin/update:549
+#: bin/update:552
msgid "Updating Mailman 2.1.4 pending.pck database"
msgstr ""
-#: bin/update:573
+#: bin/update:576
msgid "Ignoring bad pended data: %(key)s: %(val)s"
msgstr ""
-#: bin/update:589
+#: bin/update:592
msgid "WARNING: Ignoring duplicate pending ID: %(id)s."
msgstr ""
-#: bin/update:642
+#: bin/update:645
msgid "getting rid of old source files"
msgstr ""
-#: bin/update:652
+#: bin/update:655
msgid "no lists == nothing to do, exiting"
msgstr ""
-#: bin/update:659
+#: bin/update:662
msgid ""
"fixing all the perms on your old html archives to work with b6\n"
"If your archives are big, this could take a minute or two..."
msgstr ""
-#: bin/update:664
+#: bin/update:667
msgid "done"
msgstr ""
-#: bin/update:666
+#: bin/update:669
msgid "Updating mailing list: %(listname)s"
msgstr ""
-#: bin/update:669
+#: bin/update:672
msgid "Updating Usenet watermarks"
msgstr ""
-#: bin/update:674
+#: bin/update:677
msgid "- nothing to update here"
msgstr ""
-#: bin/update:697
+#: bin/update:700
msgid "- usenet watermarks updated and gate_watermarks removed"
msgstr ""
-#: bin/update:711
+#: bin/update:714
msgid ""
"\n"
"\n"
@@ -7867,22 +7877,22 @@
"\n"
msgstr ""
-#: bin/update:768
+#: bin/update:771
msgid "No updates are necessary."
msgstr ""
-#: bin/update:771
+#: bin/update:774
msgid ""
"Downgrade detected, from version %(hexlversion)s to version %(hextversion)s\n"
"This is probably not safe.\n"
"Exiting."
msgstr ""
-#: bin/update:776
+#: bin/update:779
msgid "Upgrading from version %(hexlversion)s to %(hextversion)s"
msgstr ""
-#: bin/update:785
+#: bin/update:788
msgid ""
"\n"
"ERROR:\n"
@@ -8093,21 +8103,27 @@
" Print this message and exit.\n"
msgstr ""
-#: cron/checkdbs:110
-msgid "%(count)d %(realname)s moderator request(s) waiting"
+#: cron/checkdbs:107
+msgid ""
+"Notice: %(discarded)d old request(s) automatically expired.\n"
+"\n"
msgstr ""
-#: cron/checkdbs:130
-msgid "Pending subscriptions:"
+#: cron/checkdbs:120
+msgid "%(realname)s moderator requests notice"
msgstr ""
#: cron/checkdbs:141
+msgid "Pending subscriptions:"
+msgstr ""
+
+#: cron/checkdbs:152
msgid ""
"\n"
"Pending posts:"
msgstr ""
-#: cron/checkdbs:148
+#: cron/checkdbs:159
msgid ""
"From: %(sender)s on %(date)s\n"
"Subject: %(subject)s\n"
Index: messages/marked.files
===================================================================
RCS file: /cvsroot/mailman/mailman/messages/marked.files,v
retrieving revision 2.1.2.4
diff -u -r2.1.2.4 marked.files
--- messages/marked.files 16 Mar 2004 06:04:01 -0000 2.1.2.4
+++ messages/marked.files 25 Apr 2004 04:43:09 -0000
@@ -20,7 +20,7 @@
Mailman/Pending.py
Mailman/Post.py
Mailman/SafeDict.py
-Mailman/Defaults.py
+Mailman/SecurityManager.py
Mailman/Site.py
Mailman/TopicMgr.py
Mailman/UserDesc.py
@@ -84,6 +84,7 @@
Mailman/Handlers/AvoidDuplicates.py
Mailman/Handlers/CalcRecips.py
Mailman/Handlers/Cleanse.py
+Mailman/Handlers/CookHeaders.py
Mailman/Handlers/Decorate.py
Mailman/Handlers/Emergency.py
Mailman/Handlers/FileRecips.py
@@ -102,7 +103,6 @@
Mailman/Handlers/ToOutgoing.py
Mailman/Handlers/ToUsenet.py
Mailman/Handlers/__init__.py
-Mailman/Handlers/CookHeaders.py
Mailman/Logging/Logger.py
Mailman/Logging/MultiLogger.py
Mailman/Logging/StampedLogger.py
@@ -120,10 +120,10 @@
Mailman/Queue/MaildirRunner.py
Mailman/Queue/NewsRunner.py
Mailman/Queue/OutgoingRunner.py
+Mailman/Queue/RetryRunner.py
Mailman/Queue/Runner.py
Mailman/Queue/Switchboard.py
Mailman/Queue/VirginRunner.py
Mailman/Queue/__init__.py
Mailman/Queue/sbcache.py
-Mailman/Queue/RetryRunner.py
-Mailman/SecurityManager.py
+Mailman/Defaults.py
Index: messages/ja/LC_MESSAGES/mailman.po
===================================================================
RCS file: /cvsroot/mailman/mailman/messages/ja/LC_MESSAGES/mailman.po,v
retrieving revision 2.40.2.18
diff -u -r2.40.2.18 mailman.po
--- messages/ja/LC_MESSAGES/mailman.po 16 Mar 2004 06:04:17 -0000 2.40.2.18
+++ messages/ja/LC_MESSAGES/mailman.po 25 Apr 2004 04:43:20 -0000
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: Mailman 2.1.4\n"
-"POT-Creation-Date: Mon Mar 15 22:04:14 2004\n"
-"PO-Revision-Date: 2004-01-20 12:00+09:00\n"
+"POT-Creation-Date: Sun Apr 25 13:14:21 2004\n"
+"PO-Revision-Date: 2004-04-25 14:00+09:00\n"
"Last-Translator: Tokio Kikuchi \n"
"Language-Team: Japanese \n"
"MIME-Version: 1.0\n"
@@ -218,13 +218,13 @@
msgstr "最後にエラーメールを受信した日付は %(date)s です"
#: Mailman/Bouncer.py:270 Mailman/Deliverer.py:136
-#: Mailman/Handlers/Acknowledge.py:44 Mailman/Handlers/CookHeaders.py:233
+#: Mailman/Handlers/Acknowledge.py:44 Mailman/Handlers/CookHeaders.py:260
#: Mailman/Handlers/Hold.py:205 Mailman/Handlers/ToDigest.py:217
#: Mailman/ListAdmin.py:215
msgid "(no subject)"
msgstr "(無題)"
-#: Mailman/Bouncer.py:272
+#: Mailman/Bouncer.py:274
msgid "[No bounce details are available]"
msgstr "[詳しい配送エラー情報はありません.]"
@@ -531,15 +531,15 @@
msgid "Spam Filter Regexp:"
msgstr "Spamフィルタ正規表現"
-#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:289
-#: Mailman/Cgi/admindb.py:348 Mailman/Cgi/admindb.py:391
-#: Mailman/Cgi/admindb.py:625
+#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:294
+#: Mailman/Cgi/admindb.py:353 Mailman/Cgi/admindb.py:396
+#: Mailman/Cgi/admindb.py:630
msgid "Defer"
msgstr "延期"
-#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:291
-#: Mailman/Cgi/admindb.py:350 Mailman/Cgi/admindb.py:391
-#: Mailman/Cgi/admindb.py:625 Mailman/Gui/ContentFilter.py:37
+#: Mailman/Cgi/admin.py:763 Mailman/Cgi/admindb.py:296
+#: Mailman/Cgi/admindb.py:355 Mailman/Cgi/admindb.py:396
+#: Mailman/Cgi/admindb.py:630 Mailman/Gui/ContentFilter.py:37
#: Mailman/Gui/Privacy.py:216 Mailman/Gui/Privacy.py:290
msgid "Reject"
msgstr "拒否"
@@ -549,19 +549,19 @@
msgid "Hold"
msgstr "保留"
-#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:292
-#: Mailman/Cgi/admindb.py:351 Mailman/Cgi/admindb.py:391
-#: Mailman/Cgi/admindb.py:625 Mailman/Gui/ContentFilter.py:37
+#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:297
+#: Mailman/Cgi/admindb.py:356 Mailman/Cgi/admindb.py:396
+#: Mailman/Cgi/admindb.py:630 Mailman/Gui/ContentFilter.py:37
#: Mailman/Gui/Privacy.py:216 Mailman/Gui/Privacy.py:290
msgid "Discard"
msgstr "破棄"
-#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:391
+#: Mailman/Cgi/admin.py:764 Mailman/Cgi/admindb.py:396
#: Mailman/Gui/Privacy.py:290
msgid "Accept"
msgstr "承認"
-#: Mailman/Cgi/admin.py:767 Mailman/Cgi/admindb.py:631
+#: Mailman/Cgi/admin.py:767 Mailman/Cgi/admindb.py:636
msgid "Action:"
msgstr "処置:"
@@ -822,18 +822,19 @@
#: Mailman/Gui/Bounce.py:155 Mailman/Gui/ContentFilter.py:70
#: Mailman/Gui/ContentFilter.py:103 Mailman/Gui/Digest.py:46
#: Mailman/Gui/Digest.py:62 Mailman/Gui/Digest.py:84 Mailman/Gui/Digest.py:89
-#: Mailman/Gui/General.py:150 Mailman/Gui/General.py:156
-#: Mailman/Gui/General.py:234 Mailman/Gui/General.py:261
-#: Mailman/Gui/General.py:288 Mailman/Gui/General.py:299
-#: Mailman/Gui/General.py:302 Mailman/Gui/General.py:312
-#: Mailman/Gui/General.py:317 Mailman/Gui/General.py:327
-#: Mailman/Gui/General.py:347 Mailman/Gui/General.py:375
-#: Mailman/Gui/General.py:398 Mailman/Gui/NonDigest.py:44
-#: Mailman/Gui/NonDigest.py:52 Mailman/Gui/Privacy.py:110
-#: Mailman/Gui/Privacy.py:116 Mailman/Gui/Privacy.py:149
-#: Mailman/Gui/Privacy.py:197 Mailman/Gui/Privacy.py:305
-#: Mailman/Gui/Privacy.py:318 Mailman/Gui/Usenet.py:52
-#: Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93 Mailman/Gui/Usenet.py:105
+#: Mailman/Gui/General.py:153 Mailman/Gui/General.py:159
+#: Mailman/Gui/General.py:237 Mailman/Gui/General.py:264
+#: Mailman/Gui/General.py:291 Mailman/Gui/General.py:302
+#: Mailman/Gui/General.py:305 Mailman/Gui/General.py:315
+#: Mailman/Gui/General.py:320 Mailman/Gui/General.py:330
+#: Mailman/Gui/General.py:350 Mailman/Gui/General.py:378
+#: Mailman/Gui/General.py:401 Mailman/Gui/NonDigest.py:44
+#: Mailman/Gui/NonDigest.py:52 Mailman/Gui/NonDigest.py:139
+#: Mailman/Gui/Privacy.py:110 Mailman/Gui/Privacy.py:116
+#: Mailman/Gui/Privacy.py:149 Mailman/Gui/Privacy.py:197
+#: Mailman/Gui/Privacy.py:305 Mailman/Gui/Privacy.py:318
+#: Mailman/Gui/Usenet.py:52 Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93
+#: Mailman/Gui/Usenet.py:105
msgid "No"
msgstr "いいえ"
@@ -847,19 +848,19 @@
#: Mailman/Gui/Bounce.py:146 Mailman/Gui/Bounce.py:155
#: Mailman/Gui/ContentFilter.py:70 Mailman/Gui/ContentFilter.py:103
#: Mailman/Gui/Digest.py:46 Mailman/Gui/Digest.py:62 Mailman/Gui/Digest.py:84
-#: Mailman/Gui/Digest.py:89 Mailman/Gui/General.py:150
-#: Mailman/Gui/General.py:156 Mailman/Gui/General.py:234
-#: Mailman/Gui/General.py:261 Mailman/Gui/General.py:288
-#: Mailman/Gui/General.py:299 Mailman/Gui/General.py:302
-#: Mailman/Gui/General.py:312 Mailman/Gui/General.py:317
-#: Mailman/Gui/General.py:327 Mailman/Gui/General.py:347
-#: Mailman/Gui/General.py:375 Mailman/Gui/General.py:398
+#: Mailman/Gui/Digest.py:89 Mailman/Gui/General.py:153
+#: Mailman/Gui/General.py:159 Mailman/Gui/General.py:237
+#: Mailman/Gui/General.py:264 Mailman/Gui/General.py:291
+#: Mailman/Gui/General.py:302 Mailman/Gui/General.py:305
+#: Mailman/Gui/General.py:315 Mailman/Gui/General.py:320
+#: Mailman/Gui/General.py:330 Mailman/Gui/General.py:350
+#: Mailman/Gui/General.py:378 Mailman/Gui/General.py:401
#: Mailman/Gui/NonDigest.py:44 Mailman/Gui/NonDigest.py:52
-#: Mailman/Gui/Privacy.py:110 Mailman/Gui/Privacy.py:116
-#: Mailman/Gui/Privacy.py:149 Mailman/Gui/Privacy.py:197
-#: Mailman/Gui/Privacy.py:305 Mailman/Gui/Privacy.py:318
-#: Mailman/Gui/Usenet.py:52 Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93
-#: Mailman/Gui/Usenet.py:105
+#: Mailman/Gui/NonDigest.py:139 Mailman/Gui/Privacy.py:110
+#: Mailman/Gui/Privacy.py:116 Mailman/Gui/Privacy.py:149
+#: Mailman/Gui/Privacy.py:197 Mailman/Gui/Privacy.py:305
+#: Mailman/Gui/Privacy.py:318 Mailman/Gui/Usenet.py:52
+#: Mailman/Gui/Usenet.py:56 Mailman/Gui/Usenet.py:93 Mailman/Gui/Usenet.py:105
msgid "Yes"
msgstr "はい"
@@ -1042,112 +1043,116 @@
msgid "Administrative requests for mailing list:"
msgstr "メーリングリストに対する管理申請"
-#: Mailman/Cgi/admindb.py:191 Mailman/Cgi/admindb.py:234
+#: Mailman/Cgi/admindb.py:191 Mailman/Cgi/admindb.py:239
msgid "Submit All Data"
msgstr "全部送信"
-#: Mailman/Cgi/admindb.py:204
+#: Mailman/Cgi/admindb.py:195
+msgid "Discard all messages marked Defer"
+msgstr "延期にチェックされているメールを全部破棄します"
+
+#: Mailman/Cgi/admindb.py:209
msgid "all of %(esender)s's held messages."
msgstr "%(esender)s のすべての保留メール"
-#: Mailman/Cgi/admindb.py:209
+#: Mailman/Cgi/admindb.py:214
msgid "a single held message."
msgstr "1通の保留メール."
-#: Mailman/Cgi/admindb.py:214
+#: Mailman/Cgi/admindb.py:219
msgid "all held messages."
msgstr "すべての保留メール."
-#: Mailman/Cgi/admindb.py:249
+#: Mailman/Cgi/admindb.py:254
msgid "Mailman Administrative Database Error"
msgstr "Mailman 管理データベースエラー"
-#: Mailman/Cgi/admindb.py:254
+#: Mailman/Cgi/admindb.py:259
msgid "list of available mailing lists."
msgstr "ここにあるメーリングリストの一覧"
-#: Mailman/Cgi/admindb.py:255
+#: Mailman/Cgi/admindb.py:260
msgid "You must specify a list name. Here is the %(link)s"
msgstr "リスト名を指定してください. ここに %(link)s があります."
-#: Mailman/Cgi/admindb.py:268
+#: Mailman/Cgi/admindb.py:273
msgid "Subscription Requests"
msgstr "入会申請"
-#: Mailman/Cgi/admindb.py:270
+#: Mailman/Cgi/admindb.py:275
msgid "Address/name"
msgstr "アドレス/名前"
-#: Mailman/Cgi/admindb.py:271 Mailman/Cgi/admindb.py:322
+#: Mailman/Cgi/admindb.py:276 Mailman/Cgi/admindb.py:327
msgid "Your decision"
msgstr "決済"
-#: Mailman/Cgi/admindb.py:272 Mailman/Cgi/admindb.py:323
+#: Mailman/Cgi/admindb.py:277 Mailman/Cgi/admindb.py:328
msgid "Reason for refusal"
msgstr "拒否の理由"
-#: Mailman/Cgi/admindb.py:290 Mailman/Cgi/admindb.py:349
-#: Mailman/Cgi/admindb.py:625
+#: Mailman/Cgi/admindb.py:295 Mailman/Cgi/admindb.py:354
+#: Mailman/Cgi/admindb.py:630
msgid "Approve"
msgstr "承認"
-#: Mailman/Cgi/admindb.py:300
+#: Mailman/Cgi/admindb.py:305
msgid "Permanently ban from this list"
msgstr "このリストから永久排除"
-#: Mailman/Cgi/admindb.py:321
+#: Mailman/Cgi/admindb.py:326
msgid "User address/name"
msgstr "会員アドレス/会員名"
-#: Mailman/Cgi/admindb.py:361
+#: Mailman/Cgi/admindb.py:366
msgid "Unsubscription Requests"
msgstr "退会申請"
-#: Mailman/Cgi/admindb.py:384 Mailman/Cgi/admindb.py:608
+#: Mailman/Cgi/admindb.py:389 Mailman/Cgi/admindb.py:613
msgid "From:"
msgstr "発信者:"
-#: Mailman/Cgi/admindb.py:387
+#: Mailman/Cgi/admindb.py:392
msgid "Action to take on all these held messages:"
msgstr "これらすべての保留メールに対する処理:"
-#: Mailman/Cgi/admindb.py:399
+#: Mailman/Cgi/admindb.py:404
msgid "Preserve messages for the site administrator"
msgstr "サイト管理者のためにメールを保管する"
-#: Mailman/Cgi/admindb.py:405
+#: Mailman/Cgi/admindb.py:410
msgid "Forward messages (individually) to:"
msgstr "メールを(個別に)次のアドレスに転送する:"
-#: Mailman/Cgi/admindb.py:423
+#: Mailman/Cgi/admindb.py:428
msgid "Clear this member's moderate flag"
msgstr "この会員の制限フラグをクリアする"
-#: Mailman/Cgi/admindb.py:427
+#: Mailman/Cgi/admindb.py:432
msgid "The sender is now a member of this list"
msgstr "送信者はこのメーリングリストに入会しています."
-#: Mailman/Cgi/admindb.py:436
+#: Mailman/Cgi/admindb.py:441
msgid "Add %(esender)s to one of these sender filters:"
msgstr "%(esender)sをどれかの送信者フィルタに追加する"
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Accepts"
msgstr "承認"
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Discards"
msgstr "破棄"
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Holds"
msgstr "保留"
-#: Mailman/Cgi/admindb.py:441
+#: Mailman/Cgi/admindb.py:446
msgid "Rejects"
msgstr "拒否"
-#: Mailman/Cgi/admindb.py:450
+#: Mailman/Cgi/admindb.py:455
msgid ""
"Ban %(esender)s from ever subscribing to this\n"
" mailing list"
@@ -1155,95 +1160,95 @@
"%(esender)sをこのメーリングリストから\n"
"永久に入会を排除します"
-#: Mailman/Cgi/admindb.py:455
+#: Mailman/Cgi/admindb.py:460
msgid ""
"Click on the message number to view the individual\n"
" message, or you can "
msgstr "メール番号をクリックして個々のメールを見るか, "
-#: Mailman/Cgi/admindb.py:457
+#: Mailman/Cgi/admindb.py:462
msgid "view all messages from %(esender)s"
msgstr "%(esender)s からのすべてのメールを見る"
-#: Mailman/Cgi/admindb.py:479 Mailman/Cgi/admindb.py:611
+#: Mailman/Cgi/admindb.py:484 Mailman/Cgi/admindb.py:616
msgid "Subject:"
msgstr "件名:"
-#: Mailman/Cgi/admindb.py:482
+#: Mailman/Cgi/admindb.py:487
msgid " bytes"
msgstr " バイト"
-#: Mailman/Cgi/admindb.py:482
+#: Mailman/Cgi/admindb.py:487
msgid "Size:"
msgstr "サイズ:"
-#: Mailman/Cgi/admindb.py:486 Mailman/Handlers/Decorate.py:56
-#: Mailman/Handlers/Scrubber.py:268 Mailman/Handlers/Scrubber.py:269
+#: Mailman/Cgi/admindb.py:491 Mailman/Handlers/Scrubber.py:198
+#: Mailman/Handlers/Scrubber.py:294 Mailman/Handlers/Scrubber.py:295
msgid "not available"
msgstr "無し"
-#: Mailman/Cgi/admindb.py:487 Mailman/Cgi/admindb.py:614
+#: Mailman/Cgi/admindb.py:492 Mailman/Cgi/admindb.py:619
msgid "Reason:"
msgstr "理由:"
-#: Mailman/Cgi/admindb.py:491 Mailman/Cgi/admindb.py:618
+#: Mailman/Cgi/admindb.py:496 Mailman/Cgi/admindb.py:623
msgid "Received:"
msgstr "受信:"
-#: Mailman/Cgi/admindb.py:549
+#: Mailman/Cgi/admindb.py:554
msgid "Posting Held for Approval"
msgstr "投稿は承認のため保留"
-#: Mailman/Cgi/admindb.py:551
+#: Mailman/Cgi/admindb.py:556
msgid " (%(count)d of %(total)d)"
msgstr " (%(total)d の %(count)d)"
-#: Mailman/Cgi/admindb.py:562
+#: Mailman/Cgi/admindb.py:567
msgid "Message with id #%(id)d was lost."
msgstr "ID #%(id)d のメールは紛失しています."
-#: Mailman/Cgi/admindb.py:571
+#: Mailman/Cgi/admindb.py:576
msgid "Message with id #%(id)d is corrupted."
msgstr "ID #%(id)d のメールは壊れています."
-#: Mailman/Cgi/admindb.py:635
+#: Mailman/Cgi/admindb.py:640
msgid "Preserve message for site administrator"
msgstr "サイト管理者のためにメールを保管する"
-#: Mailman/Cgi/admindb.py:639
+#: Mailman/Cgi/admindb.py:644
msgid "Additionally, forward this message to: "
msgstr "さらに, このメールを転送:"
-#: Mailman/Cgi/admindb.py:643
+#: Mailman/Cgi/admindb.py:648
msgid "[No explanation given]"
msgstr "[理由は示されていません]"
-#: Mailman/Cgi/admindb.py:645
+#: Mailman/Cgi/admindb.py:650
msgid "If you reject this post, please explain (optional):"
msgstr "この投稿を拒否する場合, その理由 (オプショナル):"
-#: Mailman/Cgi/admindb.py:651
+#: Mailman/Cgi/admindb.py:656
msgid "Message Headers:"
msgstr "メールヘッダ:"
-#: Mailman/Cgi/admindb.py:656
+#: Mailman/Cgi/admindb.py:661
msgid "Message Excerpt:"
msgstr "メールの抜書き:"
-#: Mailman/Cgi/admindb.py:689 Mailman/Deliverer.py:134
+#: Mailman/Cgi/admindb.py:701 Mailman/Deliverer.py:134
msgid "No reason given"
msgstr "理由は示されていません"
-#: Mailman/Cgi/admindb.py:750 Mailman/ListAdmin.py:288
+#: Mailman/Cgi/admindb.py:762 Mailman/ListAdmin.py:288
#: Mailman/ListAdmin.py:406
msgid "[No reason given]"
msgstr "[理由は示されていません]"
-#: Mailman/Cgi/admindb.py:779
+#: Mailman/Cgi/admindb.py:791
msgid "Database Updated..."
msgstr "データベースの更新を完了しました"
-#: Mailman/Cgi/admindb.py:782
+#: Mailman/Cgi/admindb.py:794
msgid " is already a member"
msgstr " は既に会員です"
@@ -1416,7 +1421,7 @@
msgid "You have canceled your subscription request."
msgstr "入会申請を取り消しました."
-#: Mailman/Cgi/confirm.py:354
+#: Mailman/Cgi/confirm.py:354 Mailman/Cgi/confirm.py:425
msgid "Awaiting moderator approval"
msgstr "司会者の承認を待っています"
@@ -1435,8 +1440,8 @@
"入会にはメーリングリストの司会者の最終承認が必要ですので, \n"
"申請を司会者に転送しました. 後程, 決定に関する通知が送られます."
-#: Mailman/Cgi/confirm.py:364 Mailman/Cgi/confirm.py:424
-#: Mailman/Cgi/confirm.py:513 Mailman/Cgi/confirm.py:736
+#: Mailman/Cgi/confirm.py:364 Mailman/Cgi/confirm.py:435
+#: Mailman/Cgi/confirm.py:524 Mailman/Cgi/confirm.py:747
msgid ""
"Invalid confirmation string. It is\n"
" possible that you are attempting to confirm a request for an\n"
@@ -1483,11 +1488,27 @@
msgid "You have canceled your unsubscription request."
msgstr "退会申請を取り消しました."
-#: Mailman/Cgi/confirm.py:430
+#: Mailman/Cgi/confirm.py:428
+msgid ""
+" You have successfully confirmed your unsubscription request to "
+"the\n"
+" mailing list %(listname)s, however final approval is required "
+"from\n"
+" the list moderator before you will be unsubscribed. Your "
+"request\n"
+" has been forwarded to the list moderator, and you will be "
+"notified\n"
+" of the moderator's decision."
+msgstr ""
+"%(listname)s メーリングリストへの退会申請確認手続きが完了しました.\n"
+"退会にはメーリングリストの司会者の最終承認が必要ですので, \n"
+"申請を司会者に転送しました. 後程, 決定に関する通知が送られます."
+
+#: Mailman/Cgi/confirm.py:441
msgid "Unsubscription request confirmed"
msgstr "退会申請を確認しました."
-#: Mailman/Cgi/confirm.py:434
+#: Mailman/Cgi/confirm.py:445
msgid ""
" You have successfully unsubscribed from the %(listname)s "
"mailing\n"
@@ -1498,15 +1519,15 @@
"%(listname)s メーリングリストからの退会手続きを完了しました. \n"
"メーリングリスト案内ページへどうぞ."
-#: Mailman/Cgi/confirm.py:445
+#: Mailman/Cgi/confirm.py:456
msgid "Confirm unsubscription request"
msgstr "退会申請を確認"
-#: Mailman/Cgi/confirm.py:460 Mailman/Cgi/confirm.py:550
+#: Mailman/Cgi/confirm.py:471 Mailman/Cgi/confirm.py:561
msgid "Not available"
msgstr "無記入"
-#: Mailman/Cgi/confirm.py:463
+#: Mailman/Cgi/confirm.py:474
msgid ""
"Your confirmation is required in order to complete the\n"
" unsubscription request from the mailing list %(listname)s. "
@@ -1532,24 +1553,24 @@
"確認の手続きを完了するには, 下の退会ボタンを押します.\n"
"
キャンセル・破棄ボタンで退会申請を取り消すこともできます."
-#: Mailman/Cgi/confirm.py:479 Mailman/Cgi/options.py:696
+#: Mailman/Cgi/confirm.py:490 Mailman/Cgi/options.py:696
#: Mailman/Cgi/options.py:837 Mailman/Cgi/options.py:847
msgid "Unsubscribe"
msgstr "退会"
-#: Mailman/Cgi/confirm.py:480 Mailman/Cgi/confirm.py:579
+#: Mailman/Cgi/confirm.py:491 Mailman/Cgi/confirm.py:590
msgid "Cancel and discard"
msgstr "キャンセル・破棄"
-#: Mailman/Cgi/confirm.py:490
+#: Mailman/Cgi/confirm.py:501
msgid "You have canceled your change of address request."
msgstr "アドレス変更の申請を取り消しました."
-#: Mailman/Cgi/confirm.py:519
+#: Mailman/Cgi/confirm.py:530
msgid "Change of address request confirmed"
msgstr "アドレス変更申請を確認しました"
-#: Mailman/Cgi/confirm.py:523
+#: Mailman/Cgi/confirm.py:534
msgid ""
" You have successfully changed your address on the %(listname)s\n"
" mailing list from %(oldaddr)s to %(newaddr)s. "
@@ -1561,15 +1582,15 @@
"%(oldaddr)s から %(newaddr)s に変更しました.\n"
"会員ログインページへどうぞ."
-#: Mailman/Cgi/confirm.py:535
+#: Mailman/Cgi/confirm.py:546
msgid "Confirm change of address request"
msgstr "アドレス変更申請を確認しました"
-#: Mailman/Cgi/confirm.py:554
+#: Mailman/Cgi/confirm.py:565
msgid "globally"
msgstr "全部"
-#: Mailman/Cgi/confirm.py:557
+#: Mailman/Cgi/confirm.py:568
msgid ""
"Your confirmation is required in order to complete the\n"
" change of address request for the mailing list %(listname)s. "
@@ -1604,15 +1625,15 @@
"
キャンセル・破棄ボタンを押してアドレス変更申請を\n"
"取り消すこともできます."
-#: Mailman/Cgi/confirm.py:578
+#: Mailman/Cgi/confirm.py:589
msgid "Change address"
msgstr "アドレス変更"
-#: Mailman/Cgi/confirm.py:587 Mailman/Cgi/confirm.py:701
+#: Mailman/Cgi/confirm.py:598 Mailman/Cgi/confirm.py:712
msgid "Continue awaiting approval"
msgstr "承認を待つ"
-#: Mailman/Cgi/confirm.py:595
+#: Mailman/Cgi/confirm.py:606
msgid ""
"Okay, the list moderator will still have the\n"
" opportunity to approve or reject this message."
@@ -1620,11 +1641,11 @@
"了解. リスト司会者には, このメールを承認するか拒否するか\n"
"を決定するチャンスがまだあります."
-#: Mailman/Cgi/confirm.py:621
+#: Mailman/Cgi/confirm.py:632
msgid "Sender discarded message via web."
msgstr "送信者が Web でメールを破棄しました."
-#: Mailman/Cgi/confirm.py:623
+#: Mailman/Cgi/confirm.py:634
msgid ""
"The held message with the Subject:\n"
" header %(subject)s could not be found. The most "
@@ -1638,11 +1659,11 @@
"リスト司会者が既に承認または拒否しため, \n"
"取り消しが間に合わなかった可能性があります."
-#: Mailman/Cgi/confirm.py:631
+#: Mailman/Cgi/confirm.py:642
msgid "Posted message canceled"
msgstr "投稿が取り消されました."
-#: Mailman/Cgi/confirm.py:634
+#: Mailman/Cgi/confirm.py:645
msgid ""
" You have successfully canceled the posting of your message with\n"
" the Subject: header %(subject)s to the mailing list\n"
@@ -1651,17 +1672,17 @@
"件名: が %(subject)sである, %(listname)s メーリング\n"
"リストへの投稿メールは取り消しを完了しました."
-#: Mailman/Cgi/confirm.py:645
+#: Mailman/Cgi/confirm.py:656
msgid "Cancel held message posting"
msgstr "保留中の投稿を取り消す"
-#: Mailman/Cgi/confirm.py:670
+#: Mailman/Cgi/confirm.py:681
msgid ""
"The held message you were referred to has\n"
" already been handled by the list administrator."
msgstr "保留されていたメールは, すでにリスト管理者が処理しました."
-#: Mailman/Cgi/confirm.py:684
+#: Mailman/Cgi/confirm.py:695
msgid ""
"Your confirmation is required in order to cancel the\n"
" posting of your message to the mailing list %(listname)s:\n"
@@ -1686,11 +1707,11 @@
"
承認を待つボタンを押すと, 引き続き, \n"
"メールを承認するか拒否するかの判断を, 司会者にゆだねることになります."
-#: Mailman/Cgi/confirm.py:700
+#: Mailman/Cgi/confirm.py:711
msgid "Cancel posting"
msgstr "投稿取り消し"
-#: Mailman/Cgi/confirm.py:712
+#: Mailman/Cgi/confirm.py:723
msgid ""
"You have canceled the re-enabling of your membership. If\n"
" we continue to receive bounces from your address, it could be deleted "
@@ -1701,11 +1722,11 @@
"からのエラーメールが続く場合, このメーリングリストの会員権が\n"
"抹消されるかもしれません."
-#: Mailman/Cgi/confirm.py:742
+#: Mailman/Cgi/confirm.py:753
msgid "Membership re-enabled."
msgstr "会員権を復活しました."
-#: Mailman/Cgi/confirm.py:746
+#: Mailman/Cgi/confirm.py:757
msgid ""
" You have successfully re-enabled your membership in the\n"
" %(listname)s mailing list. You can now 会員オプションページへどうぞ."
-#: Mailman/Cgi/confirm.py:758
+#: Mailman/Cgi/confirm.py:769
msgid "Re-enable mailing list membership"
msgstr "メーリングリスト会員権復活"
-#: Mailman/Cgi/confirm.py:775
+#: Mailman/Cgi/confirm.py:786
msgid ""
"We're sorry, but you have already been unsubscribed\n"
" from this mailing list. To re-subscribe, please visit the\n"
@@ -1729,11 +1750,11 @@
"再度入会するには, リスト総合案内ページ\n"
"へどうぞ."
-#: Mailman/Cgi/confirm.py:789
+#: Mailman/Cgi/confirm.py:800
msgid "not available"
msgstr "ありません"
-#: Mailman/Cgi/confirm.py:793
+#: Mailman/Cgi/confirm.py:804
msgid ""
"Your membership in the %(realname)s mailing list is\n"
" currently disabled due to excessive bounces. Your confirmation is\n"
@@ -1768,11 +1789,11 @@
"再開してください.\n"
"後で会員権を復活させる場合は 取り消しボタンを押してください."
-#: Mailman/Cgi/confirm.py:813
+#: Mailman/Cgi/confirm.py:824
msgid "Re-enable membership"
msgstr "会員権復活"
-#: Mailman/Cgi/confirm.py:814
+#: Mailman/Cgi/confirm.py:825
msgid "Cancel"
msgstr "取り消し"
@@ -2230,8 +2251,8 @@
msgid "Passwords did not match!"
msgstr "パスワードが一致しません"
-#: Mailman/Cgi/options.py:414 Mailman/Commands/cmd_password.py:79
-#: Mailman/Commands/cmd_password.py:105
+#: Mailman/Cgi/options.py:414 Mailman/Commands/cmd_password.py:83
+#: Mailman/Commands/cmd_password.py:109
msgid "Password successfully changed."
msgstr "パスワードを変更しました."
@@ -2899,17 +2920,17 @@
" 登録するアドレスを指定してください. この場合, 返信は登録\n"
" されたアドレスに送られますのでご注意ください.\n"
-#: Mailman/Commands/cmd_password.py:51 Mailman/Commands/cmd_password.py:64
+#: Mailman/Commands/cmd_password.py:51 Mailman/Commands/cmd_password.py:66
msgid "Your password is: %(password)s"
msgstr "あなたのパスワードは: %(password)s"
-#: Mailman/Commands/cmd_password.py:55 Mailman/Commands/cmd_password.py:68
-#: Mailman/Commands/cmd_password.py:91 Mailman/Commands/cmd_password.py:117
+#: Mailman/Commands/cmd_password.py:57 Mailman/Commands/cmd_password.py:72
+#: Mailman/Commands/cmd_password.py:95 Mailman/Commands/cmd_password.py:121
#: Mailman/Commands/cmd_set.py:149 Mailman/Commands/cmd_set.py:219
msgid "You are not a member of the %(listname)s mailing list"
msgstr "あなたは%(listname)s メーリングリストの会員ではありません"
-#: Mailman/Commands/cmd_password.py:81 Mailman/Commands/cmd_password.py:107
+#: Mailman/Commands/cmd_password.py:85 Mailman/Commands/cmd_password.py:111
msgid ""
"You did not give the correct old password, so your password has not been\n"
"changed. Use the no argument version of the password command to retrieve "
@@ -2920,7 +2941,7 @@
"引数を付けずに password コマンドを実行し, 現在のパスワードを取り\n"
"寄せてから, もう一度試してください."
-#: Mailman/Commands/cmd_password.py:85 Mailman/Commands/cmd_password.py:111
+#: Mailman/Commands/cmd_password.py:89 Mailman/Commands/cmd_password.py:115
msgid ""
"\n"
"Usage:"
@@ -3397,120 +3418,120 @@
msgid "Digest members:"
msgstr "まとめ読み会員:"
-#: Mailman/Defaults.py:1249
+#: Mailman/Defaults.py:1261
msgid "Catalan"
msgstr "カタロニア語"
-#: Mailman/Defaults.py:1250
+#: Mailman/Defaults.py:1262
msgid "Czech"
msgstr "チェコ語"
-#: Mailman/Defaults.py:1251
+#: Mailman/Defaults.py:1263
msgid "Danish"
msgstr "デンマーク語"
-#: Mailman/Defaults.py:1252
+#: Mailman/Defaults.py:1264
msgid "German"
msgstr "ドイツ語"
# mm_cfg.py
-#: Mailman/Defaults.py:1253
+#: Mailman/Defaults.py:1265
msgid "English (USA)"
msgstr "英語 (米国)"
-#: Mailman/Defaults.py:1254
+#: Mailman/Defaults.py:1266
msgid "Spanish (Spain)"
msgstr "スペイン語 (スペイン)"
-#: Mailman/Defaults.py:1255
+#: Mailman/Defaults.py:1267
msgid "Estonian"
msgstr "エストニア語"
-#: Mailman/Defaults.py:1256
+#: Mailman/Defaults.py:1268
msgid "Euskara"
msgstr "バスク語"
-#: Mailman/Defaults.py:1257
+#: Mailman/Defaults.py:1269
msgid "Finnish"
msgstr "フィンランド語"
-#: Mailman/Defaults.py:1258
+#: Mailman/Defaults.py:1270
msgid "French"
msgstr "フランス語"
-#: Mailman/Defaults.py:1259
+#: Mailman/Defaults.py:1271
msgid "Croatian"
msgstr "クロアチア語"
-#: Mailman/Defaults.py:1260
+#: Mailman/Defaults.py:1272
msgid "Hungarian"
msgstr "ハンガリー語"
-#: Mailman/Defaults.py:1261
+#: Mailman/Defaults.py:1273
msgid "Italian"
msgstr "イタリア語"
-#: Mailman/Defaults.py:1262
+#: Mailman/Defaults.py:1274
msgid "Japanese"
msgstr "日本語"
-#: Mailman/Defaults.py:1263
+#: Mailman/Defaults.py:1275
msgid "Korean"
msgstr "韓国語"
-#: Mailman/Defaults.py:1264
+#: Mailman/Defaults.py:1276
msgid "Lithuanian"
msgstr "リトアニア語"
-#: Mailman/Defaults.py:1265
+#: Mailman/Defaults.py:1277
msgid "Dutch"
msgstr "オランダ語"
-#: Mailman/Defaults.py:1266
+#: Mailman/Defaults.py:1278
msgid "Norwegian"
msgstr "ノルウェー語"
-#: Mailman/Defaults.py:1267
+#: Mailman/Defaults.py:1279
msgid "Polish"
msgstr "ポーランド語"
-#: Mailman/Defaults.py:1268
+#: Mailman/Defaults.py:1280
msgid "Portuguese"
msgstr "ポルトガル語"
-#: Mailman/Defaults.py:1269
+#: Mailman/Defaults.py:1281
msgid "Portuguese (Brazil)"
msgstr "ポルトガル語(ブラジル)"
-#: Mailman/Defaults.py:1270
+#: Mailman/Defaults.py:1282
msgid "Romanian"
msgstr "ルーマニア語"
-#: Mailman/Defaults.py:1271
+#: Mailman/Defaults.py:1283
msgid "Russian"
msgstr "ロシア語"
-#: Mailman/Defaults.py:1272
+#: Mailman/Defaults.py:1284
msgid "Serbian"
msgstr "セルビア語"
-#: Mailman/Defaults.py:1273
+#: Mailman/Defaults.py:1285
msgid "Slovenian"
msgstr "スロベニア語"
-#: Mailman/Defaults.py:1274
+#: Mailman/Defaults.py:1286
msgid "Swedish"
msgstr "スウェーデン語"
-#: Mailman/Defaults.py:1275
+#: Mailman/Defaults.py:1287
msgid "Ukrainian"
msgstr "ウクライナ語"
-#: Mailman/Defaults.py:1276
+#: Mailman/Defaults.py:1288
msgid "Chinese (China)"
msgstr "中国語(中国)"
-#: Mailman/Defaults.py:1277
+#: Mailman/Defaults.py:1289
msgid "Chinese (Taiwan)"
msgstr "中国語(台湾)"
@@ -3567,9 +3588,8 @@
"念のためお知らせします."
#: Mailman/Deliverer.py:212
-#, fuzzy
msgid "%(listname)s mailing list probe message"
-msgstr "%(listfullname)s メーリングリスト備忘通知"
+msgstr "%(listfullname)s ML アドレス探知"
#: Mailman/Errors.py:114
msgid "For some unknown reason"
@@ -3859,6 +3879,15 @@
" score, above which they are automatically disabled, but not\n"
" removed from the mailing list."
msgstr ""
+"会員にはそれぞれ浮動小数のエラー得点が付けられます. Mailman がリスト\n"
+"会員からエラーメールを受け取ると, その会員のエラー点が加算されます\n"
+"強いエラー(致命的エラー)は1点, 弱いエラー(一時的エラー)は0.5点を\n"
+"加算します. エラー得点は1日に1回加算します. 従ってある会員が1日に\n"
+"10回エラーを返しても, 得点は1点しか増えません.\n"
+"\n"
+"この変数は会員のエラー得点の上限値を規定します. この値を越えると\n"
+"会員への配送は自動的に停止しますがメーリングリストから退会させる\n"
+"わけではありません."
#: Mailman/Gui/Bounce.py:102
msgid ""
@@ -3892,7 +3921,7 @@
"会員権停止の警告メールを何日間隔で送りますか?\n"
" 記入する値は整数."
-#: Mailman/Gui/Bounce.py:117 Mailman/Gui/General.py:259
+#: Mailman/Gui/Bounce.py:117 Mailman/Gui/General.py:262
msgid "Notifications"
msgstr "通知"
@@ -4067,7 +4096,7 @@
"\n"
"