? misc/JapaneseCodecs-1.4.9 ? misc/KoreanCodecs-2.0.5 ? misc/email-2.5.4 Index: messages/Makefile.in =================================================================== RCS file: /cvsroot/mailman/mailman/messages/Makefile.in,v retrieving revision 2.31.2.8 diff -u -r2.31.2.8 Makefile.in --- messages/Makefile.in 22 Sep 2003 13:47:11 -0000 2.31.2.8 +++ messages/Makefile.in 30 Sep 2003 00:40:47 -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: Mailman/Defaults.py.in =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Defaults.py.in,v retrieving revision 2.112.2.6 diff -u -r2.112.2.6 Defaults.py.in --- Mailman/Defaults.py.in 22 Sep 2003 04:26:14 -0000 2.112.2.6 +++ Mailman/Defaults.py.in 30 Sep 2003 00:40:47 -0000 @@ -787,9 +787,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 Index: Mailman/MailList.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/MailList.py,v retrieving revision 2.100.2.5 diff -u -r2.100.2.5 MailList.py --- Mailman/MailList.py 28 Sep 2003 16:03:34 -0000 2.100.2.5 +++ Mailman/MailList.py 30 Sep 2003 00:40:47 -0000 @@ -382,6 +382,8 @@ 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 # @@ -919,7 +921,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) @@ -1110,6 +1113,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/Utils.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Utils.py,v retrieving revision 2.45.2.4 diff -u -r2.45.2.4 Utils.py --- Mailman/Utils.py 22 Sep 2003 02:58:13 -0000 2.45.2.4 +++ Mailman/Utils.py 30 Sep 2003 00:40:47 -0000 @@ -35,6 +35,7 @@ import cgi import htmlentitydefs import email.Iterators +import email.Header from types import UnicodeType from string import whitespace, digits try: @@ -57,6 +58,7 @@ False = 0 EMPTYSTRING = '' +UEMPTYSTRING = u'' NL = '\n' DOT = '.' IDENTCHARS = ascii_letters + digits + '_' @@ -806,3 +808,14 @@ a.append(c) # Join characters together and coerce to byte string return str(EMPTYSTRING.join(a)) + +def oneline(s, cset): + # Decode header string in one line and convert into specified charset + try: + h = email.Header.make_header(email.Header.decode_header(s)) + ustr = h.__unicode__() + oneline = UEMPTYSTRING.join(ustr.splitlines()) + return oneline.encode(cset, 'replace') + except (LookupError, UnicodeError): + # possibly charset problem. return with undecoded string in one line. + return EMPTYSTRING.join(s.splitlines()) Index: Mailman/Version.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Version.py,v retrieving revision 2.51.2.6 diff -u -r2.51.2.6 Version.py --- Mailman/Version.py 22 Sep 2003 03:34:19 -0000 2.51.2.6 +++ Mailman/Version.py 30 Sep 2003 00:40:47 -0000 @@ -36,7 +36,7 @@ (REL_LEVEL << 4) | (REL_SERIAL << 0)) # config.pck schema version number -DATA_FILE_VERSION = 88 +DATA_FILE_VERSION = 89 # 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 diff -u -r2.38 versions.py --- Mailman/versions.py 19 Oct 2002 17:27:15 -0000 2.38 +++ Mailman/versions.py 30 Sep 2003 00:40:47 -0000 @@ -393,6 +393,8 @@ encode = 2 add_only_if_missing('encode_ascii_prefixes', encode) add_only_if_missing('news_moderation', 0) + # automatic discard + add_only_if_missing('max_days_to_hold', 0) Index: Mailman/Archiver/HyperArch.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Archiver/HyperArch.py,v retrieving revision 2.37.2.4 diff -u -r2.37.2.4 HyperArch.py --- Mailman/Archiver/HyperArch.py 22 Sep 2003 02:40:51 -0000 2.37.2.4 +++ Mailman/Archiver/HyperArch.py 30 Sep 2003 00:40:48 -0000 @@ -287,7 +287,7 @@ self.ctype = ctype.lower() self.cenc = cenc.lower() self.decoded = {} - charset = message.get_param('charset') + charset = message.get_param('charset', 'us-ascii') if isinstance(charset, types.TupleType): # An RFC 2231 charset charset = unicode(charset[2], charset[0]) @@ -1121,6 +1121,9 @@ # 1. use lines directly, rather than source and dest # 2. make it clearer # 3. make it faster + atmark = _(' at ') + if len(lines) > 0 and type(lines[0]) == types.UnicodeType: + atmark = unicode(atmark, Utils.GetCharSet(self.lang), 'replace') source = lines[:] dest = lines last_line_was_quoted = 0 @@ -1161,7 +1164,7 @@ text = jr.group(1) length = len(text) if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS: - text = re.sub('@', _(' at '), text) + text = re.sub('@', atmark, text) URL = self.maillist.GetScriptURL( 'listinfo', absolute=1) else: Index: Mailman/Cgi/admindb.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/admindb.py,v retrieving revision 2.45.2.2 diff -u -r2.45.2.2 admindb.py --- Mailman/Cgi/admindb.py 22 Sep 2003 02:39:34 -0000 2.45.2.2 +++ Mailman/Cgi/admindb.py 30 Sep 2003 00:40:48 -0000 @@ -189,6 +189,11 @@ + ' %s' % mlist.real_name)) if not details: form.AddItem(Center(SubmitButton('submit', _('Submit All Data')))) + form.AddItem(Center( + CheckBox('discardalldefersp', 0).Format() + + ' ' + + _('Discard all messages marked "Defer"') + )) # Add a link back to the overview, if we're not viewing the overview! adminurl = mlist.GetScriptURL('admin', absolute=1) d = {'listname' : mlist.real_name, @@ -471,9 +476,10 @@ mlist.HandleRequest(id, mm_cfg.DISCARD) continue t = Table(border=0) + lcset = Utils.GetCharSet(mlist.preferred_language) t.AddRow([Link(admindburl + '?msgid=%d' % id, '[%d]' % counter), Bold(_('Subject:')), - Utils.websafe(subject) + Utils.websafe(Utils.oneline(subject, lcset)) ]) t.AddRow([' ', Bold(_('Size:')), str(size) + _(' bytes')]) if reason: @@ -589,6 +595,13 @@ body = EMPTYSTRING.join(lines)[:mm_cfg.ADMINDB_PAGE_TEXT_LIMIT] else: body = EMPTYSTRING.join(lines) + # i18n: Get message charset + mcset = msg.get_param('charset', 'us-ascii').lower() + lcset = Utils.GetCharSet(mlist.preferred_language) + try: + body = unicode(body, mcset).encode(lcset) + except: + pass hdrtxt = NL.join(['%s: %s' % (k, v) for k, v in msg.items()]) hdrtxt = Utils.websafe(hdrtxt) # Okay, we've reconstituted the message just fine. Now for the fun part! @@ -596,7 +609,8 @@ t.AddRow([Bold(_('From:')), sender]) row, col = t.GetCurrentRowIndex(), t.GetCurrentCellIndex() t.AddCellInfo(row, col-1, align='right') - t.AddRow([Bold(_('Subject:')), Utils.websafe(subject)]) + t.AddRow([Bold(_('Subject:')), + Utils.websafe(Utils.oneline(subject, lcset))]) t.AddCellInfo(row+1, col-1, align='right') t.AddRow([Bold(_('Reason:')), _(reason)]) t.AddCellInfo(row+2, col-1, align='right') @@ -661,6 +675,11 @@ sender = unquote_plus(k[len(prefix):]) value = cgidata.getvalue(k) senderactions.setdefault(sender, {})[action] = value + # discard-all-defers + try: + discardalldefersp = cgidata.getvalue('discardalldefersp', 0) + except ValueError: + discardalldefersp = 0 for sender in senderactions.keys(): actions = senderactions[sender] # Handle what to do about all this sender's held messages @@ -668,6 +687,8 @@ action = int(actions.get('senderaction', mm_cfg.DEFER)) except ValueError: action = mm_cfg.DEFER + if action == mm_cfg.DEFER and discardalldefersp: + action = mm_cfg.DISCARD if action in (mm_cfg.DEFER, mm_cfg.APPROVE, mm_cfg.REJECT, mm_cfg.DISCARD): preserve = actions.get('senderpreserve', 0) Index: Mailman/Cgi/confirm.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Cgi/confirm.py,v retrieving revision 2.31.2.2 diff -u -r2.31.2.2 confirm.py --- Mailman/Cgi/confirm.py 31 Mar 2003 21:49:41 -0000 2.31.2.2 +++ Mailman/Cgi/confirm.py 30 Sep 2003 00:40:48 -0000 @@ -392,6 +392,7 @@ mlist.Unlock() sys.exit(0) + listname = mlist.real_name mlist.Lock() try: try: @@ -402,6 +403,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 diff -u -r2.22 General.py --- Mailman/Gui/General.py 11 Dec 2002 12:41:56 -0000 2.22 +++ Mailman/Gui/General.py 30 Sep 2003 00:40:48 -0000 @@ -143,7 +143,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 @@ -405,6 +408,12 @@ Select No to disable the inclusion of this header. (This 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/Handlers/CookHeaders.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/CookHeaders.py,v retrieving revision 2.33.2.3 diff -u -r2.33.2.3 CookHeaders.py --- Mailman/Handlers/CookHeaders.py 22 Sep 2003 02:37:51 -0000 2.33.2.3 +++ Mailman/Handlers/CookHeaders.py 30 Sep 2003 00:40:48 -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 @@ -29,6 +30,7 @@ from Mailman import Utils from Mailman.i18n import _ from Mailman.Logging.Syslog import syslog +from Mailman.Handlers.ToDigest import oneline CONTINUATION = ',\n\t' COMMASPACE = ', ' @@ -72,7 +74,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() @@ -218,7 +225,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 +238,68 @@ if len(lines) > 1 and lines[1] and lines[1][0] in ' \t': ws = lines[1][0] msgdata['origsubj'] = subject - if not subject: - 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'] + # TK: We assume the subject is mono-lingual in sequence version + # and search first non-None charset + cmatch = re.search(r'=\?([^\?]+)\?[bq]\?[^\?]+\?=', subject, re.I) + if cmatch: + cset = cmatch.group(1).lower() + else: + cset = 'us-ascii' + subject = oneline(subject, cset) + # 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)') + 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 Index: Mailman/Handlers/Decorate.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/Decorate.py,v retrieving revision 2.21.2.2 diff -u -r2.21.2.2 Decorate.py --- Mailman/Handlers/Decorate.py 7 Jan 2003 14:18:39 -0000 2.21.2.2 +++ Mailman/Handlers/Decorate.py 30 Sep 2003 00:40:48 -0000 @@ -47,7 +47,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 @@ -77,18 +82,31 @@ # BAW: If the charsets don't match, should we add the header and footer by # MIME multipart chroming the message? wrap = 1 - 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 = 0 + 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 + if lcset == 'us-ascii': + newcset = mcset + else: + newcset = lcset + payload = payload.encode(newcset) + del msg['content-transfer-encoding'] + del msg['content-type'] + msg.set_payload(payload, newcset) + wrap = 0 + except: + 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/Hold.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/Hold.py,v retrieving revision 2.33.2.1 diff -u -r2.33.2.1 Hold.py --- Mailman/Handlers/Hold.py 31 Mar 2003 21:49:42 -0000 2.33.2.1 +++ Mailman/Handlers/Hold.py 30 Sep 2003 00:40:48 -0000 @@ -197,6 +197,12 @@ exc = exc() listname = mlist.real_name sender = msgdata.get('sender', msg.get_sender()) + usersubject = msg.get('subject') + charset = Utils.GetCharSet(mlist.preferred_language) + if usersubject: + usersubject = Utils.oneline(usersubject, charset) + else: + usersubject = _('(no subject)') message_id = msg.get('message-id', 'n/a') owneraddr = mlist.GetOwnerEmail() adminaddr = mlist.GetBouncesEmail() @@ -212,7 +218,7 @@ 'hostname' : mlist.host_name, 'reason' : _(reason), 'sender' : sender, - 'subject' : msg.get('subject', _('(no subject)')), + 'subject' : usersubject, 'admindb_url': mlist.GetScriptURL('admindb', absolute=1), } # We may want to send a notification to the original sender too @@ -247,7 +253,6 @@ lang = mlist.preferred_language charset = Utils.GetCharSet(lang) # We need to regenerate or re-translate a few values in d - usersubject = msg.get('subject', _('(no subject)')) d['reason'] = _(reason) d['subject'] = usersubject # craft the admin notification message and deliver it Index: Mailman/Handlers/Scrubber.py =================================================================== RCS file: /cvsroot/mailman/mailman/Mailman/Handlers/Scrubber.py,v retrieving revision 2.18.2.4 diff -u -r2.18.2.4 Scrubber.py --- Mailman/Handlers/Scrubber.py 22 Sep 2003 02:37:51 -0000 2.18.2.4 +++ Mailman/Handlers/Scrubber.py 30 Sep 2003 00:40:48 -0000 @@ -32,6 +32,7 @@ from email.Utils import parsedate from email.Parser import HeaderParser from email.Generator import Generator +from email import message_from_string from Mailman import mm_cfg from Mailman import Utils @@ -270,6 +271,12 @@ Url : %(url)s """), lcset) outer = 0 + # TK: We (Japanese) need to stringify and re-generate the message + # instance because multiple charsets are used. + try: + msg = message_from_string(str(msg)) + except UnicodeError: + pass # We still have to sanitize multipart messages to flat text because # Pipermail can't handle messages with list payloads. This is a kludge; # def (n) clever hack ;). @@ -286,8 +293,11 @@ # 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(): # All parts should be scrubbed to text/plain by now. + # ... or embedded multipart message ... so, walk don't get + if part.get_content_maintype() == 'multipart': + continue partctype = part.get_content_type() if partctype <> 'text/plain': text.append(_('Skipped content of type %(partctype)s')) @@ -312,7 +322,7 @@ except (UnicodeError, LookupError): t = t.encode(lcset, 'replace') # Separation is useful - if not t.endswith('\n'): + if t and not t.endswith('\n'): t += '\n' text.append(t) # Now join the text and set the payload Index: cron/checkdbs =================================================================== RCS file: /cvsroot/mailman/mailman/cron/checkdbs,v retrieving revision 2.17.2.2 diff -u -r2.17.2.2 checkdbs --- cron/checkdbs 20 Apr 2003 04:02:13 -0000 2.17.2.2 +++ cron/checkdbs 30 Sep 2003 00:40:48 -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 pending = [] first = 1 @@ -130,6 +141,8 @@ first = 0 when, addr, fullname, passwd, digest, lang = mlist.GetRecord(id) if fullname: + if isinstance(fullname, UnicodeType): + fullname = fullname.encode(lcset, 'replace') fullname = ' (%s)' % fullname pending.append(' %s%s %s' % (addr, fullname, time.ctime(when))) first = 1 @@ -139,6 +152,7 @@ first = 0 info = mlist.GetRecord(id) when, sender, subject, reason, text, msgdata = mlist.GetRecord(id) + subject = Utils.oneline(subject, lcset) date = time.ctime(when) reason = _(reason) pending.append(_("""\ @@ -168,6 +182,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: misc/Makefile.in =================================================================== RCS file: /cvsroot/mailman/mailman/misc/Makefile.in,v retrieving revision 2.33.2.2 diff -u -r2.33.2.2 Makefile.in --- misc/Makefile.in 22 Sep 2003 02:24:29 -0000 2.33.2.2 +++ misc/Makefile.in 30 Sep 2003 00:40:48 -0000 @@ -76,7 +76,10 @@ install: install-other install-packages install-other: - $(INSTALL) -m $(FILEMODE) $(ICONS) $(DESTDIR)$(ICONDIR) + for i in $(ICONS); \ + do \ + $(INSTALL) -m $(FILEMODE) $$i $(DESTDIR)$(ICONDIR); \ + done for d in $(PATHSDIRS); \ do \ dir=$(DESTDIR)$(prefix)/$$d; \ Index: messages/ja/LC_MESSAGES/mailman.po =================================================================== RCS file: /cvsroot/mailman/mailman/messages/ja/LC_MESSAGES/mailman.po,v retrieving revision 2.40.2.11 diff -u -r2.40.2.11 mailman.po --- messages/ja/LC_MESSAGES/mailman.po 24 Sep 2003 08:07:41 -0000 2.40.2.11 +++ messages/ja/LC_MESSAGES/mailman.po 30 Sep 2003 00:40:49 -0000 @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: Mon Sep 22 10:07:56 2003\n" -"PO-Revision-Date: 2003-09-24 17:00+0900\n" +"POT-Creation-Date: Mon Sep 29 10:59:31 2003\n" +"PO-Revision-Date: 2003-09-29 12:00+0900\n" "Last-Translator: Tokio Kikuchi \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" @@ -23,7 +23,7 @@ msgstr " %(size)i バイト " #: Mailman/Archiver/HyperArch.py:279 Mailman/Archiver/HyperArch.py:438 -#: Mailman/Archiver/HyperArch.py:999 Mailman/Archiver/HyperArch.py:1164 +#: Mailman/Archiver/HyperArch.py:999 Mailman/Archiver/HyperArch.py:1124 msgid " at " msgstr " @ " @@ -151,11 +151,11 @@ msgid "Computing threaded index\n" msgstr "スレッド目次作成中\n" -#: Mailman/Archiver/HyperArch.py:1244 +#: Mailman/Archiver/HyperArch.py:1247 msgid "Updating HTML for article %(seq)s" msgstr "記事 %(seq)s 番のHTMLを更新中" -#: Mailman/Archiver/HyperArch.py:1251 +#: Mailman/Archiver/HyperArch.py:1254 msgid "article file %(filename)s is missing!" msgstr "記事ファイル %(filename)s が行方不明!" @@ -217,9 +217,9 @@ msgstr "最後のエラーメール受信日付は %(date)s です" #: Mailman/Bouncer.py:266 Mailman/Deliverer.py:135 -#: Mailman/Handlers/Acknowledge.py:44 Mailman/Handlers/CookHeaders.py:233 -#: Mailman/Handlers/Hold.py:215 Mailman/Handlers/Hold.py:250 -#: Mailman/Handlers/ToDigest.py:216 Mailman/ListAdmin.py:243 +#: Mailman/Handlers/Acknowledge.py:44 Mailman/Handlers/CookHeaders.py:271 +#: Mailman/Handlers/Hold.py:205 Mailman/Handlers/ToDigest.py:216 +#: Mailman/ListAdmin.py:243 msgid "(no subject)" msgstr "(無題)" @@ -764,8 +764,8 @@ #: Mailman/Cgi/admin.py:1075 Mailman/Cgi/admin.py:1084 #: Mailman/Cgi/admin.py:1117 Mailman/Cgi/admin.py:1125 -#: Mailman/Cgi/confirm.py:271 Mailman/Cgi/create.py:327 -#: Mailman/Cgi/create.py:355 Mailman/Cgi/create.py:393 +#: Mailman/Cgi/confirm.py:271 Mailman/Cgi/create.py:331 +#: Mailman/Cgi/create.py:361 Mailman/Cgi/create.py:399 #: Mailman/Cgi/rmlist.py:228 Mailman/Gui/Archive.py:33 #: Mailman/Gui/Autoresponse.py:54 Mailman/Gui/Autoresponse.py:62 #: Mailman/Gui/Autoresponse.py:71 Mailman/Gui/Bounce.py:77 @@ -773,13 +773,13 @@ #: Mailman/Gui/Bounce.py:143 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:148 Mailman/Gui/General.py:154 -#: Mailman/Gui/General.py:232 Mailman/Gui/General.py:259 -#: Mailman/Gui/General.py:286 Mailman/Gui/General.py:297 -#: Mailman/Gui/General.py:300 Mailman/Gui/General.py:310 -#: Mailman/Gui/General.py:315 Mailman/Gui/General.py:325 -#: Mailman/Gui/General.py:345 Mailman/Gui/General.py:373 -#: Mailman/Gui/General.py:396 Mailman/Gui/NonDigest.py:44 +#: Mailman/Gui/General.py:151 Mailman/Gui/General.py:157 +#: Mailman/Gui/General.py:235 Mailman/Gui/General.py:262 +#: Mailman/Gui/General.py:289 Mailman/Gui/General.py:300 +#: Mailman/Gui/General.py:303 Mailman/Gui/General.py:313 +#: Mailman/Gui/General.py:318 Mailman/Gui/General.py:328 +#: Mailman/Gui/General.py:348 Mailman/Gui/General.py:376 +#: Mailman/Gui/General.py:399 Mailman/Gui/NonDigest.py:44 #: Mailman/Gui/NonDigest.py:52 Mailman/Gui/Privacy.py:101 #: Mailman/Gui/Privacy.py:107 Mailman/Gui/Privacy.py:140 #: Mailman/Gui/Privacy.py:188 Mailman/Gui/Privacy.py:296 @@ -790,21 +790,21 @@ #: Mailman/Cgi/admin.py:1075 Mailman/Cgi/admin.py:1084 #: Mailman/Cgi/admin.py:1117 Mailman/Cgi/admin.py:1125 -#: Mailman/Cgi/confirm.py:271 Mailman/Cgi/create.py:327 -#: Mailman/Cgi/create.py:355 Mailman/Cgi/create.py:393 +#: Mailman/Cgi/confirm.py:271 Mailman/Cgi/create.py:331 +#: Mailman/Cgi/create.py:361 Mailman/Cgi/create.py:399 #: Mailman/Cgi/rmlist.py:228 Mailman/Gui/Archive.py:33 #: Mailman/Gui/Autoresponse.py:54 Mailman/Gui/Autoresponse.py:62 #: Mailman/Gui/Bounce.py:77 Mailman/Gui/Bounce.py:108 #: Mailman/Gui/Bounce.py:134 Mailman/Gui/Bounce.py:143 #: 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:148 -#: Mailman/Gui/General.py:154 Mailman/Gui/General.py:232 -#: Mailman/Gui/General.py:259 Mailman/Gui/General.py:286 -#: Mailman/Gui/General.py:297 Mailman/Gui/General.py:300 -#: Mailman/Gui/General.py:310 Mailman/Gui/General.py:315 -#: Mailman/Gui/General.py:325 Mailman/Gui/General.py:345 -#: Mailman/Gui/General.py:373 Mailman/Gui/General.py:396 +#: Mailman/Gui/Digest.py:89 Mailman/Gui/General.py:151 +#: Mailman/Gui/General.py:157 Mailman/Gui/General.py:235 +#: Mailman/Gui/General.py:262 Mailman/Gui/General.py:289 +#: Mailman/Gui/General.py:300 Mailman/Gui/General.py:303 +#: Mailman/Gui/General.py:313 Mailman/Gui/General.py:318 +#: Mailman/Gui/General.py:328 Mailman/Gui/General.py:348 +#: Mailman/Gui/General.py:376 Mailman/Gui/General.py:399 #: Mailman/Gui/NonDigest.py:44 Mailman/Gui/NonDigest.py:52 #: Mailman/Gui/Privacy.py:101 Mailman/Gui/Privacy.py:107 #: Mailman/Gui/Privacy.py:140 Mailman/Gui/Privacy.py:188 @@ -995,135 +995,139 @@ 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:320 +#: Mailman/Cgi/admindb.py:276 Mailman/Cgi/admindb.py:325 msgid "Your decision" msgstr "決済" -#: Mailman/Cgi/admindb.py:272 Mailman/Cgi/admindb.py:321 +#: Mailman/Cgi/admindb.py:277 Mailman/Cgi/admindb.py:326 msgid "Reason for refusal" msgstr "拒否の理由" -#: Mailman/Cgi/admindb.py:289 Mailman/Cgi/admindb.py:346 -#: Mailman/Cgi/admindb.py:389 Mailman/Cgi/admindb.py:612 +#: Mailman/Cgi/admindb.py:294 Mailman/Cgi/admindb.py:351 +#: Mailman/Cgi/admindb.py:394 Mailman/Cgi/admindb.py:626 msgid "Defer" msgstr "保留" -#: Mailman/Cgi/admindb.py:290 Mailman/Cgi/admindb.py:347 -#: Mailman/Cgi/admindb.py:612 +#: Mailman/Cgi/admindb.py:295 Mailman/Cgi/admindb.py:352 +#: Mailman/Cgi/admindb.py:626 msgid "Approve" msgstr "承認" -#: Mailman/Cgi/admindb.py:291 Mailman/Cgi/admindb.py:348 -#: Mailman/Cgi/admindb.py:389 Mailman/Cgi/admindb.py:612 +#: Mailman/Cgi/admindb.py:296 Mailman/Cgi/admindb.py:353 +#: Mailman/Cgi/admindb.py:394 Mailman/Cgi/admindb.py:626 #: Mailman/Gui/ContentFilter.py:37 Mailman/Gui/Privacy.py:207 #: Mailman/Gui/Privacy.py:281 msgid "Reject" msgstr "拒否" -#: Mailman/Cgi/admindb.py:292 Mailman/Cgi/admindb.py:349 -#: Mailman/Cgi/admindb.py:389 Mailman/Cgi/admindb.py:612 +#: Mailman/Cgi/admindb.py:297 Mailman/Cgi/admindb.py:354 +#: Mailman/Cgi/admindb.py:394 Mailman/Cgi/admindb.py:626 #: Mailman/Gui/ContentFilter.py:37 Mailman/Gui/Privacy.py:207 #: Mailman/Gui/Privacy.py:281 msgid "Discard" msgstr "破棄" -#: Mailman/Cgi/admindb.py:300 +#: Mailman/Cgi/admindb.py:305 msgid "Permanently ban from this list" msgstr "このリストから永久排除" -#: Mailman/Cgi/admindb.py:319 +#: Mailman/Cgi/admindb.py:324 msgid "User address/name" msgstr "会員アドレス/会員名" -#: Mailman/Cgi/admindb.py:359 +#: Mailman/Cgi/admindb.py:364 msgid "Unsubscription Requests" msgstr "退会申請" -#: Mailman/Cgi/admindb.py:382 Mailman/Cgi/admindb.py:596 +#: Mailman/Cgi/admindb.py:387 Mailman/Cgi/admindb.py:609 msgid "From:" msgstr "発信者:" -#: Mailman/Cgi/admindb.py:385 +#: Mailman/Cgi/admindb.py:390 msgid "Action to take on all these held messages:" msgstr "これら全ての保留メッセージに対する処理:" -#: Mailman/Cgi/admindb.py:389 Mailman/Gui/Privacy.py:281 +#: Mailman/Cgi/admindb.py:394 Mailman/Gui/Privacy.py:281 msgid "Accept" msgstr "承認" -#: Mailman/Cgi/admindb.py:397 +#: Mailman/Cgi/admindb.py:402 msgid "Preserve messages for the site administrator" msgstr "サイト管理者のためにメッセージを保存する" -#: Mailman/Cgi/admindb.py:403 +#: Mailman/Cgi/admindb.py:408 msgid "Forward messages (individually) to:" msgstr "メールを(個別に)次のアドレスに転送する:" -#: Mailman/Cgi/admindb.py:421 +#: Mailman/Cgi/admindb.py:426 msgid "Clear this member's moderate flag" msgstr "この会員の発言制限フラグをクリアーする" -#: Mailman/Cgi/admindb.py:425 +#: Mailman/Cgi/admindb.py:430 msgid "The sender is now a member of this list" msgstr "送信者はこのリストの会員となりました." -#: Mailman/Cgi/admindb.py:434 +#: Mailman/Cgi/admindb.py:439 msgid "Add %(esender)s to one of these sender filters:" msgstr "%(esender)sを送信者フィルターのどれかに追加する" -#: Mailman/Cgi/admindb.py:439 +#: Mailman/Cgi/admindb.py:444 msgid "Accepts" msgstr "承認" -#: Mailman/Cgi/admindb.py:439 +#: Mailman/Cgi/admindb.py:444 msgid "Discards" msgstr "破棄" -#: Mailman/Cgi/admindb.py:439 +#: Mailman/Cgi/admindb.py:444 msgid "Holds" msgstr "保留" -#: Mailman/Cgi/admindb.py:439 +#: Mailman/Cgi/admindb.py:444 msgid "Rejects" msgstr "拒否" -#: Mailman/Cgi/admindb.py:448 +#: Mailman/Cgi/admindb.py:453 msgid "" "Ban %(esender)s from ever subscribing to this\n" " mailing list" @@ -1131,99 +1135,99 @@ "%(esender)sをこのメーリングリストから\n" "永久に入会を排除します" -#: Mailman/Cgi/admindb.py:453 +#: Mailman/Cgi/admindb.py:458 msgid "" "Click on the message number to view the individual\n" " message, or you can " msgstr "メール番号をクリックして個々のメールを見るか, " -#: Mailman/Cgi/admindb.py:455 +#: Mailman/Cgi/admindb.py:460 msgid "view all messages from %(esender)s" msgstr "%(esender)s からの全てのメールを見る" -#: Mailman/Cgi/admindb.py:475 Mailman/Cgi/admindb.py:599 +#: Mailman/Cgi/admindb.py:481 Mailman/Cgi/admindb.py:612 msgid "Subject:" msgstr "件名:" -#: Mailman/Cgi/admindb.py:478 +#: Mailman/Cgi/admindb.py:484 msgid " bytes" msgstr " バイト" -#: Mailman/Cgi/admindb.py:478 +#: Mailman/Cgi/admindb.py:484 msgid "Size:" msgstr "サイズ:" -#: Mailman/Cgi/admindb.py:482 Mailman/Handlers/Decorate.py:50 -#: Mailman/Handlers/Scrubber.py:260 Mailman/Handlers/Scrubber.py:261 +#: Mailman/Cgi/admindb.py:488 Mailman/Handlers/Scrubber.py:261 +#: Mailman/Handlers/Scrubber.py:262 msgid "not available" msgstr "無し" -#: Mailman/Cgi/admindb.py:483 Mailman/Cgi/admindb.py:601 +#: Mailman/Cgi/admindb.py:489 Mailman/Cgi/admindb.py:615 msgid "Reason:" msgstr "理由:" -#: Mailman/Cgi/admindb.py:487 Mailman/Cgi/admindb.py:605 +#: Mailman/Cgi/admindb.py:493 Mailman/Cgi/admindb.py:619 msgid "Received:" msgstr "受信:" -#: Mailman/Cgi/admindb.py:545 +#: Mailman/Cgi/admindb.py:551 msgid "Posting Held for Approval" msgstr "投稿は承認のため保留" -#: Mailman/Cgi/admindb.py:547 +#: Mailman/Cgi/admindb.py:553 msgid " (%(count)d of %(total)d)" msgstr " (%(total)d の %(count)d)" -#: Mailman/Cgi/admindb.py:558 +#: Mailman/Cgi/admindb.py:564 msgid "Message with id #%(id)d was lost." msgstr "ID #%(id)d のメッセージは紛失しています." -#: Mailman/Cgi/admindb.py:567 +#: Mailman/Cgi/admindb.py:573 msgid "Message with id #%(id)d is corrupted." msgstr "ID #%(id)d のメッセージは壊れています." -#: Mailman/Cgi/admindb.py:618 +#: Mailman/Cgi/admindb.py:632 msgid "Action:" msgstr "処置:" -#: Mailman/Cgi/admindb.py:622 +#: Mailman/Cgi/admindb.py:636 msgid "Preserve message for site administrator" msgstr "サイト管理者のためにメッセージを保存する" -#: Mailman/Cgi/admindb.py:626 +#: Mailman/Cgi/admindb.py:640 msgid "Additionally, forward this message to: " msgstr "さらに, このメールを転送:" -#: Mailman/Cgi/admindb.py:630 +#: Mailman/Cgi/admindb.py:644 msgid "[No explanation given]" msgstr "[理由は示されていません]" -#: Mailman/Cgi/admindb.py:632 +#: Mailman/Cgi/admindb.py:646 msgid "If you reject this post,
please explain (optional):" msgstr "この投稿を拒否する場合,
その理由 (オプショナル):" -#: Mailman/Cgi/admindb.py:638 +#: Mailman/Cgi/admindb.py:652 msgid "Message Headers:" msgstr "メッセージヘッダ:" -#: Mailman/Cgi/admindb.py:643 +#: Mailman/Cgi/admindb.py:657 msgid "Message Excerpt:" msgstr "メッセージの抜書き:" -#: Mailman/Cgi/admindb.py:676 Mailman/Deliverer.py:133 +#: Mailman/Cgi/admindb.py:697 Mailman/Deliverer.py:133 msgid "No reason given" msgstr "理由は示されていません" -#: Mailman/Cgi/admindb.py:737 Mailman/ListAdmin.py:316 +#: Mailman/Cgi/admindb.py:758 Mailman/ListAdmin.py:316 #: Mailman/ListAdmin.py:437 msgid "[No reason given]" msgstr "[理由は示されていません]" -#: Mailman/Cgi/admindb.py:766 +#: Mailman/Cgi/admindb.py:787 msgid "Database Updated..." msgstr "データベースの更新を完了しました" -#: Mailman/Cgi/admindb.py:769 +#: Mailman/Cgi/admindb.py:790 msgid " is already a member" msgstr " は既に会員です" @@ -1397,7 +1401,7 @@ msgid "You have canceled your subscription request." msgstr "あなたは入会申請をキャンセルしました." -#: Mailman/Cgi/confirm.py:336 +#: Mailman/Cgi/confirm.py:336 Mailman/Cgi/confirm.py:407 msgid "Awaiting moderator approval" msgstr "司会者の承認を待っています" @@ -1417,8 +1421,8 @@ "必要です. あなたの申請は司会者へ転送されていますので, 決定について\n" "通知があるでしょう." -#: Mailman/Cgi/confirm.py:346 Mailman/Cgi/confirm.py:406 -#: Mailman/Cgi/confirm.py:494 Mailman/Cgi/confirm.py:717 +#: Mailman/Cgi/confirm.py:346 Mailman/Cgi/confirm.py:417 +#: Mailman/Cgi/confirm.py:505 Mailman/Cgi/confirm.py:728 msgid "" "Invalid confirmation string. It is\n" " possible that you are attempting to confirm a request for an\n" @@ -1467,11 +1471,28 @@ msgid "You have canceled your unsubscription request." msgstr "退会手続き申請をキャンセルしました." -#: Mailman/Cgi/confirm.py:412 +#: Mailman/Cgi/confirm.py:410 +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" +"必要です. あなたの申請は司会者へ転送されていますので, 決定について\n" +"通知があるでしょう." + +#: Mailman/Cgi/confirm.py:423 msgid "Unsubscription request confirmed" msgstr "退会申請を確認しました." -#: Mailman/Cgi/confirm.py:416 +#: Mailman/Cgi/confirm.py:427 msgid "" " You have successfully unsubscribed from the %(listname)s " "mailing\n" @@ -1483,15 +1504,15 @@ "しました. 引き続きリストの案内ページ\n" "へ." -#: Mailman/Cgi/confirm.py:427 +#: Mailman/Cgi/confirm.py:438 msgid "Confirm unsubscription request" msgstr "退会申請を確認" -#: Mailman/Cgi/confirm.py:442 Mailman/Cgi/confirm.py:531 +#: Mailman/Cgi/confirm.py:453 Mailman/Cgi/confirm.py:542 msgid "Not available" msgstr "ありません" -#: Mailman/Cgi/confirm.py:445 +#: Mailman/Cgi/confirm.py:456 msgid "" "Your confirmation is required in order to complete the\n" " unsubscription request from the mailing list %(listname)s. " @@ -1517,24 +1538,24 @@ "

または, キャンセル・破棄ボタンで退会申請を取り消すことも\n" "できます." -#: Mailman/Cgi/confirm.py:461 Mailman/Cgi/options.py:673 +#: Mailman/Cgi/confirm.py:472 Mailman/Cgi/options.py:673 #: Mailman/Cgi/options.py:814 Mailman/Cgi/options.py:824 msgid "Unsubscribe" msgstr "退会" -#: Mailman/Cgi/confirm.py:462 Mailman/Cgi/confirm.py:560 +#: Mailman/Cgi/confirm.py:473 Mailman/Cgi/confirm.py:571 msgid "Cancel and discard" msgstr "キャンセル・破棄" -#: Mailman/Cgi/confirm.py:472 +#: Mailman/Cgi/confirm.py:483 msgid "You have canceled your change of address request." msgstr "あなたはアドレス変更の申請を取り消しました." -#: Mailman/Cgi/confirm.py:500 +#: Mailman/Cgi/confirm.py:511 msgid "Change of address request confirmed" msgstr "アドレス変更申請を確認しました" -#: Mailman/Cgi/confirm.py:504 +#: Mailman/Cgi/confirm.py:515 msgid "" " You have successfully changed your address on the %(listname)s\n" " mailing list from %(oldaddr)s to %(newaddr)s. " @@ -1546,15 +1567,15 @@ "%(oldaddr)s から %(newaddr)s に変更完了しました.\n" "引き続き 会員ログインページへどうぞ." -#: Mailman/Cgi/confirm.py:516 +#: Mailman/Cgi/confirm.py:527 msgid "Confirm change of address request" msgstr "アドレス変更申請を確認しました" -#: Mailman/Cgi/confirm.py:535 +#: Mailman/Cgi/confirm.py:546 msgid "globally" msgstr "全部" -#: Mailman/Cgi/confirm.py:538 +#: Mailman/Cgi/confirm.py:549 msgid "" "Your confirmation is required in order to complete the\n" " change of address request for the mailing list %(listname)s. " @@ -1589,15 +1610,15 @@ "

あるいは, キャンセル・破棄ボタンを押してアドレス変更申請を\n" "取り消すこともできます." -#: Mailman/Cgi/confirm.py:559 +#: Mailman/Cgi/confirm.py:570 msgid "Change address" msgstr "アドレス変更" -#: Mailman/Cgi/confirm.py:569 Mailman/Cgi/confirm.py:682 +#: Mailman/Cgi/confirm.py:580 Mailman/Cgi/confirm.py:693 msgid "Continue awaiting approval" msgstr "承認待ちを続行" -#: Mailman/Cgi/confirm.py:576 +#: Mailman/Cgi/confirm.py:587 msgid "" "Okay, the list moderator will still have the\n" " opportunity to approve or reject this message." @@ -1605,11 +1626,11 @@ "了解. リスト司会者には, このメールを承認するか拒否するか\n" "を決定するチャンスがまだあります." -#: Mailman/Cgi/confirm.py:602 +#: Mailman/Cgi/confirm.py:613 msgid "Sender discarded message via web." msgstr "送信者が Web でメールを破棄しました." -#: Mailman/Cgi/confirm.py:604 +#: Mailman/Cgi/confirm.py:615 msgid "" "The held message with the Subject:\n" " header %(subject)s could not be found. The most " @@ -1623,11 +1644,11 @@ "でした. もしかしたら, リストの司会者が既に承認または拒否したのかも\n" "しれません. 取り消すのが間に合わなかったということです." -#: Mailman/Cgi/confirm.py:612 +#: Mailman/Cgi/confirm.py:623 msgid "Posted message canceled" msgstr "投稿メールは取り消されました." -#: Mailman/Cgi/confirm.py:615 +#: Mailman/Cgi/confirm.py:626 msgid "" " You have successfully canceled the posting of your message with\n" " the Subject: header %(subject)s to the mailing list\n" @@ -1636,17 +1657,17 @@ "件名: が %(subject)sである, %(listname)s メーリング\n" "リストへの投稿メッセージは取り消しを完了しました." -#: Mailman/Cgi/confirm.py:626 +#: Mailman/Cgi/confirm.py:637 msgid "Cancel held message posting" msgstr "保留中の投稿メッセージをキャンセル." -#: Mailman/Cgi/confirm.py:651 +#: Mailman/Cgi/confirm.py:662 msgid "" "The held message you were referred to has\n" " already been handled by the list administrator." msgstr "保留になっていたあなたのメールは, すでにリスト管理者が処理しました." -#: Mailman/Cgi/confirm.py:665 +#: Mailman/Cgi/confirm.py:676 msgid "" "Your confirmation is required in order to cancel the\n" " posting of your message to the mailing list %(listname)s:\n" @@ -1671,11 +1692,11 @@ "

あるいは, 承認待ちを続行ボタンを押すと, 引き続き, \n" "メールを承認するか拒否するかの判断を, 司会者にゆだねることになります." -#: Mailman/Cgi/confirm.py:681 +#: Mailman/Cgi/confirm.py:692 msgid "Cancel posting" msgstr "投稿取り消し" -#: Mailman/Cgi/confirm.py:693 +#: Mailman/Cgi/confirm.py:704 msgid "" "You have canceled the re-enabling of your membership. If\n" " we continue to receive bounces from your address, it could be deleted " @@ -1686,11 +1707,11 @@ " から, 引き続きエラーメールを受け取るようならば、あなたはこの\n" " メーリングリストから退会させられることになります." -#: Mailman/Cgi/confirm.py:723 +#: Mailman/Cgi/confirm.py:734 msgid "Membership re-enabled." msgstr "会員に復帰." -#: Mailman/Cgi/confirm.py:727 +#: Mailman/Cgi/confirm.py:738 msgid "" " You have successfully re-enabled your membership in the\n" " %(listname)s mailing list. You can now 会員オプションページ\n" "へどうぞ." -#: Mailman/Cgi/confirm.py:739 +#: Mailman/Cgi/confirm.py:750 msgid "Re-enable mailing list membership" msgstr "メーリングリスト会員復帰" -#: Mailman/Cgi/confirm.py:756 +#: Mailman/Cgi/confirm.py:767 msgid "" "We're sorry, but you have already been unsubscribed\n" " from this mailing list. To re-subscribe, please visit the\n" @@ -1715,11 +1736,11 @@ "再度入会するには, リストの案内ページ\n" "へどうぞ." -#: Mailman/Cgi/confirm.py:770 +#: Mailman/Cgi/confirm.py:781 msgid "not available" msgstr "ありません" -#: Mailman/Cgi/confirm.py:774 +#: Mailman/Cgi/confirm.py:785 msgid "" "Your membership in the %(realname)s mailing list is\n" " currently disabled due to excessive bounces. Your confirmation is\n" @@ -1754,11 +1775,11 @@ " 再開するか, キャンセルボタンを押して会員権復活を延期\n" " するかしてください." -#: Mailman/Cgi/confirm.py:794 +#: Mailman/Cgi/confirm.py:805 msgid "Re-enable membership" msgstr "会員復帰" -#: Mailman/Cgi/confirm.py:795 +#: Mailman/Cgi/confirm.py:806 msgid "Cancel" msgstr "キャンセル" @@ -1782,24 +1803,23 @@ msgid "administrative list overview" msgstr "管理リスト一覧" -#: Mailman/Cgi/create.py:101 -msgid "List name must not include \"@\": %(listname)s" -msgstr "リスト名には @ を入れることはできません: %(listname)s" - -#: Mailman/Cgi/create.py:107 Mailman/Cgi/create.py:185 bin/newlist:134 -#: bin/newlist:168 -msgid "List already exists: %(listname)s" -msgstr "リストが既にあります: %(listname)s" +#: Mailman/Cgi/create.py:102 +msgid "List name must not include \"@\": %(safelistname)s" +msgstr "リスト名には @ を入れることはできません: %(safelistname)s" + +#: Mailman/Cgi/create.py:109 +msgid "List already exists: %(safelistname)s" +msgstr "リストが既にあります: %(safelistname)s" -#: Mailman/Cgi/create.py:111 +#: Mailman/Cgi/create.py:113 msgid "You forgot to enter the list name" msgstr "リスト名を忘れています." -#: Mailman/Cgi/create.py:115 +#: Mailman/Cgi/create.py:117 msgid "You forgot to specify the list owner" msgstr "リスト管理者を指定してください." -#: Mailman/Cgi/create.py:122 +#: Mailman/Cgi/create.py:124 msgid "" "Leave the initial password (and confirmation) fields\n" " blank if you want Mailman to autogenerate the list\n" @@ -1808,27 +1828,31 @@ "Mailman が自動的にリストパスワードを作成するのがよければ\n" "初期パスワード(と確認)の欄を空白にしておいてください." -#: Mailman/Cgi/create.py:130 +#: Mailman/Cgi/create.py:132 msgid "Initial list passwords do not match" msgstr "初期パスワードが一致しません" -#: Mailman/Cgi/create.py:139 +#: Mailman/Cgi/create.py:141 msgid "The list password cannot be empty" msgstr "リストのパスワードを空白にすることはできません" -#: Mailman/Cgi/create.py:151 +#: Mailman/Cgi/create.py:153 msgid "You are not authorized to create new mailing lists" msgstr "あなたは新しいメーリングリストを作成する権限がありません" -#: Mailman/Cgi/create.py:181 bin/newlist:166 +#: Mailman/Cgi/create.py:183 bin/newlist:166 msgid "Bad owner email address: %(s)s" msgstr "不正な管理者メールアドレス: %(s)s" -#: Mailman/Cgi/create.py:189 bin/newlist:164 +#: Mailman/Cgi/create.py:187 bin/newlist:134 bin/newlist:168 +msgid "List already exists: %(listname)s" +msgstr "リストが既にあります: %(listname)s" + +#: Mailman/Cgi/create.py:191 bin/newlist:164 msgid "Illegal list name: %(s)s" msgstr "不正なリスト名: %(s)s" -#: Mailman/Cgi/create.py:194 +#: Mailman/Cgi/create.py:196 msgid "" "Some unknown error occurred while creating the list.\n" " Please contact the site administrator for assistance." @@ -1836,15 +1860,15 @@ "リスト作成中に理由不明のエラーが発生しました.\n" "サイト管理者に連絡して見てもらってください." -#: Mailman/Cgi/create.py:233 bin/newlist:210 +#: Mailman/Cgi/create.py:235 bin/newlist:210 msgid "Your new mailing list: %(listname)s" msgstr "あなたの新しいメーリングリスト: %(listname)s" -#: Mailman/Cgi/create.py:242 +#: Mailman/Cgi/create.py:244 msgid "Mailing list creation results" msgstr "メーリングリスト作成結果" -#: Mailman/Cgi/create.py:248 +#: Mailman/Cgi/create.py:250 msgid "" "You have successfully created the mailing list\n" " %(listname)s and notification has been sent to the list owner\n" @@ -1854,28 +1878,28 @@ "管理者の%(owner)sへ通知が発送されたところです.\n" "引き続き ..." -#: Mailman/Cgi/create.py:252 +#: Mailman/Cgi/create.py:254 msgid "Visit the list's info page" msgstr "リストの案内ページへ行く" -#: Mailman/Cgi/create.py:253 +#: Mailman/Cgi/create.py:255 msgid "Visit the list's admin page" msgstr "リスト管理ページへ行く" -#: Mailman/Cgi/create.py:254 +#: Mailman/Cgi/create.py:256 msgid "Create another list" msgstr "別のリストを作成する" -#: Mailman/Cgi/create.py:272 +#: Mailman/Cgi/create.py:274 msgid "Create a %(hostname)s Mailing List" msgstr "%(hostname)s メーリングリストを作成" -#: Mailman/Cgi/create.py:281 Mailman/Cgi/rmlist.py:199 +#: Mailman/Cgi/create.py:283 Mailman/Cgi/rmlist.py:199 #: Mailman/Gui/Bounce.py:175 Mailman/htmlformat.py:339 msgid "Error: " msgstr "エラー: " -#: Mailman/Cgi/create.py:283 +#: Mailman/Cgi/create.py:285 msgid "" "You can create a new mailing list by entering the\n" " relevant information into the form below. The name of the mailing list\n" @@ -1917,35 +1941,35 @@ "います. これを一番下の欄に入力してください. サイト管理者のパスワード\n" "でも認証が可能です." -#: Mailman/Cgi/create.py:309 +#: Mailman/Cgi/create.py:311 msgid "List Identity" msgstr "リスト識別" -#: Mailman/Cgi/create.py:312 +#: Mailman/Cgi/create.py:315 msgid "Name of list:" msgstr "リストの名前:" -#: Mailman/Cgi/create.py:317 +#: Mailman/Cgi/create.py:321 msgid "Initial list owner address:" msgstr "最初のリスト管理者アドレス:" -#: Mailman/Cgi/create.py:326 +#: Mailman/Cgi/create.py:330 msgid "Auto-generate initial list password?" msgstr "初期パスワードを自動生成しますか?" -#: Mailman/Cgi/create.py:333 +#: Mailman/Cgi/create.py:338 msgid "Initial list password:" msgstr " 初期リストパスワード:" -#: Mailman/Cgi/create.py:338 +#: Mailman/Cgi/create.py:344 msgid "Confirm initial password:" msgstr "初期パスワードの確認:" -#: Mailman/Cgi/create.py:348 +#: Mailman/Cgi/create.py:354 msgid "List Characteristics" msgstr "リストの性格" -#: Mailman/Cgi/create.py:352 +#: Mailman/Cgi/create.py:358 msgid "" "Should new members be quarantined before they\n" " are allowed to post unmoderated to this list? Answer Yes to " @@ -1956,7 +1980,7 @@ "隔離することにしますか? 新メンバーはデフォルトで司会者の承認が\n" "必要であれば, はいを選んでください." -#: Mailman/Cgi/create.py:381 +#: Mailman/Cgi/create.py:387 msgid "" "Initial list of supported languages.

Note that if you do not\n" " select at least one initial language, the list will use the server\n" @@ -1966,19 +1990,19 @@ "選んでおかないと, リストはサーバのデフォルト言語である %(deflang)s を\n" "使用します." -#: Mailman/Cgi/create.py:392 +#: Mailman/Cgi/create.py:398 msgid "Send \"list created\" email to list owner?" msgstr "「リスト作成完了」をメールで管理者に知らせますか?" -#: Mailman/Cgi/create.py:401 +#: Mailman/Cgi/create.py:407 msgid "List creator's (authentication) password:" msgstr "リスト作成者の認証パスワード:" -#: Mailman/Cgi/create.py:406 +#: Mailman/Cgi/create.py:412 msgid "Create List" msgstr "リストを作成する" -#: Mailman/Cgi/create.py:407 +#: Mailman/Cgi/create.py:413 msgid "Clear Form" msgstr "記入をクリアー" @@ -3371,104 +3395,104 @@ msgid "Digest members:" msgstr "まとめ読み会員:" -#: Mailman/Defaults.py:1260 +#: Mailman/Defaults.py:1264 msgid "Traditional Chinese" msgstr "中国語(伝統的)" -#: Mailman/Defaults.py:1261 +#: Mailman/Defaults.py:1265 msgid "Czech" msgstr "チェコ語" -#: Mailman/Defaults.py:1262 +#: Mailman/Defaults.py:1266 msgid "Danish" msgstr "デンマーク語" -#: Mailman/Defaults.py:1263 +#: Mailman/Defaults.py:1267 msgid "German" msgstr "ドイツ語" # mm_cfg.py -#: Mailman/Defaults.py:1264 +#: Mailman/Defaults.py:1268 msgid "English (USA)" msgstr "英語 (米国)" -#: Mailman/Defaults.py:1265 +#: Mailman/Defaults.py:1269 msgid "Spanish (Spain)" msgstr "スペイン語 (スペイン)" -#: Mailman/Defaults.py:1266 +#: Mailman/Defaults.py:1270 msgid "Estonian" msgstr "エストニア語" -#: Mailman/Defaults.py:1267 +#: Mailman/Defaults.py:1271 msgid "Euskara" msgstr "バスク語" -#: Mailman/Defaults.py:1268 +#: Mailman/Defaults.py:1272 msgid "Finnish" msgstr "フィンランド語" -#: Mailman/Defaults.py:1269 +#: Mailman/Defaults.py:1273 msgid "French" msgstr "フランス語" -#: Mailman/Defaults.py:1270 +#: Mailman/Defaults.py:1274 msgid "Simplified Chinese" msgstr "中国語(簡体字)" -#: Mailman/Defaults.py:1271 +#: Mailman/Defaults.py:1275 msgid "Hungarian" msgstr "ハンガリー語" -#: Mailman/Defaults.py:1272 +#: Mailman/Defaults.py:1276 msgid "Italian" msgstr "イタリア語" -#: Mailman/Defaults.py:1273 +#: Mailman/Defaults.py:1277 msgid "Japanese" msgstr "日本語" -#: Mailman/Defaults.py:1274 +#: Mailman/Defaults.py:1278 msgid "Korean" msgstr "韓国語" -#: Mailman/Defaults.py:1275 +#: Mailman/Defaults.py:1279 msgid "Lithuanian" msgstr "リトアニア語" -#: Mailman/Defaults.py:1276 +#: Mailman/Defaults.py:1280 msgid "Dutch" msgstr "オランダ語" -#: Mailman/Defaults.py:1277 +#: Mailman/Defaults.py:1281 msgid "Norwegian" msgstr "ノルウェー語" -#: Mailman/Defaults.py:1278 +#: Mailman/Defaults.py:1282 msgid "Polish" msgstr "ポーランド語" -#: Mailman/Defaults.py:1279 +#: Mailman/Defaults.py:1283 msgid "Portuguese" msgstr "ポルトガル語" -#: Mailman/Defaults.py:1280 +#: Mailman/Defaults.py:1284 msgid "Portuguese (Brazil)" msgstr "ポルトガル語(ブラジル)" -#: Mailman/Defaults.py:1281 +#: Mailman/Defaults.py:1285 msgid "Russian" msgstr "ロシア語" -#: Mailman/Defaults.py:1282 +#: Mailman/Defaults.py:1286 msgid "Serbian" msgstr "セルビア語" -#: Mailman/Defaults.py:1283 +#: Mailman/Defaults.py:1287 msgid "Swedish" msgstr "スウェーデン語" -#: Mailman/Defaults.py:1284 +#: Mailman/Defaults.py:1288 msgid "Ukrainian" msgstr "ウクライナ語" @@ -3829,7 +3853,7 @@ "会員権停止の警告メールを何日間隔で送りますか?\n" " 整数で記入のこと." -#: Mailman/Gui/Bounce.py:105 Mailman/Gui/General.py:257 +#: Mailman/Gui/Bounce.py:105 Mailman/Gui/General.py:260 msgid "Notifications" msgstr "お知らせ" @@ -4507,15 +4531,23 @@ "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 "" "このテキストがリストに投稿されたメールの件名に 付けら\n" "れます. これはメールリーダソフトなどで他のメー\n" "ルと区別するのに 有効です. 簡潔をこころがけましょう. \n" "メーリングリストの名称が長かったら, メーリングリ\n" -"ストであることがわかる範囲で, 短く簡潔にするとよいでしょう. " +"ストであることがわかる範囲で, 短く簡潔にするとよいでしょう. \n" +"さらに, プレフィクスが [],{},() で囲まれているとき, \n" +"%%d 指示子で通し番号を入れることができます.\n" +"例: [listname %%d] -> [listname 123], (listname %%05d) -> (listname 00123)" -#: Mailman/Gui/General.py:149 +#: Mailman/Gui/General.py:152 msgid "" "Hide the sender of a message, replacing it with the list\n" " address (Removes From, Sender and Reply-To fields)" @@ -4523,11 +4555,11 @@ "メッセージの送信者を隠して, リストのアドレスに置きかえる\n" "(From, Sender と Reply-To を削除します)" -#: Mailman/Gui/General.py:152 +#: Mailman/Gui/General.py:155 msgid "Reply-To: header munging" msgstr "Reply-To:ヘッダの書き換え" -#: Mailman/Gui/General.py:155 +#: Mailman/Gui/General.py:158 msgid "" "Should any existing Reply-To: header found in the\n" " original message be stripped? If so, this will be done\n" @@ -4539,19 +4571,19 @@ "が Mailman によって付けられたか, はじめから付いていたかに\n" "かかわらず取り除かれます." -#: Mailman/Gui/General.py:161 +#: Mailman/Gui/General.py:164 msgid "Explicit address" msgstr "別のアドレス" -#: Mailman/Gui/General.py:161 +#: Mailman/Gui/General.py:164 msgid "Poster" msgstr "投稿者" -#: Mailman/Gui/General.py:161 +#: Mailman/Gui/General.py:164 msgid "This list" msgstr "このリスト" -#: Mailman/Gui/General.py:162 +#: Mailman/Gui/General.py:165 msgid "" "Where are replies to list messages directed?\n" " Poster is strongly recommended for most " @@ -4562,7 +4594,7 @@ " 多くのメーリングリストについて 投稿者\n" " を 強く 推奨します. " -#: Mailman/Gui/General.py:167 +#: Mailman/Gui/General.py:170 msgid "" "This option controls what Mailman does to the\n" " Reply-To: header in messages flowing through this\n" @@ -4638,11 +4670,11 @@ "このタイプのメーリングリストをサポートするためには, 別のアドレス\n" "を選んで, 下の Reply-To: アドレスを設定してください. " -#: Mailman/Gui/General.py:199 +#: Mailman/Gui/General.py:202 msgid "Explicit Reply-To: header." msgstr "別のReply-To:アドレス" -#: Mailman/Gui/General.py:201 +#: Mailman/Gui/General.py:204 msgid "" "This is the address set in the Reply-To: header\n" " when the もしオリジナルのメールにReply-To:ヘッダが付いていると, それは変更" "されません." -#: Mailman/Gui/General.py:230 +#: Mailman/Gui/General.py:233 msgid "Umbrella list settings" msgstr "傘リストの設定" -#: Mailman/Gui/General.py:233 +#: Mailman/Gui/General.py:236 msgid "" "Send password reminders to, eg, \"-owner\" address instead of\n" " directly to user." @@ -4724,7 +4756,7 @@ "パスワード通知などを, 例えば '-owner' のアド\n" " レスに送り, 直接会員には送りません." -#: Mailman/Gui/General.py:236 +#: Mailman/Gui/General.py:239 msgid "" "Set this to yes when this list is intended to cascade only\n" " to other mailing lists. When set, meta notices like\n" @@ -4740,7 +4772,7 @@ " (会員が child@some.where.com で サフィックスが -owner とすると\n" " child-owner@some.where.com へ送られます)" -#: Mailman/Gui/General.py:244 +#: Mailman/Gui/General.py:247 msgid "" "Suffix for use when this list is an umbrella for other\n" " lists, according to setting of previous \"umbrella_list\"\n" @@ -4749,7 +4781,7 @@ "リストが他のリストの傘リストである場合に, そのサフィックス.\n" " 上の項目を Yes にすると有効となる." -#: Mailman/Gui/General.py:248 +#: Mailman/Gui/General.py:251 msgid "" "When \"umbrella_list\" is set to indicate that this list has\n" " other mailing lists as members, then administrative notices " @@ -4772,11 +4804,11 @@ "われます. この設定は, 上の 'umbrella_list' が 「いいえ」 \n" "の場合には無効です." -#: Mailman/Gui/General.py:260 +#: Mailman/Gui/General.py:263 msgid "Send monthly password reminders?" msgstr "パスワードの控えを毎月送りますか?" -#: Mailman/Gui/General.py:262 +#: Mailman/Gui/General.py:265 msgid "" "Turn this on if you want password reminders to be sent once\n" " per month to your members. Note that members may disable " @@ -4786,13 +4818,13 @@ "会員に対しパスワードの控えを毎月1回送る場合には ON にします.\n" "個々の会員はそれぞれパスワード控えの送信を止めておくことができます." -#: Mailman/Gui/General.py:267 +#: Mailman/Gui/General.py:270 msgid "" "List-specific text prepended to new-subscriber welcome\n" " message" msgstr "新しく入会した会員へ送られるメッセージの前置き文" -#: Mailman/Gui/General.py:270 +#: Mailman/Gui/General.py:273 msgid "" "This value, if any, will be added to the front of the\n" " new-subscriber welcome message. The rest of the welcome " @@ -4827,11 +4859,11 @@ "

  • 空白行は段落の区切りになります.\n" "" -#: Mailman/Gui/General.py:287 +#: Mailman/Gui/General.py:290 msgid "Send welcome message to newly subscribed members?" msgstr "新入会員に歓迎メールを出しますか?" -#: Mailman/Gui/General.py:288 +#: Mailman/Gui/General.py:291 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 " @@ -4844,7 +4876,7 @@ "知らせたくなかったら OFF にしてください. 他のメーリングリス\n" "ト管理プログラムから Mailman に移行する時などに有効でしょう. " -#: Mailman/Gui/General.py:294 +#: Mailman/Gui/General.py:297 msgid "" "Text sent to people leaving the list. If empty, no special\n" " text will be added to the unsubscribe message." @@ -4852,11 +4884,11 @@ "リストを退会する人にあてる文. もし空白であれば\n" " 退会者へあてたメールには何も付け加えられません. " -#: Mailman/Gui/General.py:298 +#: Mailman/Gui/General.py:301 msgid "Send goodbye message to members when they are unsubscribed?" msgstr "退会する会員にお別れのメールを出しますか?" -#: Mailman/Gui/General.py:301 +#: Mailman/Gui/General.py:304 msgid "" "Should the list moderators get immediate notice of new\n" " requests, as well as daily notices about collected ones?" @@ -4864,7 +4896,7 @@ "新しい申請が来たら, 1日1回まとめて知らせるだけでなく, すぐに管理者に知らせま" "すか?" -#: Mailman/Gui/General.py:304 +#: Mailman/Gui/General.py:307 msgid "" "List moderators (and list administrators) are sent daily\n" " reminders of requests pending approval, like subscriptions to " @@ -4879,17 +4911,17 @@ " 保留されている投稿などです. このオプションを設定すると\n" " 新しい申請が来るたびに直ちに通知されます." -#: Mailman/Gui/General.py:311 +#: Mailman/Gui/General.py:314 msgid "" "Should administrator get notices of subscribes and\n" " unsubscribes?" msgstr "管理者は入会/退会の結果を受け取りますか? " -#: Mailman/Gui/General.py:316 +#: Mailman/Gui/General.py:319 msgid "Send mail to poster when their posting is held for approval?" msgstr "投稿が承認のため保留されたら投稿者にメールしますか?" -#: Mailman/Gui/General.py:318 +#: Mailman/Gui/General.py:321 msgid "" "Approval notices are sent when mail triggers certain of the\n" " limits except routine list moderation and spam " @@ -4902,15 +4934,15 @@ " よってメールが保留になったことを知らせます. このオプションでは\n" " 通知を送らないように上書き設定することができます. " -#: Mailman/Gui/General.py:323 +#: Mailman/Gui/General.py:326 msgid "Additional settings" msgstr "追加の設定" -#: Mailman/Gui/General.py:326 +#: Mailman/Gui/General.py:329 msgid "Emergency moderation of all list traffic." msgstr "緊急のため全ての投稿を保留します." -#: Mailman/Gui/General.py:327 +#: Mailman/Gui/General.py:330 msgid "" "When this option is enabled, all list traffic is emergency\n" " moderated, i.e. held for moderation. Turn this option on when\n" @@ -4923,7 +4955,7 @@ "オンにすることで, 例えばフレーム戦争を静めるためにクーリングオフ\n" "期間を設けることができます." -#: Mailman/Gui/General.py:339 +#: Mailman/Gui/General.py:342 msgid "" "Default options for new members joining this list." @@ -4931,7 +4963,7 @@ "このリストの新入会員に適用されるデフォルトのオプション." -#: Mailman/Gui/General.py:342 +#: Mailman/Gui/General.py:345 msgid "" "When a new member is subscribed to this list, their initial\n" " set of options is taken from the this variable's setting." @@ -4939,7 +4971,7 @@ "新しい会員がリストに入会すると, この変数設定が最初のオプション\n" "として設定されます." -#: Mailman/Gui/General.py:346 +#: Mailman/Gui/General.py:349 msgid "" "(Administrivia filter) Check postings and intercept ones\n" " that seem to be administrative requests?" @@ -4947,7 +4979,7 @@ "(管理コマンドフィルター) 投稿をチェックして 管理\n" "コマンドと思われたら配送を保留しますか?" -#: Mailman/Gui/General.py:349 +#: Mailman/Gui/General.py:352 msgid "" "Administrivia tests will check postings to see whether it's\n" " really meant as an administrative request (like subscribe,\n" @@ -4962,7 +4994,7 @@ " 管理者に新しい申請が来ていることを\n" " 知らせます. " -#: Mailman/Gui/General.py:356 +#: Mailman/Gui/General.py:359 msgid "" "Maximum length in kilobytes (KB) of a message body. Use 0\n" " for no limit." @@ -4970,11 +5002,11 @@ "投稿メッセージ本文の最大サイズ(KB). 制限無しは 0\n" " にしてください. " -#: Mailman/Gui/General.py:360 +#: Mailman/Gui/General.py:363 msgid "Host name this list prefers for email." msgstr "メール送信の時使うホスト名(ドメイン名)" -#: Mailman/Gui/General.py:362 +#: Mailman/Gui/General.py:365 msgid "" "The \"host_name\" is the preferred name for email to\n" " mailman-related addresses on this host, and generally should " @@ -4990,7 +5022,7 @@ " です. ホストが複数のアドレスを持っているような場合\n" " ここで設定すると便利です." -#: Mailman/Gui/General.py:374 +#: Mailman/Gui/General.py:377 msgid "" "Should messages from this mailing list include the\n" " RFC 2369RFC 2369 ヘッダ\n" "(List-*) を付けますか? はいにすることを推奨します." -#: Mailman/Gui/General.py:379 +#: Mailman/Gui/General.py:382 msgid "" "RFC 2369 defines a set of List-* headers that are\n" " normally added to every message sent to the list " @@ -5038,11 +5070,11 @@ "推奨できません. (今後のリリースでは, このヘッダに関する設定ができないように\n" "するかもしれません.)" -#: Mailman/Gui/General.py:397 +#: Mailman/Gui/General.py:400 msgid "Should postings include the List-Post: header?" msgstr "投稿記事に List-Post: ヘッダを必要としますか?" -#: Mailman/Gui/General.py:398 +#: Mailman/Gui/General.py:401 msgid "" "The List-Post: header is one of the headers\n" " recommended by\n" @@ -5067,7 +5099,15 @@ "は誤解をあたえるかもしれません. いいえを選ぶことで, このヘッダ\n" "をつけないようにします. (他の List-*:ヘッダには影響しません.)" -#: Mailman/Gui/General.py:416 +#: Mailman/Gui/General.py:415 +msgid "" +"Discard held messages older than this number of days. \n" +" Use 0 for no automatic discarding." +msgstr "" +"この日数より古い保留メールは破棄します.\n" +"自動破棄をしない場合は 0 にしてください." + +#: Mailman/Gui/General.py:425 msgid "" "real_name attribute not\n" " changed! It must differ from the list's name by case\n" @@ -5076,7 +5116,7 @@ "real_name属性は変更されません!\n" "リスト名の大文字小文字の変更だけが許されます." -#: Mailman/Gui/General.py:437 +#: Mailman/Gui/General.py:446 msgid "" "You cannot add a Reply-To: to an explicit\n" " address if that address is blank. Resetting these values." @@ -6788,15 +6828,15 @@ msgid "Posting to a moderated newsgroup" msgstr "司会付きニュースグループへの投稿" -#: Mailman/Handlers/Hold.py:234 +#: Mailman/Handlers/Hold.py:240 msgid "Your message to %(listname)s awaits moderator approval" msgstr "%(listname)s へ投稿されたメールは司会者の承認を待っています" -#: Mailman/Handlers/Hold.py:254 +#: Mailman/Handlers/Hold.py:259 msgid "%(listname)s post from %(sender)s requires approval" msgstr "%(listname)s への %(sender)s の投稿は承認が必要です" -#: Mailman/Handlers/Hold.py:261 +#: Mailman/Handlers/Hold.py:266 msgid "" "If you reply to this message, keeping the Subject: header intact, Mailman " "will\n" @@ -6876,11 +6916,11 @@ msgid "The Mailman Replybot" msgstr "Mailman 自動応答" -#: Mailman/Handlers/Scrubber.py:180 +#: Mailman/Handlers/Scrubber.py:181 msgid "HTML attachment scrubbed and removed" msgstr "HTMLの添付ファイルは取り除かれています" -#: Mailman/Handlers/Scrubber.py:197 Mailman/Handlers/Scrubber.py:223 +#: Mailman/Handlers/Scrubber.py:198 Mailman/Handlers/Scrubber.py:224 msgid "" "An HTML attachment was scrubbed...\n" "URL: %(url)s\n" @@ -6888,19 +6928,19 @@ "HTMLの添付ファイルを取り除きました.\n" "URL: %(url)s\n" -#: Mailman/Handlers/Scrubber.py:235 +#: Mailman/Handlers/Scrubber.py:236 msgid "no subject" msgstr "無題" -#: Mailman/Handlers/Scrubber.py:236 +#: Mailman/Handlers/Scrubber.py:237 msgid "no date" msgstr "日付無し" -#: Mailman/Handlers/Scrubber.py:237 +#: Mailman/Handlers/Scrubber.py:238 msgid "unknown sender" msgstr "送信者不明" -#: Mailman/Handlers/Scrubber.py:240 +#: Mailman/Handlers/Scrubber.py:241 msgid "" "An embedded message was scrubbed...\n" "From: %(who)s\n" @@ -6916,7 +6956,7 @@ "サイズ: %(size)s バイト\n" "URL: %(url)s\n" -#: Mailman/Handlers/Scrubber.py:264 +#: Mailman/Handlers/Scrubber.py:265 msgid "" "A non-text attachment was scrubbed...\n" "Name: %(filename)s\n" @@ -6932,11 +6972,11 @@ "説明: %(desc)s\n" "URL: %(url)s\n" -#: Mailman/Handlers/Scrubber.py:293 +#: Mailman/Handlers/Scrubber.py:303 msgid "Skipped content of type %(partctype)s" msgstr "MIME タイプ %(partctype)s 飛ばします" -#: Mailman/Handlers/Scrubber.py:319 +#: Mailman/Handlers/Scrubber.py:329 msgid "-------------- next part --------------\n" msgstr "" @@ -7101,35 +7141,35 @@ msgid "%(dbfile)s owned by %(owner)s (must be owned by %(user)s" msgstr "%(dbfile)s の所有者は %(owner)s です. (%(user)s でなければいけません)" -#: Mailman/MailList.py:709 +#: Mailman/MailList.py:715 msgid "You have been invited to join the %(listname)s mailing list" msgstr "あなたは%(listname)s メーリングリストへ入会を招待されています." -#: Mailman/MailList.py:813 Mailman/MailList.py:1177 +#: Mailman/MailList.py:819 Mailman/MailList.py:1188 msgid " from %(remote)s" msgstr " %(remote)s から" -#: Mailman/MailList.py:847 +#: Mailman/MailList.py:853 msgid "subscriptions to %(realname)s require moderator approval" msgstr "%(realname)s への入会には管理者の承認が必要です" -#: Mailman/MailList.py:910 bin/add_members:242 +#: Mailman/MailList.py:916 bin/add_members:242 msgid "%(realname)s subscription notification" msgstr "%(realname)s 入会通知" -#: Mailman/MailList.py:929 +#: Mailman/MailList.py:936 Mailman/MailList.py:1118 msgid "unsubscriptions require moderator approval" msgstr "退会には管理者の承認が必要です" -#: Mailman/MailList.py:949 +#: Mailman/MailList.py:956 msgid "%(realname)s unsubscribe notification" msgstr "%(realname)s 退会通知" -#: Mailman/MailList.py:1098 +#: Mailman/MailList.py:1105 msgid "subscriptions to %(name)s require administrator approval" msgstr "%(name)s への入会には管理者の承認が必要です" -#: Mailman/MailList.py:1346 +#: Mailman/MailList.py:1357 msgid "Last autoresponse notification for today" msgstr "本日の最新自動応答" @@ -10703,15 +10743,23 @@ " -h / --help\n" " このメッセージを表示して終了する.\n" -#: cron/checkdbs:110 -msgid "%(count)d %(realname)s moderator request(s) waiting" -msgstr "%(realname)s の司会要請が %(count)d 件あります" +#: cron/checkdbs:107 +msgid "" +"Notice: %(discarded)d old request(s) automatically expired.\n" +"\n" +msgstr "" +"通知: %(discarded)d 件の司会要請が期限切れとなりました.\n" +"\n" + +#: cron/checkdbs:120 +msgid "%(realname)s moderator requests notice" +msgstr "%(realname)s 司会要請通知" -#: cron/checkdbs:129 +#: cron/checkdbs:140 msgid "Pending subscriptions:" msgstr "保留中の会員登録:" -#: cron/checkdbs:138 +#: cron/checkdbs:151 msgid "" "\n" "Pending posts:" @@ -10719,7 +10767,7 @@ "\n" "保留投稿:" -#: cron/checkdbs:144 +#: cron/checkdbs:158 msgid "" "From: %(sender)s on %(date)s\n" "Subject: %(subject)s\n"