diff options
| author | bwarsaw | 2000-12-26 18:20:01 +0000 |
|---|---|---|
| committer | bwarsaw | 2000-12-26 18:20:01 +0000 |
| commit | e5c72c764a5ddb42c1b927d89047c8b2af336043 (patch) | |
| tree | 6c109e1ce2fc99133403d9d1aa8c3efeaf450c06 | |
| parent | 369e010d18dced7e3cd25255fc06830ad7cbc56b (diff) | |
| download | mailman-e5c72c764a5ddb42c1b927d89047c8b2af336043.tar.gz mailman-e5c72c764a5ddb42c1b927d89047c8b2af336043.tar.zst mailman-e5c72c764a5ddb42c1b927d89047c8b2af336043.zip | |
jcrey's latest round of I18N changes.
Diffstat (limited to '')
| -rw-r--r-- | Mailman/Cgi/admin.py | 77 | ||||
| -rw-r--r-- | Mailman/Cgi/admindb.py | 8 | ||||
| -rw-r--r-- | Mailman/Cgi/edithtml.py | 10 | ||||
| -rw-r--r-- | Mailman/Cgi/handle_opts.py | 92 | ||||
| -rw-r--r-- | Mailman/Cgi/listinfo.py | 29 | ||||
| -rw-r--r-- | Mailman/Cgi/options.py | 10 | ||||
| -rw-r--r-- | Mailman/Cgi/private.py | 53 | ||||
| -rw-r--r-- | Mailman/Cgi/roster.py | 27 | ||||
| -rw-r--r-- | Mailman/Cgi/subscribe.py | 22 |
9 files changed, 201 insertions, 127 deletions
diff --git a/Mailman/Cgi/admin.py b/Mailman/Cgi/admin.py index 63b6e3e90..3787406ad 100644 --- a/Mailman/Cgi/admin.py +++ b/Mailman/Cgi/admin.py @@ -33,17 +33,7 @@ from Mailman import mm_cfg from Mailman.Cgi import Auth from Mailman.Logging.Syslog import syslog - -CATEGORIES = [('general', "General Options"), - ('members', "Membership Management"), - ('privacy', "Privacy Options"), - ('nondigest', "Regular-member (non-digest) Options"), - ('digest', "Digest-member Options"), - ('bounce', "Bounce Options"), - ('archive', "Archival Options"), - ('gateway', "Mail-News and News-Mail gateways"), - ('autoreply', 'Auto-responder'), - ] +CATEGORIES = [] @@ -54,6 +44,7 @@ def main(): settings, which is processed before producing the new version. """ + global CATEGORIES doc = Document() parts = Utils.GetPathPieces() if not parts: @@ -90,14 +81,17 @@ def main(): Auth.loginpage(mlist, 'admin', frontpage=1) return + os.environ['LANG'] = mlist.preferred_language + CATEGORIES = [('general', _("General Options")), - ('members', _("Membership Management")), - ('privacy', _("Privacy Options")), - ('nondigest', _("Regular-member (non-digest) Options")), - ('digest', _("Digest-member Options")), - ('bounce', _("Bounce Options")), - ('archive', _("Archival Options")), - ('gateway', _("Mail-News and News-Mail gateways"))] + ('members', _("Membership Management")), + ('privacy', _("Privacy Options")), + ('nondigest', _("Regular-member (non-digest) Options")), + ('digest', _("Digest-member Options")), + ('bounce', _("Bounce Options")), + ('archive', _("Archival Options")), + ('gateway', _("Mail-News and News-Mail gateways")), + ] if category not in map(lambda x: x[0], CATEGORIES): category = 'general' @@ -169,6 +163,8 @@ def FormatAdminOverview(error=None): if l.advertised: advertised.append(l) + os.environ['LANG'] = mm_cfg.DEFAULT_SERVER_LANGUAGE + if error: greeting = FontAttr(error, color="ff5060", size="+1") else: @@ -498,6 +494,17 @@ def GetItemGuiValue(mlist, kind, varname, params): container.AddItem(_('<br><em>...specify a file to upload</em><br>')) container.AddItem(FileUpload(varname+'_upload', r, c)) return container + + # jcrey - new to deal with language + elif kind == mm_cfg.Select: + if params: + values, legend, selected = params + else: + values = mlist.GetAvailableLanguages() + legend = map(_, map(Utils.GetLanguageDescr, values)) + selected = values.index(mlist.preferred_language) + return SelectOptions(varname, values, legend, selected) + def GetItemGuiDescr(mlist, category, varname, descr, detailsp): @@ -533,7 +540,7 @@ def FormatMembershipOptions(mlist, cgi_data): user_table.AddRow([Center(Header(4, _("Membership List")))]) user_table.AddCellInfo(user_table.GetCurrentRowIndex(), user_table.GetCurrentCellIndex(), - bgcolor="#cccccc", colspan=8) + bgcolor="#cccccc", colspan=9) membercnt = len(mlist.members) + len(mlist.digest_members) chunksz = mlist.admin_member_chunksize user_table.AddRow( @@ -542,13 +549,13 @@ def FormatMembershipOptions(mlist, cgi_data): ))]) user_table.AddCellInfo(user_table.GetCurrentRowIndex(), user_table.GetCurrentCellIndex(), - bgcolor="#cccccc", colspan=8) + bgcolor="#cccccc", colspan=9) user_table.AddRow(map(Center, [_('member address'), _('subscr'), _('hide'), _('nomail'), _('ack'), _('not metoo'), - _('digest'), _('plain')])) + _('digest'), _('plain'), _('language')])) rowindex = user_table.GetCurrentRowIndex() - for i in range(8): + for i in range(9): user_table.AddCellInfo(rowindex, i, bgcolor='#cccccc') all = mlist.GetMembers() + mlist.GetDigestMembers() if len(all) > mlist.admin_member_chunksize: @@ -602,6 +609,17 @@ def FormatMembershipOptions(mlist, cgi_data): checked = 0 cells.append(Center(CheckBox('%s_plain' % member, value, checked))) user_table.AddRow(cells) + + # format preferred user's language + pl = mlist.GetPreferredLanguage(member) + ListLangs = mlist.GetAvailableLanguages() + LangDescr = map(_, map(Utils.GetLanguageDescr, ListLangs)) + try: + selected = ListLangs.index(pl) + except: + selected = 0 + cells.append(Center(SelectOptions(member + '_language' , ListLangs, + LangDescr, selected).Format())) container.AddItem(Center(user_table)) legend = UnorderedList() legend.AddItem(_('<b>subscr</b> -- Is the member subscribed?')) @@ -619,6 +637,8 @@ def FormatMembershipOptions(mlist, cgi_data): _('<b>plain</b> -- ' 'If getting digests, does the member get plain text digests? ' '(otherwise, MIME)')) + legend.AddItem(_("<b>language</b> --" + "Language preferred by the user")) container.AddItem(legend.Format()) container.AddItem(footer) t = Table(width="90%") @@ -754,6 +774,8 @@ def GetValidValue(mlist, prop, my_type, val, dependant): if num < 0: return getattr(mlist, prop) return num + elif my_type == mm_cfg.Select: + return val else: # Should never get here... return val @@ -861,7 +883,7 @@ def ChangeOptions(mlist, category, cgi_info, document): subscribe_errors = [] subscribe_success = [] result = mlist.ApprovedAddMembers(names, None, - digest, send_welcome_msg) + digest, None, send_welcome_msg) for name in result.keys(): if result[name] is None: subscribe_success.append(name) @@ -915,6 +937,13 @@ def ChangeOptions(mlist, category, cgi_info, document): Errors.MMAlreadyDigested, Errors.MMAlreadyUndigested): pass + + if cgi_info.has_key(user+'_language'): + newlang = cgi_info[user+'_language'].value + oldlang = mlist.GetPreferredLanguage(user) + if newlang <> oldlang: + mlist.SetPreferredLanguage(user, newlang) + for opt in ("hide", "nomail", "ack", "notmetoo", "plain"): opt_code = MailCommandHandler.option_info[opt] if cgi_info.has_key("%s_%s" % (user, opt)): @@ -931,7 +960,7 @@ def ChangeOptions(mlist, category, cgi_info, document): def AddErrorMessage(doc, errmsg, tag='Warning: ', *args): doc.AddItem(Header(3, Bold(FontAttr( - tag, color="#ff0000", size="+2")).Format() + + _(tag), color="#ff0000", size="+2")).Format() + Italic(errmsg % args).Format())) diff --git a/Mailman/Cgi/admindb.py b/Mailman/Cgi/admindb.py index 44eead820..f0df63ff4 100644 --- a/Mailman/Cgi/admindb.py +++ b/Mailman/Cgi/admindb.py @@ -67,6 +67,9 @@ def main(): handle_no_list(doc, _('No such list <em>%s</em><p>') % listname) syslog('error', 'No such list "%s": %s\n' % (listname, e)) return + + os.environ['LANG'] = mlist.preferred_language + # # now we must authorize the user to view this page, and if they are, to # handle both the printing of the current outstanding requests, and the @@ -111,7 +114,8 @@ def PrintRequests(mlist, doc): return doc.AddItem(Utils.maketext( - 'admindbpreamble.html', {'listname': mlist.real_name}, raw=1)) + 'admindbpreamble.html', {'listname': mlist.real_name}, + mlist.preferred_language, raw=1)) doc.AddItem('.<p>') form = Form(mlist.GetScriptURL('admindb')) doc.AddItem(form) @@ -147,7 +151,7 @@ def PrintRequests(mlist, doc): def PrintAddMemberRequest(mlist, id, table): - time, addr, passwd, digest = mlist.GetRecord(id) + time, addr, passwd, digest, lang = mlist.GetRecord(id) table.AddRow([addr, RadioButtonArray(id, (_('Subscribe'), _('Refuse')), values=(mm_cfg.SUBSCRIBE, mm_cfg.REJECT)), diff --git a/Mailman/Cgi/edithtml.py b/Mailman/Cgi/edithtml.py index 8c7f8fec3..5e4484d2f 100644 --- a/Mailman/Cgi/edithtml.py +++ b/Mailman/Cgi/edithtml.py @@ -19,6 +19,7 @@ import os import cgi import string +import gettext from Mailman import Utils from Mailman import MailList @@ -31,6 +32,8 @@ from Mailman.Logging.Syslog import syslog def main(): + def _(string): return string + template_data = ( ('listinfo.html', _('General list information page')), ('subscribe.html', _('Subscribe results page')), @@ -38,6 +41,7 @@ def main(): ('handle_opts.html', _('Changing user options results page')), ) + _ = gettext.gettext doc = Document() parts = Utils.GetPathPieces() if not parts: @@ -54,6 +58,8 @@ def main(): syslog('error', _('No such list "%s": %s\n') % (listname, e)) return + os.environ['LANG'] = mlist.preferred_language + # Must be authenticated to get any farther cgidata = cgi.FieldStorage() try: @@ -130,7 +136,9 @@ def ChangeHTML(mlist, cgi_info, template_name, doc): doc.AddItem('<hr>') return code = cgi_info['html_code'].value - f = open(os.path.join(mlist._template_dir, template_name), 'w') + f = open(os.path.join(mlist._template_dir, mlist.preferred_language, + template_name), + 'w') f.write(code) f.close() doc.AddItem(Header(3, _('HTML successfully updated.'))) diff --git a/Mailman/Cgi/handle_opts.py b/Mailman/Cgi/handle_opts.py index 74f3f4ba9..b5af9ec3b 100644 --- a/Mailman/Cgi/handle_opts.py +++ b/Mailman/Cgi/handle_opts.py @@ -30,17 +30,19 @@ from Mailman.Logging.Syslog import syslog -def PrintResults(mlist, operation, doc, results, user=None): +def PrintResults(mlist, operation, doc, results, user=None, lang=None): + if lang is None: + lang = mlist.preferred_language if user: url = '%s/%s' % (mlist.GetScriptURL('options'), Utils.ObscureEmail(user)) results = results + _('<p>Continue to ') + \ Link(url, _('edit your personal options')).Format() + \ '.' - replacements = mlist.GetStandardReplacements() + replacements = mlist.GetStandardReplacements(lang) replacements['<mm-results>'] = results replacements['<mm-operation>'] = operation - output = mlist.ParseTags('handle_opts.html', replacements) + output = mlist.ParseTags('handle_opts.html', replacements, lang) doc.AddItem(output) print doc.Format(bgcolor="#ffffff") # hrm... @@ -83,69 +85,79 @@ def process_form(mlist, user, doc): operation = "" user = Utils.LCDomain(user) + os.environ['LANG'] = pluser = mlist.GetPreferredLanguage(user) + if not Utils.FindMatchingAddresses(user, mlist.members, mlist.digest_members): - PrintResults(mlist, operation, doc, _("%s not a member!<p>") % user) + PrintResults(mlist, operation, doc, + _("%s not a member!<p>") % user, pluser) if form.has_key("unsub"): - operation = "Unsubscribe" + operation = _("Unsubscribe") if not form.has_key("upw"): - PrintResults(mlist, operation, doc, - _("You must give your password to unsubscribe.") + "<p>", - user) + PrintResults( + mlist, operation, doc, + _("You must give your password to unsubscribe.") + "<p>", + user, pluser) else: try: pw = form["upw"].value if mlist.ConfirmUserPassword(user, pw): mlist.DeleteMember(user, "web cmd") except Errors.MMListNotReadyError: - PrintResults(mlist, operation, doc, _("List is not functional."), - user) + PrintResults(mlist, operation, doc, + _("List is not functional."), + user, pluser) except Errors.MMNoSuchUserError: PrintResults(mlist, operation, doc, - _("You seem to already be not a member.") + "<p>", user) + _("You seem to already be not a member.") + "<p>", + user, pluser) except Errors.MMBadUserError: PrintResults(mlist, operation, doc, _("Your account has gone awry - " - "please contact the list administrator!") + "<p>", user) + "please contact the list administrator!") + "<p>", + user, pluser) except Errors.MMBadPasswordError: PrintResults(mlist, operation, doc, _("That password was incorrect.") + "<p>") - PrintResults(mlist, operation, doc, _("You have been unsubscribed.") + "<p>") + PrintResults(mlist, operation, doc, + _("You have been unsubscribed.") + "<p>", None, pluser) elif form.has_key("emailpw"): try: mlist.MailUserPassword(user) PrintResults(mlist, operation, doc, _("A reminder of your password " - "has been emailed to you.") + "<p>", user) + "has been emailed to you.") + "<p>", user, pluser) except Errors.MMBadUserError: PrintResults(mlist, operation, doc, _("The password entry for `%s' has not " 'been found. The list administrator is being ' - 'notified.<p>') % user, user) + 'notified.<p>') % user, user, pluser) elif form.has_key("othersubs"): if not form.has_key('othersubspw'): PrintResults(mlist, operation, doc, - _("You must specify your password."), user) + _("You must specify your password."), user, pluser) else: try: mlist.ConfirmUserPassword(user, form['othersubspw'].value) except Errors.MMListNotReadyError: PrintResults(mlist, operation, doc, - _("The list is currently not functional."), user) + _("The list is currently not functional."), + user, pluser) except Errors.MMNotAMemberError: PrintResults(mlist, operation, doc, - _("You seem to no longer be a list member."), user) + _("You seem to no longer be a list member."), + user, pluser) except Errors.MMBadPasswordError: PrintResults(mlist, operation, doc, _("Incorrect password."), - user) + user, pluser) except Errors.MMBadUserError: PrintResults( mlist, operation, doc, - _("You have no password. Contact the list administrator."), - user) + _("You have no password. Contact the list administrator."), + user, pluser) doc.AddItem(Header(2, _("List Subscriptions for %s on %s") % (user, mlist.host_name))) @@ -184,26 +196,26 @@ def process_form(mlist, user, doc): except Errors.MMListNotReadyError: PrintResults(mlist, operation, doc, _("The list is currently not functional."), - user) + user, pluser) except Errors.MMNotAMemberError: PrintResults(mlist, operation, doc, _("You seem to no longer be a list member."), - user) + user, pluser) except Errors.MMBadPasswordError: PrintResults(mlist, operation, doc, _("The old password you supplied was incorrect."), - user) + user, pluser) except Errors.MMPasswordsMustMatch: PrintResults(mlist, operation, doc, _("Passwords must match."), - user) + user, pluser) PrintResults(mlist, operation, doc, _("Your password has been changed."), - user) + user, pluser) else: PrintResults(mlist, operation, doc, _("You must specify your old password," - " and your new password twice."), user) + " and your new password twice."), user, pluser) else: # if key doesn't exist, or its value can't be int()'ified, return the @@ -229,7 +241,7 @@ def process_form(mlist, user, doc): if not form.has_key("digpw"): PrintResults(mlist, operation, doc, _("You must supply a password to change options."), - user) + user, pluser) try: mlist.ConfirmUserPassword(user, form['digpw'].value) except Errors.MMAlreadyDigested: @@ -238,24 +250,32 @@ def process_form(mlist, user, doc): pass except Errors.MMMustDigestError: PrintResults(mlist, operation, doc, - _("List only accepts digest members."), user) + _("List only accepts digest members."), user, pluser) except Errors.MMCantDigestError: PrintResults(mlist, operation, doc, - _("List doesn't accept digest members."), user) + _("List doesn't accept digest members."), user, pluser) except Errors.MMNotAMemberError: PrintResults(mlist, operation, doc, _("%s isn't subscribed to this list.") - % mail.GetSender(), user) + % mail.GetSender(), user, pluser) except Errors.MMListNotReadyError: PrintResults(mlist, operation, doc, _("List is not functional."), - user) + user, pluser) except Errors.MMNoSuchUserError: PrintResults(mlist, operation, doc, _("%s is not subscribed to this list.") - % mail.GetSender(), user) + % mail.GetSender(), user, pluser) except Errors.MMBadPasswordError: PrintResults(mlist, operation, doc, - _("You gave the wrong password."), user) + _("You gave the wrong password."), user, pluser) + + # jcrey: read user's preferred language + try: + pluser = form['language'].value + except ValueError: + pluser = mlist.GetPreferredLanguage(user) + + mlist.SetPreferredLanguage(user, pluser) mlist.SetUserOption(user, mm_cfg.DisableDelivery, disable_mail) mlist.SetUserOption(user, mm_cfg.DontReceiveOwnPosts, dont_receive) @@ -268,7 +288,7 @@ def process_form(mlist, user, doc): # to the user. if digest_value == 0: PrintResults(mlist, operation, doc, - _('You may get one last digest.'), user) + _('You may get one last digest.'), user, pluser) except (Errors.MMAlreadyDigested, Errors.MMAlreadyUndigested): pass except Errors.MMCantDigestError: @@ -280,4 +300,4 @@ def process_form(mlist, user, doc): for this list, so your delivery option has not been set. However your other options have been set successfully.''') mlist.SetUserOption(user, mm_cfg.ConcealSubscription, conceal) - PrintResults(mlist, operation, doc, msg, user) + PrintResults(mlist, operation, doc, msg, user, pluser) diff --git a/Mailman/Cgi/listinfo.py b/Mailman/Cgi/listinfo.py index 3d5b10155..5462fbf92 100644 --- a/Mailman/Cgi/listinfo.py +++ b/Mailman/Cgi/listinfo.py @@ -21,6 +21,7 @@ import os import string +import cgi from Mailman import mm_cfg from Mailman import Utils @@ -45,7 +46,14 @@ def main(): syslog('error', 'listinfo: no such list "%s": %s' % (listname, e)) return - FormatListListinfo(mlist) + # see if the user want to see this page in other language + form = cgi.FieldStorage() + if form.has_key('language'): + language = form['language'].value + else: + language = mlist.preferred_language + + FormatListListinfo(mlist, language) @@ -89,6 +97,10 @@ def FormatListinfoOverview(error=None): else: advertised.append(mlist) + # This call to environ must be done because MailList overwrite + # Environment variable 'LANG' + os.environ['LANG'] = mm_cfg.DEFAULT_SERVER_LANGUAGE + if error: greeting = FontAttr(error, color="ff5060", size="+1") else: @@ -143,12 +155,14 @@ def FormatListinfoOverview(error=None): -def FormatListListinfo(mlist): +def FormatListListinfo(mlist, lang): "Expand the listinfo template against the list's settings, and print." + os.environ['LANG'] = lang + doc = HeadlessDocument() - replacements = mlist.GetStandardReplacements() + replacements = mlist.GetStandardReplacements(lang) if not mlist.digestable or not mlist.nondigestable: replacements['<mm-digest-radio-button>'] = "" @@ -168,13 +182,16 @@ def FormatListListinfo(mlist): replacements['<mm-subscribe-form-start>'] = mlist.FormatFormStart( 'subscribe') replacements['<mm-roster-form-start>'] = mlist.FormatFormStart('roster') - replacements['<mm-editing-options>'] = mlist.FormatEditingOption() + replacements['<mm-editing-options>'] = mlist.FormatEditingOption(lang) replacements['<mm-info-button>'] = SubmitButton('UserOptions', _('Edit Options')).Format() - replacements['<mm-roster-option>'] = mlist.FormatRosterOptionForUser() + replacements['<mm-roster-option>'] = mlist.FormatRosterOptionForUser(lang) + replacements['<mm-displang-box>'] = mlist.FormatButton('displang-button', + text = _("See this page in")) + replacements['<mm-lang-form-start>'] = mlist.FormatFormStart('listinfo') # Do the expansion. - doc.AddItem(mlist.ParseTags('listinfo.html', replacements)) + doc.AddItem(mlist.ParseTags('listinfo.html', replacements, lang)) print doc.Format() diff --git a/Mailman/Cgi/options.py b/Mailman/Cgi/options.py index f986389df..c23a543f3 100644 --- a/Mailman/Cgi/options.py +++ b/Mailman/Cgi/options.py @@ -59,6 +59,8 @@ def main(): syslog('error', 'No such list "%s": %s\n' % (listname, e)) return + os.environ['LANG'] = mlist.preferred_language + # Sanity check the user user = Utils.LCDomain(user) if not mlist.members.has_key(user) and \ @@ -82,8 +84,12 @@ def main(): else: presentable_user = user + # user's preferred language + pluser = mlist.GetPreferredLanguage(user) + os.environ['LANG'] = pluser + # Do replacements - replacements = mlist.GetStandardReplacements() + replacements = mlist.GetStandardReplacements(pluser) replacements['<mm-digest-radio-button>'] = mlist.FormatOptionButton( mm_cfg.Digests, 1, user) replacements['<mm-undigest-radio-button>'] = mlist.FormatOptionButton( @@ -142,5 +148,5 @@ You are subscribed to this list with the case-preserved address else: replacements['<mm-case-preserved-user>'] = '' - doc.AddItem(mlist.ParseTags('options.html', replacements)) + doc.AddItem(mlist.ParseTags('options.html', replacements, pluser)) print doc.Format() diff --git a/Mailman/Cgi/private.py b/Mailman/Cgi/private.py index d8d799eb3..337da2e35 100644 --- a/Mailman/Cgi/private.py +++ b/Mailman/Cgi/private.py @@ -29,49 +29,6 @@ from Mailman.Logging.Syslog import syslog LogStdErr("error", "private") - -PAGE = ''' -<html> -<head> - <title>%(listname)s Private Archives Authentication</title> -</head> -<body bgcolor="#ffffff"> -<FORM METHOD=POST ACTION="%(basepath)s/"> - <TABLE WIDTH="100%%" BORDER="0" CELLSPACING="4" CELLPADDING="5"> - <TR> - <TD COLSPAN="2" WIDTH="100%%" BGCOLOR="#99CCFF" ALIGN="CENTER"> - <B><FONT COLOR="#000000" SIZE="+1">%(listname)s Private Archives - Authentication</FONT></B> - </TD> - </TR> - <tr> - <td COLSPAN="2"> <P>%(message)s </td> - <tr> - </tr> - <TD> <div ALIGN="Right">Address: </div></TD> - <TD> <INPUT TYPE=TEXT NAME=username SIZE=30> </TD> - <tr> - </tr> - <TD> <div ALIGN="Right"> Password: </div> </TD> - <TD> <INPUT TYPE=password NAME=password SIZE=30></TD> - <tr> - </tr> - <td></td> - <td> <INPUT TYPE=SUBMIT VALUE="Let me in..."> - </td> - </tr> - </TABLE> - <p><strong><em>Important:</em></strong> From this point on, you - must have cookies enabled in your browser, otherwise you will not - be able to read the private archives. - - <p>Session cookies are used in the private archives so that you - don\'t need to re-authenticate for every article your read. This - cookie will expire automatically when you exit your browser. -</FORM> -''' - - login_attempted = 0 _list = None @@ -169,12 +126,12 @@ def main(): if not is_auth: # Output the password form - print 'Content-type: text/html\n\n' - page = PAGE - while path and path[0] == '/': path=path[1:] # Remove leading /'s + print 'Content-type: text/html; charset=' + Utils.GetCharSet() + '\n\n' + while path and path[0] == '/': + path=path[1:] # Remove leading /'s basepath = os.path.split(mlist.GetBaseArchiveURL())[0] listname = mlist.real_name - print page % vars() + print Utils.maketext('private.txt', vars(), mlist.preferred_language) sys.exit(0) # Authorization confirmed... output the desired file @@ -190,7 +147,7 @@ def main(): else: f = open(true_filename, 'r') except IOError: - print 'Content-type: text/html\n' + print 'Content-type: text/html; charset=' + Utils.GetCharSet() + '\n\n' print "<H3>" + _("Archive File Not Found") + "</H3>" print _("No file"), path, '(%s)' % true_filename diff --git a/Mailman/Cgi/roster.py b/Mailman/Cgi/roster.py index 5eb1a2443..c3733630c 100644 --- a/Mailman/Cgi/roster.py +++ b/Mailman/Cgi/roster.py @@ -31,6 +31,7 @@ from Mailman import Utils from Mailman import MailList from Mailman import htmlformat from Mailman import Errors +from Mailman import mm_cfg from Mailman.Logging.Syslog import syslog @@ -53,10 +54,26 @@ def main(): form = cgi.FieldStorage() + # messages in form should go in selected language (if any...) + if form.has_key('language'): + os.environ['LANG'] = lang = form['language'].value + else: + os.environ['LANG'] = lang = mlist.preferred_language + bad = "" # These nested conditionals constituted a cascading authentication # check, yielding a - if not mlist.private_roster: + # jcrey: + # Already in roster page, an user may desire to see roster page + # in a different language in a list with privacy access + + try: + FromURL = os.environ['HTTP_REFERER'] + except KeyError: + FromURL = '' + + if not mlist.private_roster or \ + mlist.GetScriptURL('roster', absolute=1) == FromURL: # No privacy. bad = "" else: @@ -93,8 +110,12 @@ def main(): print doc.Format() sys.exit(0) - replacements = mlist.GetAllReplacements() - doc.AddItem(mlist.ParseTags('roster.html', replacements)) + replacements = mlist.GetAllReplacements(lang) + replacements['<mm-displang-box>'] = mlist.FormatButton( + 'displang-button', + text = _('See this page in')) + replacements['<mm-lang-form-start>'] = mlist.FormatFormStart('roster') + doc.AddItem(mlist.ParseTags('roster.html', replacements, lang)) print doc.Format() diff --git a/Mailman/Cgi/subscribe.py b/Mailman/Cgi/subscribe.py index 270e76dd2..818df36be 100644 --- a/Mailman/Cgi/subscribe.py +++ b/Mailman/Cgi/subscribe.py @@ -49,6 +49,9 @@ def main(): print doc.Format(bgcolor="#ffffff") syslog('error', 'No such list "%s": %s\n' % (listname, e)) return + + os.environ['LANG'] = mlist.preferred_language + try: process_form(mlist, doc) finally: @@ -78,6 +81,13 @@ def process_form(mlist, doc): results = '' # Preliminaries done, actual processing of the form input below. + if form.has_key("language"): + language = form["language"].value + else: + language = mlist.preferred_language + + os.environ['LANG'] = language + if form.has_key("UserOptions") or \ form.has_key("info") and \ not form.has_key("email"): @@ -161,7 +171,7 @@ def process_form(mlist, doc): digesting = " digest" else: digesting = "" - mlist.AddMember(email, pw, digest, remote) + mlist.AddMember(email, pw, digest, remote, language) # # check for all the errors that mlist.AddMember can throw # options on the web page for this cgi @@ -208,14 +218,16 @@ def process_form(mlist, doc): results = results + \ _("You have been successfully subscribed to %s.") % \ (mlist.real_name) - PrintResults(mlist, results, doc) + PrintResults(mlist, results, doc, language) -def PrintResults(mlist, results, doc): - replacements = mlist.GetStandardReplacements() +def PrintResults(mlist, results, doc, lang=None): + if lang is None: + lang = mlist.preferred_language + replacements = mlist.GetStandardReplacements(lang) replacements['<mm-results>'] = results - output = mlist.ParseTags('subscribe.html', replacements) + output = mlist.ParseTags('subscribe.html', replacements, lang) doc.AddItem(output) print doc.Format(bgcolor="#ffffff") |
