1.3.4 - Released December 13, 2006

    Changed translate method of PTS to return Unicode by default. This was
    needed for Plone 2.5 in order to get a sensible behaviour with the
    FiveTranslationService. This release is probably not compatible with
    Plone 2.1.
    [hannosch] 

1.3.3 - Released September 29, 2006

    Provided some more nice fallback in the interpolate function for situations
    where you mixed encoded strings or unicode in the mapping dict compared to
    the text itself. We handle utf-8 encoded strings gracefully in all cases now.
    [hannosch]

1.3.2 - Released September 8, 2006

    Made the logging of broken message catalogs more verbose. Now both the
    filename and path are logged, so you actually have a chance of finding those
    files. Thx limi for the suggestion.
    [hannosch] 

    Fixed bugs in interpolate function, where mixing of Unicode and encoded
    strings failed, when the Unicode string contained only ASCII characters.
    This will work now. Nonetheless you should update your code to use Unicode
    internally, as support for translating non-Unicode strings will go away once
    we switch to a Zope3-based TranslationService.
    [hannosch]

1.3.1 - Released June 1, 2006

    Also apply our evil hack that allows mixing utf-8 encoded strings and
    Unicode to the Zope3 versions of pagetemplate and talinterpreter, so current
    Plone works under Zope 2.10. Note that PTS is slated for destruction and you
    should really start to update all your code to use Unicode internally and
    especially for output through TAL.
    [hannosch]

1.3.0 - Released May 15, 2006

    Fixed another problem in the interpolate function, where variables where not
    replaced if the string was an old-style normal string and not unicode.
    This closes http://dev.plone.org/plone/ticket/5509.
    [hannosch]

    Fixed a UnicodeDecodeError bug in the interpolate function, when a mapping
    or the text was Unicode but the other one was not. The function excepts only
    Unicode as both the text and for all entries of the mapping, as it has no
    way to guess the encoding of any of them.
    [hannosch]

    Sanitized the interpolate function. It had various major bugs and was just
    unbelievable slow. This closes http://dev.plone.org/plone/ticket/5421.
    [hannosch]

    Removed OpenTal support in anticipation of having to support Zope3 zope.tal
    for Zope 2.10. We don't want to support three tal implementations ;)
    [hannosch]

    Big general spring cleaning. Moved to logging module instead of zLOG. The
    logging module is included in Python starting with 2.3. Running an older
    version of Python is therefore not supported anymore. This goes likewise for
    Zope < 2.7.
    [hannosch]

    Include the filename of the po in the missing-domain error message
    [wichert]

1.2.7 - Released March 19, 2006

    Fixed a bug in msgfmt.py noted by Andrey Lebedev. All comments starting with
    '#,' where treated as fuzzy.
    [hannosch]

    Fixed a bug where the translation service would return None for a
    translation, when it could not find one and the default was None. Changed to
    use the msgid instead. This has happened for all Zope3 Messages which have
    no default text.
    [hannosch] [alecm]

    Added test to show that dtml translation is broken, see
    http://dev.plone.org/plone/ticket/4895.
    [hannosch]

    Do not reset the PTS_IS_RTL flag in a request if it is already set. 
    http://dev.plone.org/plone/ticket/4631
    [wichert]

1.2.6 - Released February 25, 2006

    Removed some Python 2.1 BBB and unused code.
    [hannosch]

    Removed home-grown MessageID implementation. Using Zope 3 MessageID's is now
    possible with Zope 2.8 / Five 1.1 or Zope > 2.9.
    [hannosch]

    Moved changes.txt from doc subfolder to main folder and renamed it to
    HISTORY.txt to comply to the standard layout.
    [hannosch]

    Changed standard logging level to BLATHER instead of INFO so the startup
    process isn't bombarded with useless messages.
    [hannosch]

    Added a environment variable "DISABLE_PTS" to entirely disable
    loading of translation files and registration of PTS as a
    translation service without removing the product from the
    'Products' directory. HINT: One easy way to set environment
    variables is to use the <environment> 'zope.conf' directive.
    [dreamcatcher]

1.2.5 - 2005-12-06

    Fix problems with folder layout where INSTANCE_HOME.startswith(ZOPE_HOME)
    is True, as reported in http://plone.org/collector/4983. Thanks to ymahe for
    the patch, which I have slightly modified.
    [hannosch]

1.2.4 - 2005-11-16

    Removed some Python 2.1 compatibility code and added first very basic test
    for loading po files
    [hannosch]

    Made some filesystem access code a bit more robust by additionally catching
    OSErrors. This fixes http://plone.org/collector/4824.
    [hannosch]

    Increased class version again and wrote test to ensure matching class
    version and version in version.txt
    [hannosch]

1.2.3 - 2005-10-17

    Fixed http://plone.org/collector/4799 - upgrade from 2.1 to 2.1.1 breaks all
    message catalogs. We now increment the internal class version of PTS, which
    will result in a recreation of the translation_service object in the ZODB,
    so all contained internal poFile objects get removed and freshly recreated
    [hannosch]

1.2.2 - 2005-10-08

    Replaced storing the persistent PTS at the module level in __init__.py
    with a PTSWrapper object.  Added isRTL method to PTSWrapper.  Should
    fix the connection issues.
    [alecm]

    merged missing fix from the 1.0 branch. It's changelog entry was:
    "Fixed issue with multiple ZEO clients at differen filesystem locations."
    This was done by longsleep on Feb 9, 2005
    [hannosch]

1.2.1 - 2005-08-07
    
    fresh tarball for Plone 2.1rc2 (without .svn directories)
    [batlogg]
    
    added greek translation [thx to Nikos Papagrigoriou]
    [hannosch]

1.2.0 - 2005-07-28

    Purge mo file cache when PTS is recreated
    [tiran]

1.2-rc3

    Fixed id generation for po files located in the "locales" directory
    [tiran]

    Added a mo file cache which is storing the compiled files in
    INSTANCE_HOME/var/pts/${catalog_id}.mo
    [tiran]

1.2-rc2

    ...

1.2-rc1 - 2004-09-08

    New feature RTL support and RTL api for right to left languages. Po files
    may contain a header called X-Is-RTL with either yes, y, true or 1 for a
    rtl language or no, n, false, 0 for a ltr language (default value). The 
    product module also contains a new method isRTL which is available TTW.

1.1-rc1 - 2004-07-15

    New feature msgid tracker (thanks to ingeniweb):

      It's tracking untranslated msgids inside the PTS. You can easily download
      them as po file. See ZMI for more informations
      
    Set MessageCatalog isPrincipiaFolderish to false to avoid infinite recursion
    of dtml-tree inside the ZMI.

1.0-rc8

    This version is no longer a fork, but is the official version now. 
    Thanks to Lalo Martins for his tireless efforts in writing the 
    original product.

    Disabled usage of SESSION

    Re-enabled .missing logging

    Added documentation section, including details of how to use
    .missing logging to generate .pot files

1.0fork-rc7 - 2004-05-11

    Reenabled getRequest patch to avoid some ugly problems

1.0fork-rc6 - 2004-05-05

    Cleaned up all python files, realigend the code and removed spaces

1.0fork-rc5 - 2004-04-22

    Changed logging to get use the methods and vars from utils.py

    Cleaned up the imports an seperate them into python, zope and PTS imports

    Removed the dependency and auto loading of the get_request patch. Now it's
    loaded only when using the MessageID module, when applying unicode to
    FasterStringIO (shouldn't happen!) or as fallback when PTS can't get a valid
    context (REQUEST).
    The last two cases will break the first time after a (re)start of zope. If
    your software depends on get_request() apply the patch manually::

        from Products.PlacelessTranslationService.PatchStringIO import applyRequestPatch
        applyRequestPatch()

    NOTE: FOR THIS RELEAE THE get_request PATCH IS ENABLED BY DEFAULT!

    Better debugging message for PoSyntaxErrors

1.0fork-rc4 - 2004-04-05

    Changed po file id creation:
     - id is MyProducts.i18n-pofile or MyProducts.locales-pofile 
       for po files loaded from a product directory
     - id is GlobalCatalogs-pofile for po files loaded from
       INSTANCE_HOME/i18n/
    
    Always append fallback catalogs to the catalogs
    used for translation

    Support INSTANCE_HOME/locales/
    
    Move GlobalCatalogs from INSTANCE_HOME/i18n/ and
    INSTANCE_HOME/locales/ to the beginning of the
    catalogs used for translation

    Cache catalog names in the REQUEST using the domain and language as key

1.0fork-rc3 - 2004-03-09

    Added a product identifier to the control panel catalog id
    to allow same po filenames in different locations:
      - Catalog its are now like Products.CMFPlone.i18n.plone-de.po
      - Catalogs not coming from a Product (eg from INSTANCE_HOME)
        are named like before (plone-de.po)
 
    fixed collector issue #910529
    thanks to Nicolas Ledez for the report and the patch

1.0fork-rc2 - 2004-03-01

    Fixed bug in FasterStringIO that added new lines to the output

    Added zope 3 like locales directory support:
      Products/MyProduct/locales/${lang}/LC_MESSAGES/${domain}.po

1.0fork-rc1 - 2004-02-11

    Fixed minors problems with python 2.1 compatibility

1.0fork-beta5 - 2004-02-03

    Added utranslate method

    Added negotiator chains and two new easy negotiators

    Added zope 3 like MessageID and MessageIDFactory

    Updated API and cleaned up code:
      - added security to classes
      - moved some classes to utils.py to avoid method level imports
      - added getTranslationService() method to get the PTS instance
        in other products

1.0fork-beta4 - 2004-01-28

    Read all files with "rb" in msgfmt.py

    Display broken Message Catalogs in ControlPanel as "broken"

    Synced with these latest PTS changes from savannah:
      - added as_unicode argument to translate
      - cleaned up msgfmt.py

1.0fork-beta3 - 2004-01-07

    Added a builtin mo compiler based on the msgfmt tool from the python source
    package. No need to compile the po files to mo files. Thanks to
    Christian 'Tiran' Heimes <tiran@cheimes.de>

    No longer load mo files on startup. Catalogs are automatically compiled.

1.0fork-beta2 - 2003-11-24

    No longer register a persistent service to zope translation
    service registry. Instead wrap PTS with a non persistent class

    Added a de (German) translation for PTS ZMI

    Reimplemented hook to register own negotiaton method into 
    Negotiator which was stripped out in 1.0beta1 (now works
    with PloneLanguageTool again)

    Python 2.1 compatibility

1.0beta1 - 2003-10-??

    Internationalized our own page templates (for ZMI) and added a
    pt_BR translation

    Generalized the Negotiator so that it may negotiate any header in
    the "accept" format

1.0alpha2 - 2003-09-26

    Some primitive DTML support

    Fixed persistence issues that were arising from having the same
    object stored in the ZODB and in a module-level global var (thanks
    to Sidnei)

1.0alpha1 - 2003-08-27

    Removed dependency from PAX

    Now PTS looks for an "i18n" subdirectory under each Product
    package, which makes it easier to package/install i18n-aware
    products.  The i18n dir on INSTANCE_HOME is still kept, you can
    use it for local overrides

    Improvements on the ZMI usability

0.5 - 2003-03-31

    Now we have a ZMI (Zope Management Interface) in Zope's Control
    Panel.  You can use it to refresh catalogs without restarting, and
    to test installed catalogs

    Some functions at module-level are exported for use in Python
    Scripts and Page Templates (Open or Z): negotiate(), translate(),
    getLanguages(), getLanguageName()

    Added a "hotfix" to StringIO that should make PTS work with ZPT
    without UnicodeError being raised constantly

0.4 - 2003-02-03

    Relicensed to GPL

    Now it really works with ZPT (thoroughly tested)

    If used with OpenPT, it will use the output encoding negotiation
    hooks

    Negotiator now uses a cache (stored in the request) to speed
    things up

    Can now use multiple catalogs for the same domain (but the order
    in which they are checked is a bit randomic)

    Special thanks to Magnus Heino for the ZPT support hints and
    patches

0.3 - 2003-01-02

  This release marked the split of PlacelessTranslationService into
  its own package, and the initial attempts at making it compatible
  with ZPT.

0.2 - 2002-09-22

  Updated release

0.1 - 2002-08-24

  Initial release
