Internationalizing a web-based application is much more complicated than internationalizing a command line program such as `ls' because the natural language context (i.e. the ``locale'') is determined by the web request, or the email message being processed, instead of by the user's shell. In Mailman, the locale is dynamic and fluid; there may in fact be several locales needed to process any particular email message. Most of the existing techniques for internationalizing programs assume a static locale and a single domain. Mailman inherits the single domain tradition of these tools, but it uses dynamic techniques to calculate the translation locale.
We use the term ``locale'' and ``language'' interchangeably below, although this is not completely accurate. A locale describes much more than the language used; it also defines the character encoding, as well as the formating of dates, numbers, currency, etc. However, since Mailman does not currently support the localization of data such as dates, the language selection is the most important aspect of the active locale. Typically (although not exclusively) a single character encoding is used for a single language.
At any given point in the processing, the following locales may exist.
To support these multiple language contexts, Mailman uses an object-oriented approach where the locale is represented by an instance of a class. While this may seem natural, it is actually an elaboration of the global translation contexts in classic internationalized programs. This will be described in more detail later.