Changelog
=========

3.0b5 - 2009-10-14
------------------

- Optimized the getTranslations method by allowing the calling functions to
  pass in a hint about the canonical status of self. Often this is known by
  the caller and doesn't have to be determined inside the getTranslations call.
  Also optimized getNonCanonicalTranslations by extending the API of
  getTranslations with a include_canonical flag.
  [hannosch]

- Optimized the getCanonical method to avoid two identical reference catalog
  queries and just do the query once.
  [hannosch]

- Added tests for and fixed more edge cases for the reference handling.
  There's about seventeen different ways how this API can be called.
  [hannosch]

- Fixed a bug in the LanguageIndependentFields adapter. It did a whole lot of
  magic to be LinguaPlone aware, just to miss the whole point. Simple is
  sometimes better. This fixes the last reference handling test failure.
  [hannosch]

- Fixed the whole references handling. Prior it used the saved references for
  synchronization, with the effect of ignoring new refs. Now it uses actually
  the given new values and looks up them. It deals now with partly translated
  targets and non-translatable targets. Also I cleaned up this part of the
  code.
  [jensens]

3.0b4 - 2009-10-02
------------------

- Fixed a serious bug that showed itself with multi valued reference fields and
  archetypes.referencebrowserwidget. Since we render language independent
  fields on the translate_item view in view mode, their data wasn't part of the
  request anymore. Omitting a field from the request is considered equivalent
  to "delete all" by processForm. We now override _processForm to ignore
  language independent fields in processForm on canonical items. This also
  gives a bit of a speed advantage.
  [hannosch]

- LinguaPlone didn't allow manual editing of IDs. Thanks to David Hostetler
  for the patch. This closes http://plone.org/products/linguaplone/issues/70.
  [hannosch]

- Removed dubious performance optimization in tests. Don't delete the catalog.
  [hannosch]

- Removed bogus license headers from Python files. All code is owned by the
  Plone Foundation and licensed under the GPL.
  [hannosch]

3.0b3 - 2009-09-26
------------------

- Update the requirement to Plone 3.3 instead of individual packages. We don't
  test this version against former Plone versions anymore. Removed no longer
  required code for pre-Plone 3.1.
  [hannosch]

- If no item was selected in the link translations form, a random item was
  selected in the form handler. Thanks to Ichim Tiberiu for the patch. This
  closes http://plone.org/products/linguaplone/issues/204.
  [hannosch]

- Restored the proper functionality of the change language function on the
  manage_translations_form. This closes
  http://plone.org/products/linguaplone/issues/215.
  [hannosch]

- Added a simple configuration option to hide the right column on the
  translation edit form and enable it by default.
  [hannosch]

- Removed the canonical and translations cache. It was never completely save
  to use. This closes http://plone.org/products/linguaplone/issues/82.
  [hannosch]

- Added a new synchronized language vocabulary and use it for the content and
  metadata language availability. This restricts the languages in the common
  language widgets to the set of the supported languages of the site.
  [hannosch]

- Removed the unmaintained support for using the Kupu reference browser in the
  manage_translations_form.
  [hannosch]

- Fixed a deprecation warning for the isRightToLeft script, which is used in
  the translationbrower_popup.
  [hannosch]

- Removed the GlobalRequestPatch - it is no longer required.
  [hannosch]

- Removed the `not_available_lang` template. It wasn't used anymore.
  [hannosch]

- Use request negotiation by default.
  [hannosch]

- Turn on the content language negotiator by default.
  [hannosch]

- Avoid a space after the language name in the selector.
  [hannosch]

- Modernized the code of the language index export import handler.
  [hannosch]

- Refactored common functionality of the catalog exportimport handlers. Added
  automatic reindexing for newly added indexes.
  [hannosch]

- Rearranged the package documentation to the top-level of the distribution.
  [hannosch]

- Added a buildout configuration to the package for stand-alone testing.
  [hannosch]

- Fixed bad spelling in status message in translate view.
  [hannosch]

- Make sure to use the native language name in the language selector in the
  same way Plone itself does this.
  [hannosch]

- Specify an alt text on the language selector images. This closes
  http://plone.org/products/linguaplone/issues/188.
  [hannosch]

- Fixed invalid code instructions in the README. This closes
  http://plone.org/products/linguaplone/issues/207.
  [hannosch]

- Removed the long broken portlet_languages. This was a pre-Plone 3 old-style
  portlet. See http://plone.org/products/linguaplone/issues/209.
  [hannosch]

3.0b2 - 2009-09-25
------------------

- Don't forget the rest of the formvariables, when dealing with request.form.
  [tesdal]

3.0b1 - 2009-09-25
------------------

- Don't mangle request.form when allowing Unicode.
  [tesdal]

- Get default language from content parent inside portal factory.
  [tesdal]

- Added dynamic id attribute to <tr> in translate_item.cpt for easier styling.
  [jensens, hpeteragitator]

3.0a3 - 2009-09-09
------------------

- Allow Unicode in request.form.
  [tesdal]

3.0a2 - 2009-09-07
------------------

- Preserve view, template and query components when switching language
  [tesdal]

- Ensure that the LinguaPlone browser layer is more specific than the default
  in the interface __iro__ so that registrations to the LinguaPlone layer win.
  [rossp]

- Added undeclared dependency on Products.PloneLanguageTool >= 3.0.
  [hannosch]

3.0a1 - 2009-06-03
------------------

- Removed `checkVersion` check from our init method and declare a dependency
  on Plone instead.
  [hannosch]

- Changed the profile version to a simple `3`, to follow best practices of
  using simple integers for profile version numbers.
  [hannosch]

- Extended multi-lingual aware reference fields to handle multi-valued fields.
  [hannosch]

- Added test for language independent lines fields.
  [hannosch]

- Fixed the testSelector tests to work with the new default page handling.
  [hannosch]

- Cleaned up some old package metadata and converted zLOG usage to logging.
  [hannosch]

- Changed the language selector to respect default pages. We now link to the
  container of the translated default page rather than the default page itself.
  [hannosch]

- Added Language as an additional index to the uid catalog. This is required
  to get at least normal reference criteria to be able to restrict their
  selections based on the language.
  [hannosch]

- Adjust the copyField methods of the LanguageIndependentFields adapter to
  work with fields which have no accessor methods.
  [hannosch]

- Reworked the translationOf reference handling. Instead of relying on the
  normal Archetypes reference API, we digg into some of the internals to
  optimize the handling for the specific use-case we have:

  * We added Language as additional metadata to the reference catalog. To do
    so we needed to add a GenericSetup handler for the catalog to this package
    for now. This should be moved to Archetypes itself. An upgrade step for
    existing sites is available and needs to be run. The step is advertised in
    the add-on control panel of Plone 3.3 and later or available via the
    portal_setup tool in the ZMI.

    The new metadata reflects the language of the source of the reference, so
    we index the translation languages and not the canonical language. So a
    reference inside the at_references folder of a translation, stores the
    Language of that translation. It gets it via Acquisition, since neither the
    reference nor the at_references OFS.Folder has a Language function.

  * As a second step we use this new metadata to more efficiently query the
    reference catalog. In general we avoid getting the real objects where
    possible and rely on the catalog internal brains to get all relevant
    information. We also bypass getting the actual reference object and
    instead look up the source or target of the reference directly by their
    uid.

  These changes do not change external API's nor should they cause problems
  for other add-ons using the reference engine.
  [hannosch]

- Split the canonical status caching of CACHE_TRANSLATIONS into its own config
  setting via CACHE_CANONICAL.
  [hannosch]

- Fixed the language selector tests to pass in Plone 3.3.
  [hannosch]

- Removed empty translation from translate menu description.
  [hannosch, maurits]

- Added smarter handling of language independent reference fields. If a
  language independent reference field points to a target, the translations of
  that source item will point to the translations of the target and not the
  canonical target. This will only work if the translations of the target
  already exist once the reference is established. If translations of the
  target are later added, the canonical source needs to be saved again to
  adjust the references to the right translation of the target.
  [hannosch]

- Added tests for language in-/dependent reference fields.
  [hannosch]

- Allow the query keys which prevent the automatic addition of the language to
  catalog queries be configured through a NOFILTERKEYS list in config.
  [hannosch]

2.4 - 2008-12-09
----------------

- Removed `Language settings` from the `Translate into` menu. A global action
  has no place in a context specific menu.
  [hannosch]

- Remove the useless 'changeLanguage' script. In
  'manage_translations_form', use '@@translate' instead.
  [nouri]

- Allow 'id' to be passed to addTranslation/createTranslation.
  [nouri]

2.3 - 2008-11-13
----------------

- Registered NoCopyReferenceAdapter for translationOf relations on
  iterate checkout to avoid the checked out object becoming the
  translation.
  [tesdal]

- Fixed unneeded AlreadyTranslated exception during a schema update.
  A schema update saves the current value, sets the default language
  (at which point there can easily be two English translations if that
  is the default language) and restores the original value again. So
  really there is no reason for doing anything other than setting the
  value in that case.
  [maurits]

- addTranslation now returns the newly created translation.
  [wichert]

- Include the FAQ in the package description.
  [wichert]

- Refactor addTranslation: introduce adapters to determine where
  a translation should be created and to create the translation.
  [wichert]

- Add path filter in catalog view, like the non-LP version has.
  [mj]

- Ensure that translations are reindexed when processing an edit form;
  language independent fields may have been updated.
  [mj]

- Extracted ILanguageIndependentFields adapter, encapsulating the
  synchronization of language independent fields.
  [stefan]

2.2 - 2008-07-22
----------------

- LanguageIndependent fields are now shown in view mode for the translations,
  so they no longer are editable from the translations, which is how it's
  documented to behave. [regebro]

- Made the upgrade step also work on Plone 3 (GenericSetup 1.3).
  [maurits]

- Registered GenericSetup upgrade step to get rid of an old
  linguaplone_various import step.  I registered it for upgrading
  from 2.0 to 2.1 as that was when this import step was removed.  It
  is always available in portal_setup/manage_upgrades in the ZMI.
  [maurits]

- When going to the canonical translation, also switch to that
  language.  [maurits]

- On the manage_translations page do not show the form for linking to
  other content or deleting/unlinking existing translations when the
  current context is not the canonical language.  Instead add a url to
  that canonical language.  [maurits]

- When adding a translation, do not throw an error when the language
  does not exist, but display that as info and go to that existing
  translation.  I saw the 'add translation' option still for an
  already translated language, due to some caching.  [maurits]

- Ignore back reference when it is None.  [maurits]

- Made sure that an existing FieldIndex Language gets correctly
  replaced by our wanted LanguageIndex, instead of leaving an unusable
  index with an empty indexable attribute.  [maurits]

- Check if plone.browserlayer is installed before starting a possibly
  long reindex that would then be aborted.  [maurits]

- Make tests run on Plone 3.0.6 with plone.browserlayer 1.0rc3 and
  original GenericSetup (1.3) next to simply Plone 3.1.  [maurits]

2.1.1 - 2008-05-01
------------------

- Removed the dependency on the no longer existing plone.browserlayer
  GS profile. This closes http://dev.plone.org/plone/ticket/8083.
  [hannosch]

- Add a workaround Plone bug #8028 (http://dev.plone.org/plone/ticket/8028)
  which causes site errors in contexts without a portal_type, such as
  the portlet add form.
  [wichert]

2.1 - 2008-04-11
----------------

- Use our language selector viewlet for all content types instead of just
  translatable types. This makes things consistent for all types.
  [wichert]

- Be more tolerant in unindexing non-existent content.
  [hannosch]

- Allow languages to be unselected in the language control panel.
  [wichert]

- Do not use LanguageDropdownChoiceWidget for the default language field
  in the control panel: LanguageDropdownChoiceWidget uses
  IUserPreferredLanguages, which does not use the proper vocabularies to
  find the language names.
  [wichert]

2.1beta1 - 2008-04-07
---------------------

- Register the LanguageIndex with the selection widget, so you can query
  for languages in Collections.
  [hannosch]

- Enable the Plone language portlet and change its rendering link
  correctly to translations if they exist and to the site root
  otherwise.
  [wichert]

- Dont depend on Quickinstaller at setup time and in browsermenu.
  [jensens]

- Minor GenericSetup cleanup
  [jensens]

- Make LinguaPlone play nice with archetypes.schemaextender and
  similar approaches.
  [jensens]

- Declare plone.browserlayer as a dependency in our GenericSetup profile.
  This will automatically install it in Plone 3.1.
  [wichert]

- Better unlink handling. This fixes
  http://plone.org/products/linguaplone/issues/127
  [wichert]

2.1alpha1 - 2007-12-13
----------------------

- Refuse to install LinguaPlone of plone.browserlayer is not already
  installed.
  [wichert]

- Register the PloneLanguageTool GenericSetup export/import steps in
  LinguaPlone as well.  Standard Plone 3 installs never applied the
  PloneLanguageTool GenericSetup context, so without this
  portal_languages.xml would be ignored.
  [wichert]

- Replace the standard Plone language control panel with our own version
  which allows enabling of multiple languages.
  [wichert]

- Manage translations form now uses a kupu drawer when the kupu
  reference browser is enabled. [Duncan]

- Actions from the manage translations screen now stay on that
  screen so multiple translations may be linked. Existing
  translations display their path. [Duncan]

2.0 - 2007-10-11
----------------

- When creating new content in a translated parent use the language of
  the parent as the default language.
  [wichert]

- Try to unlock objects before moving them into a newly translated folder.
  [wichert]

- Add a test in the GS various import step if the Language catalog index
  in portal_catalog has indexed any objects. If not we just (re)created
  the index and we need to reindex it. This fixes content disappearing
  after installing LinguaPlone.
  [wichert]

- Remove the code to mark LinguaPlone as installed in the quickinstaller
  from the GS profile: we can install LinguaPlone through the quickinstaller
  itself so this is not needed.
  [wichert]

2.0beta2 - 2007-09-24
---------------------

- Fix a syntax error in the translate_item template.
  [wichert]

- Restructure the LinguaPlone product layout so it can be distributed
  as an egg.
  [wichert]

2.0beta1 - 2007-09-21
---------------------

- Allow translating the default view for an untranslated container
  again: we have correct code that adds a translation of the container
  as well now.
  [wichert]

- Correct creationg of translations for objects which are the default
  view of a non-translatable parent.
  [wichert]

- Correct handling of the translate into-menu for content with an
  untranslatable parent.
  [wichert]

2.0alpha2 - 2007-09-19
----------------------

- Only show the content menu if LinguaPlone is installed in the quick
  installer.
  [wichert]

- Update functional tests to login as a member so the test can use unpublished
  content.
  [mj]

- Disable the menu option to translate the default view for a folder to a
  language for which the folder has no translation.
  [wichert]

2.0alpha1 - 2007-09-10
----------------------

- Use a GenericSetup profile to install LinguaPlone.
  [wichert]

- Move createTranslations to a @@translate browser view.
  [wichert]

- Port to Plone 3.0.1.
  [wichert]

- Only allow linking to other objects of the same portal type.
  [wichert]

- Add a sanity to prevent addTranslationReference from adding translations
  for languages which already have a translation.
  [wichert]

- Policy change for language selector. We try to avoid disabled flags by
  looking for a translated parent.
  [fschulze]

- Added UI to link translations together.
  [vlado, fschulze]

- Changed to use _createObjectByType on addTranslation, bypassing possible
  conflicts with adding restrictions.
  [deo]

1.0.1 - 2007-09-24
------------------

- Fix spitLanguage to return (None, None) when fed a non-string object.
  This fixes LP issue #101.
  [mj]

- Fix LanguageIndex to deal better with objects where Language is either
  missing or not a callable. Fixes LP issue #99.
  [mj]

- Fix LanguageIndex to run on python 2.3.
  [wichert]

- Fix language selector to not go the the login screen if one of the
  translations is not accessible (i.e. in "private" state)
  [fschulze, godchap]

1.0 - 2007-06-19
----------------

- If we are resetting the language due to a schema update do not delete the
  translation references. This fixes
  http://plone.org/products/linguaplone/issues/7
  [wichert]

- Removed Plone 2.0 compatibility.
  [fschulze]

- Add a utility method to link content objects as translations. This
  is useful, for example, in a GenericSetup import step to link content
  created in a GenericSetup content step.
  [wichert]

- Show the 'Switch language to' text in the language selector in the
  target language instead of the current language.
  [wichert]

- Fixed so rename after creation only happend on TTW creation. Not on
  first edit of a through script created object.
  [sashav]

- Fixed an issue if theres no getTranslations available. This happens if
  an non-lp-enabled at-based object exists direct in portal-object.
  [jensens]

- Fixed some code that spit out DeprecationWarnings.
  [hannosch]

- Instead of customizing switchLanguage we now have portlet_languages
  inside LinguaPlone and use the much nicer languageSelectorData.
  [jladage]

- LanguageIndex is now a specialised index that will return alternative
  translations within the main language when searching.
  [mj]

0.9.0 - 2006-06-16
------------------

- Now works with Plone 2.5 out-of-the-box, and Plone 2.1.3 if using the
  included PloneLanguageTool.

- Fixed unicode error on translated languages in Plone 2.1.3. It can
  contains non-ascii characters, so the default strings need to be
  declared as unicode.
  [encolpe]

- Fixed actions to fallback gracefully for the action attribute 'name'
  and 'title'.
  [jladage] [encolpe]

- Added the switchLanguage.py script and added support for translatable
  content.
  [jladage]

- Fixed to lookup the language flag name directly from the language tool.
  Now, PloneLanguageTool 1.3 (or greater) is officially required.
  [deo]

- Made tests compatible with Plone 2.5.
  [hannosch]

- Some very minor i18n fixes.
  [hannosch]

- Added a migration script to update language independent fields content.
  It *must* be manually run when upgrading from versions older than 0.9.
  [deo]

- Removed the custom accessor/editAccessor generation. We're only using
  custom mutators and translation mutators for now. This result in a ~30%
  performance improvement over the previous versions.
  [deo]

- Made sure to copy independent language fields data to all translations
  as we removed the custom accessor. This also fixed the problem when
  you try to get values direct from fields, as now the data is in the
  translations too, not only in the canonical object.
  [deo]

- Forwared fix for http://dev.plone.org/plone/ticket/4939.
  [deo]

- Fixed a problem when switching between translations of images/files,
  where the content was shown, instead of the view screen.
  [deo]

- Fixed to highlight the 'Edit' tab from a translation when you click it.
  [deo]

- Final cut on Plone 2.0 compatibility. Backported tests, handled
  migrations and patched tool with the PythonScripts content.
  [deo] [sidnei]

- Added labels to language-independent fields.
  [deo] [limi]

- Made the initial default language follow the PloneLanguageTool config
  policy.
  [deo]

0.9-beta - 2005-10-27
---------------------

- Removed content border from Translation Unavailable template.
  [limi]

- Made the test fields that are not editable render in view mode, not as
  non-editable text boxes. The reasons for this are that people tend to
  think that "if it is a text box, it's editable", and are then confused
  when it's not (read-only widgets confuse the heck out of users), and the
  other reason is because it messes up multiple selection lists.
  [limi]

- Made language-independent items not editable in a translation.
  [limi] [deo]

- Added first cut on Plone 2.0 compatibility.
  [deo]

- Fixed i18n domain everywhere... :-)
  [deo]

0.8.5 - 2005-09-06
------------------

- Made content be created in neutral language, now that this concept
  works as expected.
  [deo]

- Made addTranslation raise an AlreadyTranslated exception when trying
  to duplicate a translation.
  [deo]

- Added form to create translation when the language don't exist and
  if the user has the appropriate permissions.
  [deo]

- Title on the flag switcher should say: "Switch language to $LANGUAGE
  (content translation not available)" - the last part if the content
  is not translated, to complement the ghosting (which is purely visual,
  and bad for accessibility).
  [deo]

- Split screen should change sides ("From" language to the left, "To"
  language to the right).
  [deo]

- Split screen should not show short name if turned off (like the
  default is in 2.1).
  [deo]

- Flags aren't on a separate line anymore (they used to be below the
  document actions).
  [limi]

- Field titles are translated, field help is not.
  [deo]

- Flags should probably be removed from the field titles, since the
  pulldown might make these misleading.
  [deo]

- Split-screen pulldown needs language selectors when translating.
  [deo]

- Use the translate_item template when editing translatable content,
  except the canonical one.
  [deo]

- PloneLanguageTool has problems without LinguaPlone installed.
  [deo]

- Added norwegian translation.
  [limi]

- Improved i18n markup. Updated brazilian portuguese translation.
  [deo]

0.8 - 2005-08-15
----------------

- Plone __browser_default__ review.
  [deo]

- Adjust LP catalog patch for Plone 2.1.
  [stefan]

- Allowed changing language of content, moving content to appropriate
  place, and raising a exception when forbidden.
  [deo]

- Design the policy for the New language negotiator.
  [limi]

- Grayed out flags.
  [deo, limi]

- Handle switching to non-existing language (a.k.a. not_available_lang).
  [deo]

- Handle translation of default pages.
  [deo]

- Added hasTranslation() method for grayed-out flags.
  [deo]

- ID policy for translating containing folder and moving translated content.
  [limi]

- Language switching: the URL on flags should be the actual URL, not
  switchLanguage?set_language=no.
  [deo]

- Fixed languageswitcher in Firefox.
  [deo]

- LinguaPlone should not append language code to ID, it should use
  the same Plone 2.1 policy.
  [deo]

- Implemented the new language negotiator, where content and interface
  languages are always in sync.
  [deo]

- Test that Images in ATCT are keeping the image LangIndependent.
  [limi]

- Update dropdown menus markup.
  [deo]

0.7 - 2004-09-24
----------------

- Released at Plone Conference 2004.
  [limi] [testal] [geir]

Technology Preview - 2004-06-29
-------------------------------

- First publicly available version.
  [limi] [testal] [geir]
