"""MailList mixin class managing the language options.
"""
import codecs
from Mailman import mm_cfg
from Mailman import Utils
from Mailman import i18n
from Mailman.Logging.Syslog import syslog
from Mailman.Gui.GUIBase import GUIBase
_ = i18n._
class Language(GUIBase):
def GetConfigCategory(self):
return 'language', _('Language options')
def GetConfigInfo(self, mlist, category, subcat=None):
if category <> 'language':
return None
langs = mlist.GetAvailableLanguages()
langnames = [_(Utils.GetLanguageDescr(L)) for L in langs]
try:
langi = langs.index(mlist.preferred_language)
except ValueError:
langi = 0
def checkcodec(charset):
try:
codecs.lookup(charset)
return 1
except LookupError:
return 0
all = [key for key in mm_cfg.LC_DESCRIPTIONS.keys()
if checkcodec(Utils.GetCharSet(key))]
all.sort()
checked = [L in langs for L in all]
allnames = [_(Utils.GetLanguageDescr(L)) for L in all]
return [
_('Natural language (internationalization) options.'),
('preferred_language', mm_cfg.Select,
(langs, langnames, langi),
0,
_('Default language for this list.'),
_('''This is the default natural language for this mailing list.
If <a href="?VARHELP=language/available_languages">more than one
language</a> is supported then users will be able to select their
own preferences for when they interact with the list. All other
interactions will be conducted in the default language. This
applies to both web-based and email-based messages, but not to
email posted by list members.''')),
('available_languages', mm_cfg.Checkbox,
(allnames, checked, 0, all), 0,
_('Languages supported by this list.'),
_('''These are all the natural languages supported by this list.
Note that the
<a href="?VARHELP=language/preferred_language">default
language</a> must be included.''')),
('encode_ascii_prefixes', mm_cfg.Radio,
(_('Never'), _('Always'), _('As needed')), 0,
_("""Encode the
<a href="?VARHELP=general/subject_prefix">subject
prefix</a> even when it consists of only ASCII characters?"""),
_("""If your mailing list's default language uses a non-ASCII
character set and the prefix contains non-ASCII characters, the
prefix will always be encoded according to the relevant
standards. However, if your prefix contains only ASCII
characters, you may want to set this option to <em>Never</em> to
disable prefix encoding. This can make the subject headers
slightly more readable for users with mail readers that don't
properly handle non-ASCII encodings.
<p>Note however, that if your mailing list receives both encoded
and unencoded subject headers, you might want to choose <em>As
needed</em>. Using this setting, Mailman will not encode ASCII
prefixes when the rest of the header contains only ASCII
characters, but if the original header contains non-ASCII
characters, it will encode the prefix. This avoids an ambiguity
in the standards which could cause some mail readers to display
extra, or missing spaces between the prefix and the original
header.""")),
]
def _setValue(self, mlist, property, val, doc):
if property == 'preferred_language':
i18n.set_language(val)
doc.set_language(val)
GUIBase._setValue(self, mlist, property, val, doc)