Mailman - The GNU Mailing List Management System
Copyright (C) 2001-2003 by the Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA


INTERNATIONALIZATION

    Mailman 2.1 is multilingual.  By default it supports English, but
    additional languages may also be available.  If the language you
    want to add is already supported by Mailman, then getting all your
    lists to also support that language is fairly easy.  You just need
    to go to the administrative web pages, click on the "Languages"
    category, and select the languages you want your list to support.

    If the language you want to use has not been previously
    translated, or you don't know where to find the language pack for
    your language, read the section below or contact the Mailman
    internationalization mailing list mailman-i18n@python.org.


ADDING NEW TRANSLATIONS

    Suppose you want to add new translations for a previously
    unsupported language, what steps would you need to take?

    First, you should send a message to mailman-i18n@python.org to
    make sure nobody has already created the translations for your
    language.  In the example below, we're going to create a
    translation for the mythical language "Fredonia" which has the
    official language code of "xx".

    You should see

        http://www.list.org/i18n.html

    for more information on internationalizing Mailman.  Also, Simone
    Piunno -- who is the Italian translation champion -- has written
    up some nice instructions, which are provided below.

    In general you need to do two things to add translations for a
    language in Mailman.  You need to translate the message catalog
    and you need to translate the templates.

    To translate the message catalog, grab the file
    messages/mailman.pot and make a copy called mailman.po in the
    subdirectory messages/xx/LC_MESSAGES.  Then you edit the file and
    add the translations for each message identified in the catalog.
    It will be very helpful to have a good tool, such as KDE's KBabel
    tool, or po-mode for Emacs, for this part of the job.

    Once you've added your translations, you can then run msgfmt over
    your .po file to generate messages/xx/LC_MESSAGE/mailman.mo.  Run
    "make" in the messages subdirectory to do this.

    Next, create the subdirectory templates/xx and translate each of
    the files in templates/en/*.{html,txt}.  These you should also
    donate back to the Mailman project.

    To make Mailman and your lists aware of the new language, follow
    the directions in the section above.


TRANSLATION HINTS

    Q: If your language uses non-ASCII characters, such as the cedilla in
       French, how should you add these to the catalogs and templates?

    A: For any message that is destined for the web interface, use an
       HTML entity reference where appropriate.  For messages destined
       for email, you should use the non-ASCII characters explicitly.
       This includes both for the message catalog and the templates.


RESYNCHRONIZING THE CATALOG

    As Mailman development continues, new updated catalogs
    (i.e. mailman.pot files) will be made available.  As mailman.pot
    changes, the individual language catalogs
    (i.e. xx/LC_MESSAGES/mailman.po files) need to be updated as well.

    In general, I as the Mailman maintainer will merge the new
    catalogs with the individual language catalogs, and commit the
    updates to CVS.  Translators should grab the new mailman.po files
    from CVS and update the translated messages.  They should also
    update the template translations.

    For best results, you will probably want to keep current on
    changes to Mailman 2.1 in the CVS.  As Mailman 2.1 moves towards
    final release, the catalogs and templates should start to
    stabilize.  Alternatively, occasionally I will make new English
    language packs available on SourceForge, and you can use these to
    create your translations.


DONATING YOUR TRANSLATION BACK TO MAILMAN

    We'd really appreciate it if you donate your translations back to
    the Mailman project, so that others can benefit from your effort.
    You'll get credit of course, in the Mailman documentation.  Here
    are the steps to donate your translations, either the first time
    or subsequent updates.

    The best thing to do is to send me <barry@python.org> a "tarball",
    i.e. a gzip'd tarfile, that can be unpacked in the top level
    directory of the Mailman CVS tree.  This would be the directory
    containing this README-I18N.en file.

    Your tarball should contain two directories, where your donated
    language is `xx':

        templates/xx
        messages/xx

    In templates/xx there should be the translated templates, all the
    .txt and .html files, for your language, mirroring those in the
    English template directory (always the master copy).

    In messages/xx you should have a single directory LC_MESSAGES, and
    in that directory a file called mailman.po, which is the human
    readable catalog for your language.  Do not send me the mailman.mo
    file, since I'll recreate it on my end, and that'll save on the
    size of the tarball.

    That's basically it.  If you need to include a README, please call
    it README.xx and put it in the messages/xx directory.  README.xx
    can be in your native language.

    You can email the tarball to me, and if this is the first
    installation of the language, please tell me what the
    add_language() call in Defaults.py.in should be for your
    language.


CURRENT LIST OF LANGUAGE SUPPORTED OUT-OF-THE BOX

    See http://www.list.org/i18n.html


MORE INSTRUCTIONS

    Here is the recipe that Simone Piunno used for the Italian
    translations:

    "You can start without much technical knowledge, but if you want
    to keep your translation up-to-date (while the development branch
    evolves into the next stable release) you'd better learn how to
    use cvs and diff.

    Here is my recipe.

    Basically, you'll start by copying templates/en/* to your sandbox dir
    and then translating each file.  Keep in mind that %(foo)s is a
    variable reference (much like %s in C) and must be left untouched.
    Also, you must be able to recognize a markup tag (eg, <foo>) because
    they must be left untouched too, and you should know how to escape
    non-ASCII characters, e.g. "è" -> "&egrave;", but only in html files.
    Remember that if you need a literal % sign, it must be doubled: %%

    Next, you copy messages/mailman.pot, renaming it to serbian.po.
    You can open this file with kbabel (a tool included in KDE SDK) and
    translate each string (original on the higher half of the window, your
    translation on the bottom half).

    If you are a masochist, you can even use emacs PO mode ;)
    Keep attention to the same markers and escaping as above, with the added
    complexity that here it's harder to say when a string is html (e.g. used
    for web UI) or pure text (e.g used for email interface)

    Then you try to compile you .po file:

        msgfmt -v -o serbian.mo serbian.po

    No error messages should appear.

    Next, copy your files on an installed mailman tree, and run
    bin/transcheck XX, where XX is your country code.

    No warning should appear (but maybe some warning is ok, if you really
    know what you're doing).

    Now, try to run your translation (add an "add_language" line to
    Mailman/Defaults.py) and check the many scattered pieces blend
    together well.  Sometimes you'll need some adjustment.

    When you're satistied, pack up a tar.gz with the following structure:

    messages/XX/LC_MESSAGES/mailman.po
    templates/XX/admindbdetails.html
    templates/XX/admindbpreamble.html
    .
    .
    templates/XX/userpass.txt
    templates/XX/verify.txt

    (XX is your country code) and send it to Barry Warsaw.  Do not
    include the mailman.mo file if you can help it.

    By that time, your translation could be somewhat obsolete, because
    templates and mailman.pot could have been evolved meanwhile.

    Don't panic.

    You'll need to check diffs to find what changed and how, so that
    you can easily update your files.

    Save everything everytime, you'll need it.



Local Variables:
mode: text
indent-tabs-mode: nil
End:
