summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbwarsaw2000-12-26 18:20:01 +0000
committerbwarsaw2000-12-26 18:20:01 +0000
commite5c72c764a5ddb42c1b927d89047c8b2af336043 (patch)
tree6c109e1ce2fc99133403d9d1aa8c3efeaf450c06
parent369e010d18dced7e3cd25255fc06830ad7cbc56b (diff)
downloadmailman-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.py77
-rw-r--r--Mailman/Cgi/admindb.py8
-rw-r--r--Mailman/Cgi/edithtml.py10
-rw-r--r--Mailman/Cgi/handle_opts.py92
-rw-r--r--Mailman/Cgi/listinfo.py29
-rw-r--r--Mailman/Cgi/options.py10
-rw-r--r--Mailman/Cgi/private.py53
-rw-r--r--Mailman/Cgi/roster.py27
-rw-r--r--Mailman/Cgi/subscribe.py22
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")