view roundup/i18n.py @ 2365:3a80831ecebe

If the target platform is win32, create .bat files... ...instead of *nix shell scripts. Target platform is set to "win32" if main command is 'bdist_wininst' or if the command is 'bdist' and it has the list of formats (from command line or config file) and the first item on that list is wininst. Otherwise target platform is set to current (build) platform.
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Wed, 26 May 2004 10:00:53 +0000
parents c2db20eca3fa
children e8b2044d82a6
line wrap: on
line source

#
# Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
# This module is free software, and you may redistribute it and/or modify
# under the same terms as Python, so long as this copyright message and
# disclaimer are retained in their original form.
#
# IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
# OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE.  THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#
# $Id: i18n.py,v 1.8 2004-05-22 14:55:07 a1s Exp $

"""
RoundUp Internationalization (I18N)

To use this module, the following code should be used::

    from roundup.i18n import _
    ...
    print _("Some text that can be translated")

Note that to enable re-ordering of inserted texts in formatting strings
(which can easily happen if a sentence has to be re-ordered due to
grammatical changes), translatable formats should use named format specs::

    ... _('Index of %(classname)s') % {'classname': cn} ...

Also, this eases the job of translators since they have some context what
the dynamic portion of a message really means.
"""
__docformat__ = 'restructuredtext'

import errno

# Roundup text domain
DOMAIN = "roundup"

# first, we try to import gettext; this probably never fails, but we make
# sure we survive this anyway
try:
    import gettext as gettext_module
except ImportError:
    gettext_module = None

# use or emulate features of gettext_module
if not gettext_module:
    # no gettext engine available.
    # implement emulation for Translations class
    # and translation() function
    class RoundupNullTranslations:
        """Dummy Translations class

        Only methods used by Roundup are implemented.

        """
        def add_fallback(self, fallback):
            pass
        def gettext(self, text):
            return text
        def ugettext(self, text):
            return unicode(text)
        def ngettext(self, singular, plural, count):
            if count == 1: return singular
            return plural
        def ungettext(self, singular, plural, count):
            return unicode(self.ngettext(singular, plural, count))

    RoundupTranslations = RoundupNullTranslations

    def translation(domain, localedir=None, languages=None, class_=None):
        """Always raise IOError (no message catalogs available)"""
        raise IOError(errno.ENOENT,
            "No translation file found for domain", domain)

elif not hasattr(gettext_module.GNUTranslations, "ngettext"):
    # prior to 2.3, there was no plural forms.  mix simple emulation in
    class PluralFormsMixIn:
        def ngettext(self, singular, plural, count):
            if count == 1:
                _msg = singular
            else:
                _msg = plural
            return self.gettext(_msg)
        def ungettext(self, singular, plural, count):
            if count == 1:
                _msg = singular
            else:
                _msg = plural
            return self.ugettext(_msg)
    class RoundupNullTranslations(
        gettext_module.NullTranslations, PluralFormsMixIn
    ):
        pass
    class RoundupTranslations(
        gettext_module.GNUTranslations, PluralFormsMixIn
    ):
        pass
    # lookup function is available
    translation = gettext_module.translation
else:
    # gettext_module has everything needed
    RoundupNullTranslations = gettext_module.NullTranslations
    RoundupTranslations = gettext_module.GNUTranslations
    translation = gettext_module.translation


def get_translation(language=None, domain=DOMAIN):
    """Return Translation object for given language and domain"""
    if language:
        _languages = [language]
    else:
        # use OS environment
        _languages = None
    # except for english ("en") language, add english fallback if available
    if language == "en":
        _fallback = None
    else:
        try:
            _fallback = translation(domain=domain, languages=["en"],
                class_=RoundupTranslations)
        except IOError:
            # no .mo files found
            _fallback = None
    # get the translation
    try:
        _translation = translation(domain=domain, languages=_languages,
            class_=RoundupTranslations)
    except IOError:
        _translation = None
    # see what's found
    if _translation and _fallback:
        _translation.add_fallback(_fallback)
    elif _fallback:
        _translation = _fallback
    elif not _translation:
        _translation = RoundupNullTranslations()
    return _translation

# static translations object
translation = get_translation()
# static translation functions
_ = gettext = translation.gettext
ugettext = translation.ugettext
ngettext = translation.ngettext
ungettext = translation.ungettext

# vim: set filetype=python sts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/