| """ |
| Contains various definitions common to modules acquired from 4Suite |
| """ |
| |
| __all__ = ["FtException", "get_translator"] |
| |
| |
| class FtException(Exception): |
| def __init__(self, errorCode, messages, args): |
| # By defining __str__, args will be available. Otherwise |
| # the __init__ of Exception sets it to the passed in arguments. |
| self.params = args |
| self.errorCode = errorCode |
| self.message = messages[errorCode] % args |
| Exception.__init__(self, self.message, args) |
| |
| def __str__(self): |
| return self.message |
| |
| |
| # What follows is used to provide support for I18N in the rest of the |
| # 4Suite-derived packages in PyXML. |
| # |
| # Each sub-package of the top-level "xml" package that contains 4Suite |
| # code is really a separate text domain, but they're all called |
| # '4Suite'. For each domain, a translation object is provided using |
| # message catalogs stored inside the package. The code below defines |
| # a get_translator() function that returns an appropriate gettext |
| # function to be used as _() in the sub-package named by the |
| # parameter. This handles all the compatibility issues related to |
| # Python versions (whether the gettext module can be found) and |
| # whether the message catalogs can actually be found. |
| |
| def _(msg): |
| return msg |
| |
| try: |
| import gettext |
| |
| except (ImportError, IOError): |
| def get_translator(pkg): |
| return _ |
| |
| else: |
| import os |
| |
| _cache = {} |
| _top = os.path.dirname(os.path.abspath(__file__)) |
| |
| def get_translator(pkg): |
| if not _cache.has_key(pkg): |
| locale_dir = os.path.join(_top, pkg.replace(".", os.sep)) |
| try: |
| f = gettext.translation('4Suite', locale_dir).gettext |
| except IOError: |
| f = _ |
| _cache[pkg] = f |
| return _cache[pkg] |