plone.app.multilingual


Nameplone.app.multilingual JSON
Version 8.1.1 PyPI version JSON
download
home_pagehttps://github.com/plone/plone.app.multilingual
SummaryMultilingual Plone Content package
upload_time2024-02-27 16:11:01
maintainerPlone Foundation
docs_urlNone
authorRamon Navarro, Victor Fernandez de Alba, awello et al
requires_python>=3.8
licenseGPL
keywords language multilingual content
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. contents::


Introduction
============

In the old days before Plone 4.3, talking about multi-language support in Plone was talk about Products.LinguaPlone. It has been the *defacto* standard for managing translations of Archetypes-based content types in Plone through the years. Somehow its functionality never made its way into the Plone core and today it is in legacy status. Nowadays, Plone faces the rising of Dexterity content types and its adoption into the core since Plone 4.3. With Plone 5 released, the transition is completed and Dexterity is shipped as its default content type story.

plone.app.multilingual was designed originally to add a whole multilingual story to Plone. Using ZCA technologies, it enables translations to Dexterity and Archetypes content types managed via a unified UI.

This module provides the user interface for managing content translations. It's the app package of the next generation Plone multilingual engine. It's designed to work with Dexterity content types and the *old fashioned* Archetypes based content types as well. It only works with Plone 4.1 and above due to the use of UUIDs for referencing the translations.

After more than 7 years, a GSOC, redesigns, reimplementations due to deprecated libraries and two major Plone versions we are finally able to say that plone.app.multilingual has arrived.


Versions
========

* ``1.x`` - Plone 4.x with Archetypes and Dexterity

* ``2.x`` - Plone >= 4.x, < 5.0 with plone.app.contenttypes (Dexterity) and
  real shared content

* ``3.x`` - Plone >= 5.x.  3.0.17 will likely be the latest release on this branch.  You are encouraged to use 4.x.

* ``4.x`` - Plone >= 5.x (5.0.3 minimum, due to GenericSetup dependency)


Components
==========

PAM is composed of two packages. One is mandatory:

* plone.app.multilingual (core, UI, enables Dexterity support via a behavior)

and one optional:

* archetypes.multilingual (enables Archetypes support)


Usage
=====

To use this package with both Dexterity and Archetypes based content types you should add the following line to your *eggs* buildout section::

    eggs =
        plone.app.multilingual[archetypes]

To use this package with plone.app.contenttypes you should add the following line to your *eggs* buildout section::

    eggs =
        plone.app.multilingual


Setup
=====

After re-running your buildout and installing the newly available add-ons, you should go to the *Languages* section of your site's control panel and select at least two or more languages for your site. You will now be able to create translations of Plone's default content types, or to link existing content as translations.


Features
========

These are the most important features PAM provides.


Root Language folders
---------------------

After the setup, PAM will create root folders for each of your site's languages and put translated content into the appropriate folders. A language folder implements INavigationRoot, so from the user's point of view, each language is "jailed" inside its corresponding language folder. There are event subscribers in place to capture user interaction with content and update the language in contents accordingly, for example when a user moves or copies content between language folders.


Babel view
----------

An evolution of the LP *translate* view, unified for either Archetypes and Dexterity content types. It features an already translated content viewer for the current content being edited via an ajaxified dynamic selector that shows them on the fly on user request.


Language independent fields
---------------------------

PAM has support for language independent fields, but with a twist regarding the LP implementation. As PAM's design does not give more relevance to one translated object than to its siblings (has no canonical object), fields marked as language independent are always copied over to all members of the translation group. The PAM UI will remind you about this behavior by warning you that the values in the corresponding field of all members of the translation group will be overwritten.


Translation locator policy
--------------------------

When translating content, the policy influences how the translated content will be placed in the site's structure. There are two policies to choose from:

* LP way, the translation gets placed in the nearest translated folder in the parent's hierarchy
* Ask user where to place the translated element in the destination language root folder


Language selector policy
------------------------

While browsing the site, the language selector viewlet allows users to switch the site's content language. There are two policies in place in case the translation of a specific language does not exist (yet):

* LP way, the selector shows the nearest translated container.
* Shows the user an informative view that shows the currently available translations for the current content.


The assets folder - a shared "Language Independent Folder"
----------------------------------------------------------

The root language folders are used to house the content tree for the corresponding language. However, there are some use cases where we need content that does not belong to any language. For example, for assets or side resources like images, videos and documents. For this reason PAM supplies a special Language Independent Folder to house these kind of objects. After PAM setup, there is a special folder called "Assets" (folder title may depend on the language), which can be accessed through the "Go to Assets folder" item of the "Translate" menu. All items placed in this folder will have neutral as their default language and will be visible from the other root language folders as if they were placed there as well.

Note:
    * Language Independent Folder's have also been historically known as "Neutral root folder", "language neutral folder" and "language shared (folder)".
    * Also don't confuse Language Independent Folders with Language Independent Fields
    * The Language Independent Folder formerly known as ``Media`` folder, was renamed to the more generic name ``Assets`` (the name may depend on the language).


Translation map
---------------

In order to ease the translation tasks, we devised a tool that displays in a useful way all the current translated objects and its current translation information. The map also shows a list of missing translations in case you want to build a *mirrored* (completely) translated site.


Google Translation Service integration
--------------------------------------

If you are subscriber of the Google Translation service (a paid service), you can setup your API key on *Languages* site setup. Then, you will notice a new icon in the babel view that takes the original field on the left side and using Google Translations service, translates its contents and fill the right side field.


LinguaPlone migration
---------------------

You can migrate your existing LP powered sites to PAM using the *Migration* tab in the *Languages* control panel. The migration has been divided into 4 steps for separation of concerns and for improving the success of each of the required procedures.


Step 0 (optional) - Reindex the language index
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The migration of LinguaPlone content depends on an up-to-date Language index. Use this step to refresh this index. **Warning:** Depending on the number of items in your site, this can take a considerable amount of time. This step is not destructive and can be executed as many times as needed.


Step 1 - Relocate content to the proper root language folder
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This step will move the site's content to its correspondent root language folder and previously will make a search for misplaced content through the site's content tree and will move them to its nearest translated parent. **Warning:** This step is destructive as it will alter your content tree structure. Make sure you have previously configured your site's languages properly in the 'Site Languages' tab of the 'Languages' control panel. It's advisable that you do not perform this step on production servers having not tried it in development/preproduction servers previously. Depending on the distribution of your site's content and the accuracy of the language information on each content object you may need to relocate manually some misplaced content after this step. Despite the fact that this step is 'destructive' it can be executed as times as needed if some problem is detected and afterwards you fix the problem. Please, refer to the procedure log when it finishes.


Step 2 - Transfer multilingual catalog information
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This step will transfer the relations between translations stored by LinguaPlone to the PAM catalog. This step is not destructive and can be executed as many times as needed.


Step 3 - Cleanup after migration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This step will search and fix some lost dependencies to the ITranslatable interface hidden in the relation catalog and it gets rid of them. It must be run only when LinguaPlone is already uninstalled, so this step is hidden until then.


Marking objects as translatables
================================

Archetypes
----------

By default, if PAM is installed, Archetypes-based content types are marked as translatables


Dexterity
---------

Users should mark a dexterity content type as translatable by assigning a the multilingual behavior to the definition of the content type either via file system, supermodel or through the web.


Marking fields as language independent
======================================

Archetypes
----------

The language independent fields on Archetype-based content are marked the same way as in LinguaPlone::

    atapi.StringField(
        'myField',
        widget=atapi.StringWidget(
        ....
        ),
        languageIndependent=True
    ),

.. note::

    If you want to completely remove LinguaPlone of your installation, you should make sure that your code are dependent in any way of LP.


Dexterity
---------

There are four ways of achieve it.


Directive
~~~~~~~~~

In your content type class declaration::

    from plone.app.multilingual.dx import directives
    directives.languageindependent('field')


Supermodel
~~~~~~~~~~

In your content type XML file declaration::

    <field name="myField" type="zope.schema.TextLine" lingua:independent="true">
        <description />
        <title>myField</title>
    </field>


Native
~~~~~~

In your code::

    from plone.app.multilingual.dx.interfaces import ILanguageIndependentField
    alsoProvides(ISchema['myField'], ILanguageIndependentField)

Through the web
~~~~~~~~~~~~~~~

Via the content type definition in the *Dexterity Content Types* control panel.


Internal design of plone.app.multilingual
=========================================

All the internal features are implemented on the package plone.app.multilingual.

The key points are:

1. Each translation is a content object
2. There is no canonical object
3. The translation reference storage is external to the content object
4. Adapt all the steps on translation
5. Language get/set via an unified adapter
6. Translatable marker interface(s)


There is no canonical content object
------------------------------------

Having a canonical object on the content space produces a dependency which is not orthogonal with the normal behavior of Plone. Content objects should be autonomous and you should be able to remove it. This is the reason because we removed the canonical content object. There is a canonical object on the translation infrastructure but is not on the content space.


Translation reference storage
-----------------------------

In order to maintain the relations between the different language objects we designed a common object called a *translation group*. This translation group has an UUID on its own and each object member of the group stores it in the object catalog register. You can use the ITranslationManager utility to access and manipulate the members of a translation group given one object of the group.


Adapt all the steps on translation
----------------------------------

The different aspects involved on a translation are adapted, so it's possible to create different policies for different types, sites, etc.

``ITranslationFactory``
    General factory used to create a new content

``ITranslationLocator``
    Where we are going to locate the new translated content

    Default : If the parent folder is translated create the content on the translated parent folder, otherwise create on the parent folder.

``ITranslationCloner``
    Method to clone the original object to the new one

    Default : Nothing

``ITranslationIdChooser``
    Which id is the translation

    Default : The original id + lang code-block

``ILanguageIndependentFieldsManager``
    Manager for language independent fields

    Default: Nothing


Language get/set via an unified adapter
---------------------------------------

In order to access and modify the language of a content type there is a interface/adapter::

    plone.base.interfaces.ILanguage

You can use::

    from plone.base.interfaces import ILanguage
    language = ILanguage(context).get_language()

or in case you want to set the language of a content::

    language = ILanguage(context).set_language('ca')


Translatable marker interface
-----------------------------

In order to know if a content can be translated there is a marker interface::

    plone.app.multilingual.interfaces.ITranslatable


Source Code
===========

Contributors please read the document `Process for Plone core's development <https://docs.plone.org/develop/coredev/docs/index.html>`_

Sources are at the `Plone code repository hosted at Github <https://github.com/plone/plone.app.multilingual>`_.


License
=======

GNU General Public License, version 2

Credits
=======

plone.app.multilingual has been developed based on LinguaPlone by:

Design and development --
  Iskra_ (Ramon Navarro Bosch, Victor Fernandez de Alba)

.. _Iskra: http://www.iskra.cat

Additional funding/sponsorship:
  Hitotsubashi University in Tokyo, Centre for New European studies
  (Jonathan Lewis)

Also many thanks to

Jan-Carel Brand:
   For language independent field implementation on AT

Anne Walter:
   For pushing for a initial working version

Thomas Massmann, Martijn Pieters, Martin Aspeli, David Glick

Changelog
=========

.. You should *NOT* be adding new change log entries to this file.
   You should create a file in the news directory instead.
   For helpful instructions, please see:
   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst

.. towncrier release notes start

8.1.1 (2024-02-27)
------------------

Bug fixes:


- Add missing translate icon for the menu. [szakitibi] (#447)


8.1.0 (2024-01-31)
------------------

New features:


- Implement a more reasonable default for "connect translations" dialog.
  [gogobd] (#445)


8.0.3 (2024-01-18)
------------------

Internal:


- Update configuration files.
  [plone devs] (dd37b9f9)


8.0.2 (2023-12-14)
------------------

Bug fixes:


- Fixing placement of save and cancel buttons by not having javascript screw up their position (#435)
- Fixing disconnection of translations [gogobd] (#437)


Internal:


- Removed obsolete deprecation warning. (#440)


8.0.1 (2023-08-31)
------------------

Bug fixes:


- Fix setting Indonesian language cookie on site root: must be ``id``, not ``id-id``.
  [maurits] (#304)


8.0.0 (2023-07-14)
------------------

Breaking changes:


- Make a core add-on by adding `Products.CMFPlone` to package dependencies.
  [@folix-01] (#417)


Bug fixes:


- Do not unset the language on the Indonesian root language folder when saving the control panel.
  This language has ``id`` as code.  This is not allowed as an id in Plone, so it is created as ``id-id`` instead.
  This needs some special handling.
  Added upgrade to recursively fix this language folder to set the Indonesian language.  This is only done when the folder itself has the wrong language.
  [maurits] (#304)
- Root language switcher: redirect to ``id-id`` if the Indonesian language is preferred.
  [maurits] (#304)
- Fix ``set_recursive_language`` to actually find child objects.
  [maurits] (#304)


7.0.1 (2023-04-15)
------------------

Internal:


- Update configuration files.
  [plone devs] (11f0db91)


7.0.0 (2023-04-06)
------------------

Breaking changes:


- Move language independent field declarations from plone.app.event to this package.
  This prepares this package to be used as a real core addon.
  [jensens] (414-paevent)


6.0.2 (2023-03-22)
------------------

Bug fixes:


- Use plone.base imports. Removes deprecation warnings.
  [jensens] (#411)
- Update old view methods and layouts from LIF/LRF type definitions and instances.
  For example, in Plone 6 ``folder_summary_view`` is no longer available: use ``summary_view`` instead.
  [maurits] (#1001)


6.0.1 (2023-03-14)
------------------

Bug fixes:


- When an item is modified, only copy language-independent field values to translations if they have changed. [davisagli] (#408)
- Resolve deprecation warnings (plone.base).
  Get rid of a Archetypes leftover.
  [jensens] (#410)


6.0.0 (2022-12-02)
------------------

Bug fixes:


- Final release for Plone 6.0.0. (#600)


6.0.0b3 (2022-09-07)
--------------------

Bug fixes:


- Grant the "plone.app.multilingual: Manage Translations" permission to the Site Administrator role.
  This change is not applied automatically to existing sites. You can apply it manually using
  the /manage_access view of the Plone site, or using rolemap.xml in a GenericSetup profile.
  [davisagli] (#405)


6.0.0b2 (2022-08-30)
--------------------

Bug fixes:


- Fix installation to preserve existing order of behaviors. [davisagli] (#403)


6.0.0b1 (2022-07-21)
--------------------

Bug fixes:


- Improve usability of multilingual-map: Fix links to create_translation and open in new tab, speed up animation.
  [pbauer] (#402)


6.0.0a12 (2022-06-07)
---------------------

New features:


- Use SVG Flags in Language Selector
  Update Markup in Language Selector
  Prepare of use the Icon Resolver in Plone 6
  [1letter] (#387)


6.0.0a11 (2022-05-24)
---------------------

Bug fixes:


- Add icon expressions to types.
  [agitator] (#401)


6.0.0a10 (2022-05-15)
---------------------

Bug fixes:


- Make compatible with robotframework 3-5.
  [maurits] (#5)


6.0.0a9 (2022-04-04)
--------------------

Bug fixes:


- Connect translations: always set basePath pattern option.
  In the supported Plone versions this always works.
  [maurits] (#6)


6.0.0a8 (2022-02-24)
--------------------

Bug fixes:


- Fix issue with wrong redirection URL if a language selector viewlet was rendered in a subrequest, like with Mosaic. 
  [jensens] (397-2)
- isort, black, pyupgrade, remove six usages.
  [jensens] (#397)


6.0.0a7 (2022-01-19)
--------------------

Bug fixes:


- In CMFPlone the ILanguage schema was moved to plone.i18n and is referenced as such there, here the change was missing.
  [jensens] (#394)


6.0.0a6 (2021-12-29)
--------------------

Bug fixes:


- Fix typos in documentation.  [telshock] (#340)


6.0.0a5 (2021-10-16)
--------------------

Bug fixes:


- Manage Translations view should not call translation objects. [mliebischer] (#384)


6.0.0a4 (2021-10-13)
--------------------

Bug fixes:


- Disable CSRF protection during the setting of TG attribute. [mamico] (#375)


6.0.0a3 (2021-09-15)
--------------------

Bug fixes:


- Remove cyclic dependency with Products.CMFPlone
  [ericof] (#391)


6.0.0a2 (2021-09-01)
--------------------

Bug fixes:


- Force view_methods to be a tuple on setup and uninstall (#337)
- Fix deleting items with broken relation in languageindependent field
  [pbauer] (#390)


6.0.0a1 (2021-04-28)
--------------------

Breaking changes:


- Bootstrapify for barceloneta-lts (#380)

      * Init add to own branch

      * Add back missing html tag

      * Fix double msgs & add full width

      * Fix headings

      * Init add to own branch

      * Add back missing html tag

      * Fix headings

      * fix test, use string from footer

      * fix test, check h1 not documentFirstHeading

      * fix test, use contains text

      * update icons

      * Jquery load is removed with jq3.

      * major version bump

      Co-authored-by: Peter Holzer <peter.holzer@agitator.com>
      Co-authored-by: Peter Mathis <peter.mathis@kombinat.at> (#380)


Bug fixes:


- Force view_methods to be a tuple on setup and uninstall (#337)


5.6.2 (2020-09-26)
------------------

Bug fixes:


- Fixed deprecation warning for ComponentLookupError.
  Fixed deprecation warning for ILanguageSchema, depend on ``plone.i18n`` 4.0.4.
  Fixed deprecation warning for IObjectEvent from zope.component.
  Fixed deprecation warning for zope.site.hooks.
  [maurits] (#3130)


5.6.1 (2020-06-24)
------------------

Bug fixes:


- Hide left and right portlet columns on babel add view. Fixes #373 [iham] (#373)


5.6.0 (2020-05-06)
------------------

New features:


- Inherit IPloneAppMultilingualInstalled layer from IPloneFormLayer for better
  LIF widget overriding.
  [petschki] (#371)


Bug fixes:


- Move metadata to setup.cfg in order to avoid encoding problems in CHANGES.rst running Plone 6.0 on Python 3.6, see #372.
  [jensens] (#372)


5.5.1 (2020-04-20)
------------------

Bug fixes:


- Minor packaging updates. (#1)


5.5.0 (2019-12-11)
------------------

New features:


- Remove the 'set_language' parameter when 'always_set_cookie' is enabled in language control panel. See #362
  [erral] (#362)


5.4.2 (2019-11-25)
------------------

Bug fixes:


- Use the shared 'Plone test setup' and 'Plone test teardown' keywords in Robot tests.
  [Rotonen] (#349)


5.4.1 (2019-08-23)
------------------

Bug fixes:


- fix adding new language when Language Independent Folder has content
  [petschki] (#358)
- add/update translation forms doesn't show error return from z3c form validation
  [mamico] (#360)


5.4.0 (2019-07-18)
------------------

New features:


- Add low level events and notifies:
  on register, update and remove of a translation to a translation groups.
  [jensens] (#256)


Bug fixes:


- Remove deprecation warnings in tests.
  Increase readability
  Add code comments.
  Remove superfluous reindex of "Language" in manager.
  [jensens] (#256)
- wrong check for default addview in addtranslation traverser
  [mauro] (#355)
- Remove any dependency to ``archetypes.multilingual``, since this is a indirection.
  Remove all dependencies that are already part of ``Products.CMFPlone``.
  All version specifications were reduced to use a recent ``Products.CMFPlone``.
  The ``decorator`` dependency is no longer used.
  [jensens] (#357)


5.3.5 (2019-05-21)
------------------

Bug fixes:


- Setting named behavior instead of dotted on fti during install. [iham] (#345)


5.3.4 (2019-05-04)
------------------

Bug fixes:

- Avoid browser to permanently cache first redirection to negotiated lang (#347)
  [laulaz]

- Moved to named behaviors. [iham] (#342)


5.3.3 (2019-04-29)
------------------

Bug fixes:


- Fix toolbar icon
  [agitator] (#338)
- Fix DeprecationWarning ``ILanguageSchema`` was moved to ``plone.i18n``. [jensens] (#339)


5.3.2 (2019-02-08)
------------------

Bug fixes:


- a11y: Added role attribute for portalMessage [nzambello] (#332)


5.3.1 (2018-12-11)
------------------

Bug fixes:

- Hide left and right portlet columns on babel_edit. Fixes #327
  [erral]


5.3.0 (2018-11-05)
------------------

New features:

- Add compatibility with python 3.
  [pbauer]


5.2.3 (2018-09-26)
------------------

Bug fixes:

- Rerelease, as 5.2.1 was somehow released twice, once in June, once in September.
  [maurits]


5.2.2 (2018-09-25)
------------------

New features:

- Make plone.app.controlpanel optional (no longer there in Plone 5.2).
  [jensens]

Bug fixes:

- Upgrade step to profile version 3 was lost and now recreated.
  [jensens, 2silver]

- Do not show deprecation warning when loading migrator code,
  as it is intended to load old LRF there.
  [jensens]

- Don't fail, if multilingual selector is called without query
  [tomgross]

- Fix connecting of documents
  [tomgross]


5.2.1 (2018-06-20)
------------------

Bug fixes:

- Fixed tests now that Catalan has translated ‘assets’ into ‘recursos’.
  [maurits]

- Run addAttributeTG for the site root when installing. This prevents
  triggering plone.protect.
  [jaroel]


5.2.0 (2018-04-04)
------------------

New features:

- Move translations to plone.app.locales. Fixes #191
  [erral]

Bug fixes:

- Fix Python 3 import.
  [pbauer]

- Remove `language-switcher` from available view methods when uninstalling
  [erral]

- Fix i18n markup in multilingual map to avoid ${DYNAMIC_CONTENT} strings in po files
  [erral]

- Fix i18n markup of the viewlet shown in the translation creation view.
  [erral]


5.1.4 (2018-02-02)
------------------

Bug fixes:

- Removed ``Extensions/Install.py``.  This was only there as wrapper for
  applying our uninstall profile, but that wrapper is no longer needed.
  [maurits]

- Marked 'Scenario: As an editor I can translate a document' as noncritical.
  This is a 'robot' test that has been unstable for a long time.
  [maurits]

- Fix issue where rendering translation menu did write on get when translations
  were enabled on old site with existing content
  [datakurre]

- Fix issue where DX multilingual subscriber was executed even multilingual
  was not installed
  [Asko Soukka]

- Fix edge case where ValueError was raised from DX translatable subscriber
  when no translations were yet available for the content
  [datakurre]

- Fix issue where rendering universal link failed when translation information
  was not yet available for the content
  [datakurre]


5.1.3 (2017-11-25)
------------------

New features:

- Set shortname ``plone.translatable`` to behavior ``plone.app.multilingual.dx.interfaces.IDexterityTranslatable``.
  [jensens]

Bug fixes:

- Imports are Python3 compatible
  [ale-rt, jensens]

- Fix serialization of query variables for selector links in Zope 4.
  [davisagli]


5.1.2 (2017-08-05)
------------------

New features:

- Complete basque translation
  [erral]

- Complete spanish translation
  [erral]


5.1.1 (2017-07-20)
------------------

Bug fixes:

- Safely convert field value to unicode
  [agitator, GerardRodes]


5.1 (2017-07-18)
----------------

New features:

- Rebuilt po files
  [erral]

- Rename ``media`` folder to a more generic name ``assets`` by default and
  add i18nize it to be localization aware
  [agitator, datakurre]
- When viewing a folder with a default page, the translation menu shows all
  options for both the folder and then the default page in the
  same order and with the same titles. The option to edit the current page in
  babel view have been merged with the options to edit the other translations
  to make the menu more consistent
  [datakurre]

- Translation menu show the title of the language independent folder on
  the language independent folder link in translation menu as
  "Open ${title} folder"
  [datakurre]

- Translation menu no longer includes "Set content language"-menuitem, which
  was redundant (but less transparent in its behavior) to just cutting and
  pasting a content under the desired language folder
  [datakurre]

Bug fixes:

- Add missing i18n:translate tags
  [erral]


5.0.8 (2017-07-03)
------------------

Bug fixes:

- Fixed language alternate viewlet #153 [erral]

- Notify ObjectTranslatedEvent if translating with babel view
  #277 [tomgross]

- Fixed issue where delete action on modify translations view deleted
  the current page instead of the selected translation
  [datakurre]


5.0.7 (2017-05-31)
------------------

Bug fixes:

- removed unittest2 dependency
  [kakshay21]


5.0.6 (2017-05-09)
------------------

Bug fixes:

- Update import of UnauthorizedUser. [davisagli]


5.0.5 (2017-04-27)
------------------

Bug fixes:

- Remove travis integration because plone.app.mutlilingual is part of plonecore and should be tested there.
- Fix bug where form controls were overlapped by fields.
  [agitator]

- Fix robot tests to work with improved related items widget.
  [thet]


5.0.4 (2017-03-26)
------------------

New features:

- Add a new view ``@@tg`` for translatable content. It will return the
  current translation group of the content, matching the behavior of ``@@uuid``
  of ``plone.app.uuid`` returning UUID of the content.  [datakurre]


5.0.3 (2017-02-12)
------------------

New features:

- Show Translate menu in INavigationRoot items and hide in ILanguageRootFolders
  [erral]

Bug fixes:

- Remove deprecated __of__ calls on BrowserViews
  [MrTango]


5.0.2 (2017-01-04)
------------------

Bug fixes:

- Add new tests for sitemap.xml.gz (it is currently not listing any content)
  [djowett]


5.0.1 (2017-01-02)
------------------

Bug fixes:

- Allow to work in an Archetypes free Plone 5.1.
  [jensens]

- Replace unittest2 with unittest.
  [jensens]


5.0 (2016-11-17)
----------------

Breaking changes:

- Support for Archetypes content is only installed if you install `archetypes.multilingual.
  For Archetypes support, there is a new ``archetypes`` ``extras_require``, which you can depend upon.
  [davisagli]

New features:

- Replaced add_translations and remove_translations with combined modify_translations.
  Modify translations page gives you an overview of existing translations and has actions
  to connect, disconnect existing translations, as well as actions to create or delete a translation for you content item.
  [agitator]

- Moved stylesheet from legacy bundle to logged-in bundle
  [agitator]

Bug fixes:

- Made robot tests more robust, I hope.
  Before using 'Wait until element is visible',
  first call   'Wait until page contains element'.
  The first one only works reliably when the element was already on the page initially.
  If the element was created dynamically, you need to use the 'page contains' call first,
  otherwise you sometimes get an error:
  'Element not found in the cache - perhaps the page has changed since it was looked up.'
  [maurits]


4.0.4 (2016-09-16)
------------------

Bug fixes:

- Change RelatedItemsFieldWidget configuration from ``@@add_translations`` view to support Mockup 2.4.0, so that the widget is able to navigate beyond the INavigationRoot boundary and to access other translation trees.
  This change keeps compatibility with older versions of Mockup or Mockup-less setups.
  [thet]


4.0.3 (2016-08-15)
------------------

Bug fixes:

- Use zope.interface decorator.
  [gforcada]


4.0.2 (2016-06-12)
------------------

Bug fixes:

- Fixed unstable robot test by waiting until the expected text is on the page.  [maurits]


4.0.1 (2016-06-07)
------------------

Bug fixes:

- Correct event subscribers so that content cut from one LRF & pasted into the
  Media folder is shown there when I switch to a second language.
  [djowett]


4.0.0 (2016-05-25)
------------------

Breaking changes:

- No more compatible with GenericSetup below 1.8.2.
  [iham]

New features:

- Creating language folder(s) on installation.
  (fixes https://github.com/plone/plone.app.multilingual/issues/214)
  [iham]


3.0.17 (2016-05-03)
-------------------

Fixes:

- Wait for visibility of select2 result, instead of time.
  [jensens]

- Workaround in robot test for TinyMCE overlap bug see
  https://github.com/plone/plone.app.multilingual/issues/227
  for details
  [jensens]


3.0.16 (2016-03-31)
-------------------

Fixes:

- Fixed compatibility issue with archetypes contents: wrong URL were generated.
  [keul, hvelarde]

- Really don't show the Google Translate button when no API key set
  [djowett]


3.0.15 (2016-03-01)
-------------------

Fixes:

- Clarify naming of Language Independent Folders
  [djowett]



3.0.14 (2016-02-25)
-------------------

New:

- Updated Traditional Chinese translations.

Fixes:

- Use custom catalog vocabulary for translation content mapping widget,
  which searches all site content.
  [alecm]

- Update Site Setup link in all control panels (fixes https://github.com/plone/Products.CMFPlone/issues/1255)
  [davilima6]


3.0.13 (2015-10-27)
-------------------

New:

- Updated Traditional Chinese translations.
  [l34marr]

Fixes:

- Fixed typo in Italian translation
  [ale-rt]


3.0.12 (2015-09-27)
-------------------

- Disable csrf protection with multilingual.
  [vangheem]

- Resolve deprecation warning for isDefaultPage.
  [fulv]


3.0.11 (2015-09-20)
-------------------

- Fix the old fixed fake tabbing with the back to Site Setup link.
  [sneridagh]

- update French translations
  [enclope]


3.0.10 (2015-09-15)
-------------------

- Fix migration-view, lp-migration-after and after-migration-cleanup.
  [pbauer]

- Fix translation-map.
  Fixes https://github.com/plone/plone.app.multilingual/issues/175
  [pbauer]


3.0.9 (2015-09-14)
------------------

- Add auth-key to pam-migration.
  [pbauer]


3.0.8 (2015-09-14)
------------------

- Fix @@relocate-content.
  [pbauer]


3.0.7 (2015-09-12)
------------------

- Updated basque translation
  [erral]


3.0.6 (2015-08-20)
------------------

- Rerelease due to possible brown bag release.  Jenkins complains
  about 3.0.5.
  [maurits]


3.0.5 (2015-08-20)
------------------

- Move @@multilingual-selector registration from PloneRoot to Navigation root
  This allows to hide language folders in nginx and to use different domains.
  [do3cc]

- Update Traditional Chinese translation.
  [l34marr]


3.0.4 (2015-07-18)
------------------

- Adapt to plone.protect in case its old content.
  [bloodbare]

- Waiting for patterns to test the add translation on robot framework.
  [bloodbare]

- Remove superfluous 'for'.
  [fulv]


3.0.3 (2015-06-05)
------------------

- Remove CMFDefault dependency
  [tomgross]


3.0.2 (2015-05-13)
------------------

- Fix ``containsobjects`` field, renamed to contains_objects
  [gforcada]


3.0.1 (2015-05-04)
------------------

- Japanese translations.
  [terapyon]

- Update version information for Plone 5 in ``README.rst``.
  [saily]


3.0.0 (2015-03-26)
------------------

- Adaptation of plone.app.multilingual for Plone 5. Moved ILanguage to CMFPlone,
  events only executed when browserlayer is installed, control panel integrated
  on z3cform with Plone5.
  [bloodbare]


2.0.0 (2015-03-24)
------------------

- Add Traditional Chinese translation.
  [l34marr]

2.0a4 (2015-03-04)
------------------

- Remove dependency on zope.app.container and zope.app.initd
  [joka]

- Add more common api functions and test them.
  [jensens]

- Refactor locations of code in dx to bundle stuff at a sane place.
  [jensens]

- Remove BLACKLIST_IDS, with LIF this is superfluous.
  [jensens]

- Remove LanguageTool patch, meanwhile superfluous.
  [jensens]

- Add new ``bootstrap.py`` to support new parameter ``--setuptools-version``.
  [saily]

- Fixed language independent fields in ++addtranslation++
  requires ``plone.z3cform >= 0.8.1``
  [jensens, agitator]

- Add uninstall hook to run uninstall profile on deactivation
  [datakurre]

- Fix behavior registration on activation for all Dexterity types
  without dependency to ``plone.app.contenttypes``.
  [datakurre]

- Do not block acquisition on LRF for acl_users, portal_url (both broke login
  form) and portal_catalog any more.
  [jensens]

- Feature: Introduce a set variable BLACK_LIST_IDS which is used as a central
  place for blacklisted object ids not to take into account as neutral
  content or in LRF. It unifies the formerly cluttered different combinations
  of tests with same goal.
  [jensens]

- Cleanup: Pep8, utf8-headers, readability, ..., code-analysis now runs.
  [jensens]

- Fix issue where universal link ignored the language cookie
  [datakurre]

- Fix Plone 5 compatibility issues
  [martior]

- Add a manual folder to LRF migration view
  [datakurre]

- Fix schema editor plugin to not break schema editors outside FTI (e.g.
  ``collective.easyform``)
  [datakurre]

2.0a3 (2014-05-30)
------------------

- Show 'Translate into' menu in plone-contentmenu only when having permission
  to translate.
  [saily]

- Use *Modify portal content* permission for *Edit* action on Language Root
  Folders.
  [saily]

- Move ``devel`` to ``src`` folder, update ``MANIFEST.in``,
  ``setup.py``, ``buildout.cfg`` and ``.gitignore`` to fit that new structure.
  Updated docs.
  [saily]

- Prepare tests to Plone 5
  [saily]


2.0a2 (2014-03-27)
------------------

- Fix alternate language viewlet
  [saily]

- Fix tests. Don't rely on translateable strings in functional tests,
  translations may change.
  [saily]

- Add uninstall profile.
  [thet]


2.0a1 (2014-03-25)
------------------

- In the findContent method of the migrator script, do a more explicit test if
  a content is a real, Dexterity or Archetypes based content object.
  [thet]

- ``createdEvent`` subscriber works now in request-free environments too.
  [jensens]

- Download latest v1 ``bootstrap.py``
  [saily]

- Fix an import issue in ``upgrades.py``
  [saily]

- Add code analysis to ``plone-test-4.x.cfg`` and ``plone-test-5.x.cfg``
  [saily]

- Huge PEP8 and Flake8 cleanup. Please run ``bin/code-analysis`` before
  committing. A git pre-commit hook should be added automatically through
  buildout.
  [saily]

- Ensure ``plone.app.controlpanel.Language`` permission is present.
  [saily]

- Merge ``add.py`` and ``add_translation_form.py`` into one file
  [saily]

- Rename ``update_translation_form.py`` to ``update.py``
  [saily]

- Rename ``remove_translation_form.py`` to ``remove.py``
  [saily]

- Remove ``five.grok`` in browser directory.
  [saily]


1.2 - 2013-09-24
----------------

- Better testsetup for robot tests using it's own layer.
  [saily]

- Revert translation: display of default pages of folders (it doesn't show
  content which doesn't have 'is_default_page' attributes).
  [bogdangi]

- Add new option to allow users to bypass permission checks when updating
  objects with language independent fields.
  [saily]

- Add a new alternate languages viewlet, see:
  https://support.google.com/webmasters/answer/189077
  [saily]

- Remove Twitter-Bootstrap css code from ``multilingual.css`` and set
  stylesheet rendering to authenticated users only.
- Remove twitter bootstrap styles and make style rendered for authenticated
  users only.  [saily]

- Add an upgrade step to reimport css_registry
  [saily]


1.1 - 2013-06-19
----------------

- Add translation: widget missing
- Translating folder with default_page: menu items added
- Add translation: display of default pages of folders
  [ksuess]

- Bugfix: p.a.contentmenu fails if access to translation is not permitted.
  Solution: Introduce restricted access and use it in vocabulary for menu.
  [jensens]

- Added ++add++ and factory support using session var to store where it comes
  from. It maintains the old programmatic way so it's possible to create
  translations using code.
  [ramon]

- Extend travis integration to test against Plone 4.1, 4.2, 4.3 and
  include following dependencies into tests:
  - ``plone.multilingual``
  - ``plone.multilingualbehavior``
  - ``archetypes.multilingual``
  [saily]

- plone.app.contenttypes compatibility on setup
  [sneridagh]

- Added French translation
  [bouchardsyl]

- take care to filter out translated contents
  which do no have supported language information
  [kiorky]

- added support for language neutral objects with country specific language codes
  by checking _combinedlanguagelist too
  [agitator]


1.0 - 2013-04-16
----------------

- Remove ITG usage to ITranslationManager usage
  [ramon]

- Shared folder working on old collections
  [fgrcon]

- Shared folder correct name and reference on setup
  [ramon]

- Instead of check for Dexterity, check if p.multilingualbehavior is installed.
  If it's installed, then Dexterity is installed too
  [sneridagh]

- Fixed travis integration, extend from plone buildout-cache.
  [saily]

- Clean the migration template [erral]

- Don't assume a transition called 'publish' will exist [erral]

- Show language name if no native language information is available.
  [saily]

- Added Ukrainian translation
  [kroman0]

- Add to travis-ci
  [saily]

- Use drop-down instead of buttons on babel view if there are more than X
  translations [pysailor]


1.0rc1 - 2013-01-26
-------------------

- Improve and finish migration code and related 'Languages' configlet tab
  [pysailor, sneridagh]
- Testing of migration code on production sites [pysailor, erralin, sneridagh]
- Fix broken tests and new ones [pysailor, erralin, bloodbare, sneridagh]
- New re-designed language selector and related helper views [erralin,
  bloodbare]
- Not translated view improvements [erralin, bloodbare]
- fixed getClosestDestination when translation doesn't exist [gborelli]
- Update deprecated imports to work with Plone 4.3
  [saily]


1.0b3 2012-10-04
----------------

- Select the original language in the dexterity babel edit form.
  [maurits]

- Add after migration action on view
  [do3cc]

- Multilingual Map
  [ramon]

- Universal link
  [ramon]

- Catalog patch bug solving
  [ramon]

- Language selector bug solving
  [sneridagh]

- Babel view javascripts unification and optimization
  [ramon]

- Neutral language folder and menu options added
  [ramon]

- New tests
  [sneridagh]

- Moving templates to templates folder
  [ramon]

- Updating language options
  [ramon]

- Menu refactoring
  [ramon]

- Allow to see all content on adding translation
  [ramon]


1.0b2 - 2012-07-08
------------------

- change language index to Language to LinguaPlone coexistence
  [ramon]

- don't rebuild the complete catalog on installing
  [pbauer]

- add indexes via setuphandler instead of xml to prevents purging on reinstall
  [pbauer]

- make babel-view align fields next to each other
  [do3cc]

- updated .po files
  [gborelli]

- Added rebuild.sh script in order to simplify updating translations
  [gborelli]

- Added italian translation
  [gborelli]

- Do not fail when the front-page cannot be moved to a new folder
  during setup.
  [maurits]

- Make it possible to override the portal_type that is used when
  creating a root language folder.
  [maurits]


1.0b1 - 2012-04-03
------------------

- Added Google Translation Service ajax service [ramon]

- Added babel view on AT [sneridagh]

- Added babel view on dexterity [ramon]

- Added the option to not filter language on folder_contents view
  [ramon]

- Added to translation menu to edit a translated language [ramon]

- Initial setup of a site moving content to language folders [ramon]


0.1a2 - 2011-12-04
------------------

- Improved Control Panel [ramon]

- Improved Language Control Panel site languages selector widget to be
  more usable.

- Setup the root folder layout for each configured site languages on
  languages control panel save settings [ramon, sneridagh]

- Adapt languageselector viewlet from LP [ramon]

- Re-enable and adapt the searchResults patch again [ramon]

- Cleaning description of packages and registerProfile of paml
  [sneridagh]


0.1a1 - 2011-10-03
------------------

- Initial version [ramon, awello, sneridagh]

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/plone/plone.app.multilingual",
    "name": "plone.app.multilingual",
    "maintainer": "Plone Foundation",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "releasemanager@plone.org",
    "keywords": "language,multilingual,content",
    "author": "Ramon Navarro, Victor Fernandez de Alba, awello et al",
    "author_email": "r.navarro@iskra.cat",
    "download_url": "https://files.pythonhosted.org/packages/3b/52/9d854ef7783dc58e47ca8f438a61aaab7010682fbac690989baeb95d60ea/plone.app.multilingual-8.1.1.tar.gz",
    "platform": null,
    "description": ".. contents::\n\n\nIntroduction\n============\n\nIn the old days before Plone 4.3, talking about multi-language support in Plone was talk about Products.LinguaPlone. It has been the *defacto* standard for managing translations of Archetypes-based content types in Plone through the years. Somehow its functionality never made its way into the Plone core and today it is in legacy status. Nowadays, Plone faces the rising of Dexterity content types and its adoption into the core since Plone 4.3. With Plone 5 released, the transition is completed and Dexterity is shipped as its default content type story.\n\nplone.app.multilingual was designed originally to add a whole multilingual story to Plone. Using ZCA technologies, it enables translations to Dexterity and Archetypes content types managed via a unified UI.\n\nThis module provides the user interface for managing content translations. It's the app package of the next generation Plone multilingual engine. It's designed to work with Dexterity content types and the *old fashioned* Archetypes based content types as well. It only works with Plone 4.1 and above due to the use of UUIDs for referencing the translations.\n\nAfter more than 7 years, a GSOC, redesigns, reimplementations due to deprecated libraries and two major Plone versions we are finally able to say that plone.app.multilingual has arrived.\n\n\nVersions\n========\n\n* ``1.x`` - Plone 4.x with Archetypes and Dexterity\n\n* ``2.x`` - Plone >= 4.x, < 5.0 with plone.app.contenttypes (Dexterity) and\n  real shared content\n\n* ``3.x`` - Plone >= 5.x.  3.0.17 will likely be the latest release on this branch.  You are encouraged to use 4.x.\n\n* ``4.x`` - Plone >= 5.x (5.0.3 minimum, due to GenericSetup dependency)\n\n\nComponents\n==========\n\nPAM is composed of two packages. One is mandatory:\n\n* plone.app.multilingual (core, UI, enables Dexterity support via a behavior)\n\nand one optional:\n\n* archetypes.multilingual (enables Archetypes support)\n\n\nUsage\n=====\n\nTo use this package with both Dexterity and Archetypes based content types you should add the following line to your *eggs* buildout section::\n\n    eggs =\n        plone.app.multilingual[archetypes]\n\nTo use this package with plone.app.contenttypes you should add the following line to your *eggs* buildout section::\n\n    eggs =\n        plone.app.multilingual\n\n\nSetup\n=====\n\nAfter re-running your buildout and installing the newly available add-ons, you should go to the *Languages* section of your site's control panel and select at least two or more languages for your site. You will now be able to create translations of Plone's default content types, or to link existing content as translations.\n\n\nFeatures\n========\n\nThese are the most important features PAM provides.\n\n\nRoot Language folders\n---------------------\n\nAfter the setup, PAM will create root folders for each of your site's languages and put translated content into the appropriate folders. A language folder implements INavigationRoot, so from the user's point of view, each language is \"jailed\" inside its corresponding language folder. There are event subscribers in place to capture user interaction with content and update the language in contents accordingly, for example when a user moves or copies content between language folders.\n\n\nBabel view\n----------\n\nAn evolution of the LP *translate* view, unified for either Archetypes and Dexterity content types. It features an already translated content viewer for the current content being edited via an ajaxified dynamic selector that shows them on the fly on user request.\n\n\nLanguage independent fields\n---------------------------\n\nPAM has support for language independent fields, but with a twist regarding the LP implementation. As PAM's design does not give more relevance to one translated object than to its siblings (has no canonical object), fields marked as language independent are always copied over to all members of the translation group. The PAM UI will remind you about this behavior by warning you that the values in the corresponding field of all members of the translation group will be overwritten.\n\n\nTranslation locator policy\n--------------------------\n\nWhen translating content, the policy influences how the translated content will be placed in the site's structure. There are two policies to choose from:\n\n* LP way, the translation gets placed in the nearest translated folder in the parent's hierarchy\n* Ask user where to place the translated element in the destination language root folder\n\n\nLanguage selector policy\n------------------------\n\nWhile browsing the site, the language selector viewlet allows users to switch the site's content language. There are two policies in place in case the translation of a specific language does not exist (yet):\n\n* LP way, the selector shows the nearest translated container.\n* Shows the user an informative view that shows the currently available translations for the current content.\n\n\nThe assets folder - a shared \"Language Independent Folder\"\n----------------------------------------------------------\n\nThe root language folders are used to house the content tree for the corresponding language. However, there are some use cases where we need content that does not belong to any language. For example, for assets or side resources like images, videos and documents. For this reason PAM supplies a special Language Independent Folder to house these kind of objects. After PAM setup, there is a special folder called \"Assets\" (folder title may depend on the language), which can be accessed through the \"Go to Assets folder\" item of the \"Translate\" menu. All items placed in this folder will have neutral as their default language and will be visible from the other root language folders as if they were placed there as well.\n\nNote:\n    * Language Independent Folder's have also been historically known as \"Neutral root folder\", \"language neutral folder\" and \"language shared (folder)\".\n    * Also don't confuse Language Independent Folders with Language Independent Fields\n    * The Language Independent Folder formerly known as ``Media`` folder, was renamed to the more generic name ``Assets`` (the name may depend on the language).\n\n\nTranslation map\n---------------\n\nIn order to ease the translation tasks, we devised a tool that displays in a useful way all the current translated objects and its current translation information. The map also shows a list of missing translations in case you want to build a *mirrored* (completely) translated site.\n\n\nGoogle Translation Service integration\n--------------------------------------\n\nIf you are subscriber of the Google Translation service (a paid service), you can setup your API key on *Languages* site setup. Then, you will notice a new icon in the babel view that takes the original field on the left side and using Google Translations service, translates its contents and fill the right side field.\n\n\nLinguaPlone migration\n---------------------\n\nYou can migrate your existing LP powered sites to PAM using the *Migration* tab in the *Languages* control panel. The migration has been divided into 4 steps for separation of concerns and for improving the success of each of the required procedures.\n\n\nStep 0 (optional) - Reindex the language index\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe migration of LinguaPlone content depends on an up-to-date Language index. Use this step to refresh this index. **Warning:** Depending on the number of items in your site, this can take a considerable amount of time. This step is not destructive and can be executed as many times as needed.\n\n\nStep 1 - Relocate content to the proper root language folder\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis step will move the site's content to its correspondent root language folder and previously will make a search for misplaced content through the site's content tree and will move them to its nearest translated parent. **Warning:** This step is destructive as it will alter your content tree structure. Make sure you have previously configured your site's languages properly in the 'Site Languages' tab of the 'Languages' control panel. It's advisable that you do not perform this step on production servers having not tried it in development/preproduction servers previously. Depending on the distribution of your site's content and the accuracy of the language information on each content object you may need to relocate manually some misplaced content after this step. Despite the fact that this step is 'destructive' it can be executed as times as needed if some problem is detected and afterwards you fix the problem. Please, refer to the procedure log when it finishes.\n\n\nStep 2 - Transfer multilingual catalog information\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis step will transfer the relations between translations stored by LinguaPlone to the PAM catalog. This step is not destructive and can be executed as many times as needed.\n\n\nStep 3 - Cleanup after migration\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThis step will search and fix some lost dependencies to the ITranslatable interface hidden in the relation catalog and it gets rid of them. It must be run only when LinguaPlone is already uninstalled, so this step is hidden until then.\n\n\nMarking objects as translatables\n================================\n\nArchetypes\n----------\n\nBy default, if PAM is installed, Archetypes-based content types are marked as translatables\n\n\nDexterity\n---------\n\nUsers should mark a dexterity content type as translatable by assigning a the multilingual behavior to the definition of the content type either via file system, supermodel or through the web.\n\n\nMarking fields as language independent\n======================================\n\nArchetypes\n----------\n\nThe language independent fields on Archetype-based content are marked the same way as in LinguaPlone::\n\n    atapi.StringField(\n        'myField',\n        widget=atapi.StringWidget(\n        ....\n        ),\n        languageIndependent=True\n    ),\n\n.. note::\n\n    If you want to completely remove LinguaPlone of your installation, you should make sure that your code are dependent in any way of LP.\n\n\nDexterity\n---------\n\nThere are four ways of achieve it.\n\n\nDirective\n~~~~~~~~~\n\nIn your content type class declaration::\n\n    from plone.app.multilingual.dx import directives\n    directives.languageindependent('field')\n\n\nSupermodel\n~~~~~~~~~~\n\nIn your content type XML file declaration::\n\n    <field name=\"myField\" type=\"zope.schema.TextLine\" lingua:independent=\"true\">\n        <description />\n        <title>myField</title>\n    </field>\n\n\nNative\n~~~~~~\n\nIn your code::\n\n    from plone.app.multilingual.dx.interfaces import ILanguageIndependentField\n    alsoProvides(ISchema['myField'], ILanguageIndependentField)\n\nThrough the web\n~~~~~~~~~~~~~~~\n\nVia the content type definition in the *Dexterity Content Types* control panel.\n\n\nInternal design of plone.app.multilingual\n=========================================\n\nAll the internal features are implemented on the package plone.app.multilingual.\n\nThe key points are:\n\n1. Each translation is a content object\n2. There is no canonical object\n3. The translation reference storage is external to the content object\n4. Adapt all the steps on translation\n5. Language get/set via an unified adapter\n6. Translatable marker interface(s)\n\n\nThere is no canonical content object\n------------------------------------\n\nHaving a canonical object on the content space produces a dependency which is not orthogonal with the normal behavior of Plone. Content objects should be autonomous and you should be able to remove it. This is the reason because we removed the canonical content object. There is a canonical object on the translation infrastructure but is not on the content space.\n\n\nTranslation reference storage\n-----------------------------\n\nIn order to maintain the relations between the different language objects we designed a common object called a *translation group*. This translation group has an UUID on its own and each object member of the group stores it in the object catalog register. You can use the ITranslationManager utility to access and manipulate the members of a translation group given one object of the group.\n\n\nAdapt all the steps on translation\n----------------------------------\n\nThe different aspects involved on a translation are adapted, so it's possible to create different policies for different types, sites, etc.\n\n``ITranslationFactory``\n    General factory used to create a new content\n\n``ITranslationLocator``\n    Where we are going to locate the new translated content\n\n    Default : If the parent folder is translated create the content on the translated parent folder, otherwise create on the parent folder.\n\n``ITranslationCloner``\n    Method to clone the original object to the new one\n\n    Default : Nothing\n\n``ITranslationIdChooser``\n    Which id is the translation\n\n    Default : The original id + lang code-block\n\n``ILanguageIndependentFieldsManager``\n    Manager for language independent fields\n\n    Default: Nothing\n\n\nLanguage get/set via an unified adapter\n---------------------------------------\n\nIn order to access and modify the language of a content type there is a interface/adapter::\n\n    plone.base.interfaces.ILanguage\n\nYou can use::\n\n    from plone.base.interfaces import ILanguage\n    language = ILanguage(context).get_language()\n\nor in case you want to set the language of a content::\n\n    language = ILanguage(context).set_language('ca')\n\n\nTranslatable marker interface\n-----------------------------\n\nIn order to know if a content can be translated there is a marker interface::\n\n    plone.app.multilingual.interfaces.ITranslatable\n\n\nSource Code\n===========\n\nContributors please read the document `Process for Plone core's development <https://docs.plone.org/develop/coredev/docs/index.html>`_\n\nSources are at the `Plone code repository hosted at Github <https://github.com/plone/plone.app.multilingual>`_.\n\n\nLicense\n=======\n\nGNU General Public License, version 2\n\nCredits\n=======\n\nplone.app.multilingual has been developed based on LinguaPlone by:\n\nDesign and development --\n  Iskra_ (Ramon Navarro Bosch, Victor Fernandez de Alba)\n\n.. _Iskra: http://www.iskra.cat\n\nAdditional funding/sponsorship:\n  Hitotsubashi University in Tokyo, Centre for New European studies\n  (Jonathan Lewis)\n\nAlso many thanks to\n\nJan-Carel Brand:\n   For language independent field implementation on AT\n\nAnne Walter:\n   For pushing for a initial working version\n\nThomas Massmann, Martijn Pieters, Martin Aspeli, David Glick\n\nChangelog\n=========\n\n.. You should *NOT* be adding new change log entries to this file.\n   You should create a file in the news directory instead.\n   For helpful instructions, please see:\n   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst\n\n.. towncrier release notes start\n\n8.1.1 (2024-02-27)\n------------------\n\nBug fixes:\n\n\n- Add missing translate icon for the menu. [szakitibi] (#447)\n\n\n8.1.0 (2024-01-31)\n------------------\n\nNew features:\n\n\n- Implement a more reasonable default for \"connect translations\" dialog.\n  [gogobd] (#445)\n\n\n8.0.3 (2024-01-18)\n------------------\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (dd37b9f9)\n\n\n8.0.2 (2023-12-14)\n------------------\n\nBug fixes:\n\n\n- Fixing placement of save and cancel buttons by not having javascript screw up their position (#435)\n- Fixing disconnection of translations [gogobd] (#437)\n\n\nInternal:\n\n\n- Removed obsolete deprecation warning. (#440)\n\n\n8.0.1 (2023-08-31)\n------------------\n\nBug fixes:\n\n\n- Fix setting Indonesian language cookie on site root: must be ``id``, not ``id-id``.\n  [maurits] (#304)\n\n\n8.0.0 (2023-07-14)\n------------------\n\nBreaking changes:\n\n\n- Make a core add-on by adding `Products.CMFPlone` to package dependencies.\n  [@folix-01] (#417)\n\n\nBug fixes:\n\n\n- Do not unset the language on the Indonesian root language folder when saving the control panel.\n  This language has ``id`` as code.  This is not allowed as an id in Plone, so it is created as ``id-id`` instead.\n  This needs some special handling.\n  Added upgrade to recursively fix this language folder to set the Indonesian language.  This is only done when the folder itself has the wrong language.\n  [maurits] (#304)\n- Root language switcher: redirect to ``id-id`` if the Indonesian language is preferred.\n  [maurits] (#304)\n- Fix ``set_recursive_language`` to actually find child objects.\n  [maurits] (#304)\n\n\n7.0.1 (2023-04-15)\n------------------\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (11f0db91)\n\n\n7.0.0 (2023-04-06)\n------------------\n\nBreaking changes:\n\n\n- Move language independent field declarations from plone.app.event to this package.\n  This prepares this package to be used as a real core addon.\n  [jensens] (414-paevent)\n\n\n6.0.2 (2023-03-22)\n------------------\n\nBug fixes:\n\n\n- Use plone.base imports. Removes deprecation warnings.\n  [jensens] (#411)\n- Update old view methods and layouts from LIF/LRF type definitions and instances.\n  For example, in Plone 6 ``folder_summary_view`` is no longer available: use ``summary_view`` instead.\n  [maurits] (#1001)\n\n\n6.0.1 (2023-03-14)\n------------------\n\nBug fixes:\n\n\n- When an item is modified, only copy language-independent field values to translations if they have changed. [davisagli] (#408)\n- Resolve deprecation warnings (plone.base).\n  Get rid of a Archetypes leftover.\n  [jensens] (#410)\n\n\n6.0.0 (2022-12-02)\n------------------\n\nBug fixes:\n\n\n- Final release for Plone 6.0.0. (#600)\n\n\n6.0.0b3 (2022-09-07)\n--------------------\n\nBug fixes:\n\n\n- Grant the \"plone.app.multilingual: Manage Translations\" permission to the Site Administrator role.\n  This change is not applied automatically to existing sites. You can apply it manually using\n  the /manage_access view of the Plone site, or using rolemap.xml in a GenericSetup profile.\n  [davisagli] (#405)\n\n\n6.0.0b2 (2022-08-30)\n--------------------\n\nBug fixes:\n\n\n- Fix installation to preserve existing order of behaviors. [davisagli] (#403)\n\n\n6.0.0b1 (2022-07-21)\n--------------------\n\nBug fixes:\n\n\n- Improve usability of multilingual-map: Fix links to create_translation and open in new tab, speed up animation.\n  [pbauer] (#402)\n\n\n6.0.0a12 (2022-06-07)\n---------------------\n\nNew features:\n\n\n- Use SVG Flags in Language Selector\n  Update Markup in Language Selector\n  Prepare of use the Icon Resolver in Plone 6\n  [1letter] (#387)\n\n\n6.0.0a11 (2022-05-24)\n---------------------\n\nBug fixes:\n\n\n- Add icon expressions to types.\n  [agitator] (#401)\n\n\n6.0.0a10 (2022-05-15)\n---------------------\n\nBug fixes:\n\n\n- Make compatible with robotframework 3-5.\n  [maurits] (#5)\n\n\n6.0.0a9 (2022-04-04)\n--------------------\n\nBug fixes:\n\n\n- Connect translations: always set basePath pattern option.\n  In the supported Plone versions this always works.\n  [maurits] (#6)\n\n\n6.0.0a8 (2022-02-24)\n--------------------\n\nBug fixes:\n\n\n- Fix issue with wrong redirection URL if a language selector viewlet was rendered in a subrequest, like with Mosaic. \n  [jensens] (397-2)\n- isort, black, pyupgrade, remove six usages.\n  [jensens] (#397)\n\n\n6.0.0a7 (2022-01-19)\n--------------------\n\nBug fixes:\n\n\n- In CMFPlone the ILanguage schema was moved to plone.i18n and is referenced as such there, here the change was missing.\n  [jensens] (#394)\n\n\n6.0.0a6 (2021-12-29)\n--------------------\n\nBug fixes:\n\n\n- Fix typos in documentation.  [telshock] (#340)\n\n\n6.0.0a5 (2021-10-16)\n--------------------\n\nBug fixes:\n\n\n- Manage Translations view should not call translation objects. [mliebischer] (#384)\n\n\n6.0.0a4 (2021-10-13)\n--------------------\n\nBug fixes:\n\n\n- Disable CSRF protection during the setting of TG attribute. [mamico] (#375)\n\n\n6.0.0a3 (2021-09-15)\n--------------------\n\nBug fixes:\n\n\n- Remove cyclic dependency with Products.CMFPlone\n  [ericof] (#391)\n\n\n6.0.0a2 (2021-09-01)\n--------------------\n\nBug fixes:\n\n\n- Force view_methods to be a tuple on setup and uninstall (#337)\n- Fix deleting items with broken relation in languageindependent field\n  [pbauer] (#390)\n\n\n6.0.0a1 (2021-04-28)\n--------------------\n\nBreaking changes:\n\n\n- Bootstrapify for barceloneta-lts (#380)\n\n      * Init add to own branch\n\n      * Add back missing html tag\n\n      * Fix double msgs & add full width\n\n      * Fix headings\n\n      * Init add to own branch\n\n      * Add back missing html tag\n\n      * Fix headings\n\n      * fix test, use string from footer\n\n      * fix test, check h1 not documentFirstHeading\n\n      * fix test, use contains text\n\n      * update icons\n\n      * Jquery load is removed with jq3.\n\n      * major version bump\n\n      Co-authored-by: Peter Holzer <peter.holzer@agitator.com>\n      Co-authored-by: Peter Mathis <peter.mathis@kombinat.at> (#380)\n\n\nBug fixes:\n\n\n- Force view_methods to be a tuple on setup and uninstall (#337)\n\n\n5.6.2 (2020-09-26)\n------------------\n\nBug fixes:\n\n\n- Fixed deprecation warning for ComponentLookupError.\n  Fixed deprecation warning for ILanguageSchema, depend on ``plone.i18n`` 4.0.4.\n  Fixed deprecation warning for IObjectEvent from zope.component.\n  Fixed deprecation warning for zope.site.hooks.\n  [maurits] (#3130)\n\n\n5.6.1 (2020-06-24)\n------------------\n\nBug fixes:\n\n\n- Hide left and right portlet columns on babel add view. Fixes #373 [iham] (#373)\n\n\n5.6.0 (2020-05-06)\n------------------\n\nNew features:\n\n\n- Inherit IPloneAppMultilingualInstalled layer from IPloneFormLayer for better\n  LIF widget overriding.\n  [petschki] (#371)\n\n\nBug fixes:\n\n\n- Move metadata to setup.cfg in order to avoid encoding problems in CHANGES.rst running Plone 6.0 on Python 3.6, see #372.\n  [jensens] (#372)\n\n\n5.5.1 (2020-04-20)\n------------------\n\nBug fixes:\n\n\n- Minor packaging updates. (#1)\n\n\n5.5.0 (2019-12-11)\n------------------\n\nNew features:\n\n\n- Remove the 'set_language' parameter when 'always_set_cookie' is enabled in language control panel. See #362\n  [erral] (#362)\n\n\n5.4.2 (2019-11-25)\n------------------\n\nBug fixes:\n\n\n- Use the shared 'Plone test setup' and 'Plone test teardown' keywords in Robot tests.\n  [Rotonen] (#349)\n\n\n5.4.1 (2019-08-23)\n------------------\n\nBug fixes:\n\n\n- fix adding new language when Language Independent Folder has content\n  [petschki] (#358)\n- add/update translation forms doesn't show error return from z3c form validation\n  [mamico] (#360)\n\n\n5.4.0 (2019-07-18)\n------------------\n\nNew features:\n\n\n- Add low level events and notifies:\n  on register, update and remove of a translation to a translation groups.\n  [jensens] (#256)\n\n\nBug fixes:\n\n\n- Remove deprecation warnings in tests.\n  Increase readability\n  Add code comments.\n  Remove superfluous reindex of \"Language\" in manager.\n  [jensens] (#256)\n- wrong check for default addview in addtranslation traverser\n  [mauro] (#355)\n- Remove any dependency to ``archetypes.multilingual``, since this is a indirection.\n  Remove all dependencies that are already part of ``Products.CMFPlone``.\n  All version specifications were reduced to use a recent ``Products.CMFPlone``.\n  The ``decorator`` dependency is no longer used.\n  [jensens] (#357)\n\n\n5.3.5 (2019-05-21)\n------------------\n\nBug fixes:\n\n\n- Setting named behavior instead of dotted on fti during install. [iham] (#345)\n\n\n5.3.4 (2019-05-04)\n------------------\n\nBug fixes:\n\n- Avoid browser to permanently cache first redirection to negotiated lang (#347)\n  [laulaz]\n\n- Moved to named behaviors. [iham] (#342)\n\n\n5.3.3 (2019-04-29)\n------------------\n\nBug fixes:\n\n\n- Fix toolbar icon\n  [agitator] (#338)\n- Fix DeprecationWarning ``ILanguageSchema`` was moved to ``plone.i18n``. [jensens] (#339)\n\n\n5.3.2 (2019-02-08)\n------------------\n\nBug fixes:\n\n\n- a11y: Added role attribute for portalMessage [nzambello] (#332)\n\n\n5.3.1 (2018-12-11)\n------------------\n\nBug fixes:\n\n- Hide left and right portlet columns on babel_edit. Fixes #327\n  [erral]\n\n\n5.3.0 (2018-11-05)\n------------------\n\nNew features:\n\n- Add compatibility with python 3.\n  [pbauer]\n\n\n5.2.3 (2018-09-26)\n------------------\n\nBug fixes:\n\n- Rerelease, as 5.2.1 was somehow released twice, once in June, once in September.\n  [maurits]\n\n\n5.2.2 (2018-09-25)\n------------------\n\nNew features:\n\n- Make plone.app.controlpanel optional (no longer there in Plone 5.2).\n  [jensens]\n\nBug fixes:\n\n- Upgrade step to profile version 3 was lost and now recreated.\n  [jensens, 2silver]\n\n- Do not show deprecation warning when loading migrator code,\n  as it is intended to load old LRF there.\n  [jensens]\n\n- Don't fail, if multilingual selector is called without query\n  [tomgross]\n\n- Fix connecting of documents\n  [tomgross]\n\n\n5.2.1 (2018-06-20)\n------------------\n\nBug fixes:\n\n- Fixed tests now that Catalan has translated \u2018assets\u2019 into \u2018recursos\u2019.\n  [maurits]\n\n- Run addAttributeTG for the site root when installing. This prevents\n  triggering plone.protect.\n  [jaroel]\n\n\n5.2.0 (2018-04-04)\n------------------\n\nNew features:\n\n- Move translations to plone.app.locales. Fixes #191\n  [erral]\n\nBug fixes:\n\n- Fix Python 3 import.\n  [pbauer]\n\n- Remove `language-switcher` from available view methods when uninstalling\n  [erral]\n\n- Fix i18n markup in multilingual map to avoid ${DYNAMIC_CONTENT} strings in po files\n  [erral]\n\n- Fix i18n markup of the viewlet shown in the translation creation view.\n  [erral]\n\n\n5.1.4 (2018-02-02)\n------------------\n\nBug fixes:\n\n- Removed ``Extensions/Install.py``.  This was only there as wrapper for\n  applying our uninstall profile, but that wrapper is no longer needed.\n  [maurits]\n\n- Marked 'Scenario: As an editor I can translate a document' as noncritical.\n  This is a 'robot' test that has been unstable for a long time.\n  [maurits]\n\n- Fix issue where rendering translation menu did write on get when translations\n  were enabled on old site with existing content\n  [datakurre]\n\n- Fix issue where DX multilingual subscriber was executed even multilingual\n  was not installed\n  [Asko Soukka]\n\n- Fix edge case where ValueError was raised from DX translatable subscriber\n  when no translations were yet available for the content\n  [datakurre]\n\n- Fix issue where rendering universal link failed when translation information\n  was not yet available for the content\n  [datakurre]\n\n\n5.1.3 (2017-11-25)\n------------------\n\nNew features:\n\n- Set shortname ``plone.translatable`` to behavior ``plone.app.multilingual.dx.interfaces.IDexterityTranslatable``.\n  [jensens]\n\nBug fixes:\n\n- Imports are Python3 compatible\n  [ale-rt, jensens]\n\n- Fix serialization of query variables for selector links in Zope 4.\n  [davisagli]\n\n\n5.1.2 (2017-08-05)\n------------------\n\nNew features:\n\n- Complete basque translation\n  [erral]\n\n- Complete spanish translation\n  [erral]\n\n\n5.1.1 (2017-07-20)\n------------------\n\nBug fixes:\n\n- Safely convert field value to unicode\n  [agitator, GerardRodes]\n\n\n5.1 (2017-07-18)\n----------------\n\nNew features:\n\n- Rebuilt po files\n  [erral]\n\n- Rename ``media`` folder to a more generic name ``assets`` by default and\n  add i18nize it to be localization aware\n  [agitator, datakurre]\n- When viewing a folder with a default page, the translation menu shows all\n  options for both the folder and then the default page in the\n  same order and with the same titles. The option to edit the current page in\n  babel view have been merged with the options to edit the other translations\n  to make the menu more consistent\n  [datakurre]\n\n- Translation menu show the title of the language independent folder on\n  the language independent folder link in translation menu as\n  \"Open ${title} folder\"\n  [datakurre]\n\n- Translation menu no longer includes \"Set content language\"-menuitem, which\n  was redundant (but less transparent in its behavior) to just cutting and\n  pasting a content under the desired language folder\n  [datakurre]\n\nBug fixes:\n\n- Add missing i18n:translate tags\n  [erral]\n\n\n5.0.8 (2017-07-03)\n------------------\n\nBug fixes:\n\n- Fixed language alternate viewlet #153 [erral]\n\n- Notify ObjectTranslatedEvent if translating with babel view\n  #277 [tomgross]\n\n- Fixed issue where delete action on modify translations view deleted\n  the current page instead of the selected translation\n  [datakurre]\n\n\n5.0.7 (2017-05-31)\n------------------\n\nBug fixes:\n\n- removed unittest2 dependency\n  [kakshay21]\n\n\n5.0.6 (2017-05-09)\n------------------\n\nBug fixes:\n\n- Update import of UnauthorizedUser. [davisagli]\n\n\n5.0.5 (2017-04-27)\n------------------\n\nBug fixes:\n\n- Remove travis integration because plone.app.mutlilingual is part of plonecore and should be tested there.\n- Fix bug where form controls were overlapped by fields.\n  [agitator]\n\n- Fix robot tests to work with improved related items widget.\n  [thet]\n\n\n5.0.4 (2017-03-26)\n------------------\n\nNew features:\n\n- Add a new view ``@@tg`` for translatable content. It will return the\n  current translation group of the content, matching the behavior of ``@@uuid``\n  of ``plone.app.uuid`` returning UUID of the content.  [datakurre]\n\n\n5.0.3 (2017-02-12)\n------------------\n\nNew features:\n\n- Show Translate menu in INavigationRoot items and hide in ILanguageRootFolders\n  [erral]\n\nBug fixes:\n\n- Remove deprecated __of__ calls on BrowserViews\n  [MrTango]\n\n\n5.0.2 (2017-01-04)\n------------------\n\nBug fixes:\n\n- Add new tests for sitemap.xml.gz (it is currently not listing any content)\n  [djowett]\n\n\n5.0.1 (2017-01-02)\n------------------\n\nBug fixes:\n\n- Allow to work in an Archetypes free Plone 5.1.\n  [jensens]\n\n- Replace unittest2 with unittest.\n  [jensens]\n\n\n5.0 (2016-11-17)\n----------------\n\nBreaking changes:\n\n- Support for Archetypes content is only installed if you install `archetypes.multilingual.\n  For Archetypes support, there is a new ``archetypes`` ``extras_require``, which you can depend upon.\n  [davisagli]\n\nNew features:\n\n- Replaced add_translations and remove_translations with combined modify_translations.\n  Modify translations page gives you an overview of existing translations and has actions\n  to connect, disconnect existing translations, as well as actions to create or delete a translation for you content item.\n  [agitator]\n\n- Moved stylesheet from legacy bundle to logged-in bundle\n  [agitator]\n\nBug fixes:\n\n- Made robot tests more robust, I hope.\n  Before using 'Wait until element is visible',\n  first call   'Wait until page contains element'.\n  The first one only works reliably when the element was already on the page initially.\n  If the element was created dynamically, you need to use the 'page contains' call first,\n  otherwise you sometimes get an error:\n  'Element not found in the cache - perhaps the page has changed since it was looked up.'\n  [maurits]\n\n\n4.0.4 (2016-09-16)\n------------------\n\nBug fixes:\n\n- Change RelatedItemsFieldWidget configuration from ``@@add_translations`` view to support Mockup 2.4.0, so that the widget is able to navigate beyond the INavigationRoot boundary and to access other translation trees.\n  This change keeps compatibility with older versions of Mockup or Mockup-less setups.\n  [thet]\n\n\n4.0.3 (2016-08-15)\n------------------\n\nBug fixes:\n\n- Use zope.interface decorator.\n  [gforcada]\n\n\n4.0.2 (2016-06-12)\n------------------\n\nBug fixes:\n\n- Fixed unstable robot test by waiting until the expected text is on the page.  [maurits]\n\n\n4.0.1 (2016-06-07)\n------------------\n\nBug fixes:\n\n- Correct event subscribers so that content cut from one LRF & pasted into the\n  Media folder is shown there when I switch to a second language.\n  [djowett]\n\n\n4.0.0 (2016-05-25)\n------------------\n\nBreaking changes:\n\n- No more compatible with GenericSetup below 1.8.2.\n  [iham]\n\nNew features:\n\n- Creating language folder(s) on installation.\n  (fixes https://github.com/plone/plone.app.multilingual/issues/214)\n  [iham]\n\n\n3.0.17 (2016-05-03)\n-------------------\n\nFixes:\n\n- Wait for visibility of select2 result, instead of time.\n  [jensens]\n\n- Workaround in robot test for TinyMCE overlap bug see\n  https://github.com/plone/plone.app.multilingual/issues/227\n  for details\n  [jensens]\n\n\n3.0.16 (2016-03-31)\n-------------------\n\nFixes:\n\n- Fixed compatibility issue with archetypes contents: wrong URL were generated.\n  [keul, hvelarde]\n\n- Really don't show the Google Translate button when no API key set\n  [djowett]\n\n\n3.0.15 (2016-03-01)\n-------------------\n\nFixes:\n\n- Clarify naming of Language Independent Folders\n  [djowett]\n\n\n\n3.0.14 (2016-02-25)\n-------------------\n\nNew:\n\n- Updated Traditional Chinese translations.\n\nFixes:\n\n- Use custom catalog vocabulary for translation content mapping widget,\n  which searches all site content.\n  [alecm]\n\n- Update Site Setup link in all control panels (fixes https://github.com/plone/Products.CMFPlone/issues/1255)\n  [davilima6]\n\n\n3.0.13 (2015-10-27)\n-------------------\n\nNew:\n\n- Updated Traditional Chinese translations.\n  [l34marr]\n\nFixes:\n\n- Fixed typo in Italian translation\n  [ale-rt]\n\n\n3.0.12 (2015-09-27)\n-------------------\n\n- Disable csrf protection with multilingual.\n  [vangheem]\n\n- Resolve deprecation warning for isDefaultPage.\n  [fulv]\n\n\n3.0.11 (2015-09-20)\n-------------------\n\n- Fix the old fixed fake tabbing with the back to Site Setup link.\n  [sneridagh]\n\n- update French translations\n  [enclope]\n\n\n3.0.10 (2015-09-15)\n-------------------\n\n- Fix migration-view, lp-migration-after and after-migration-cleanup.\n  [pbauer]\n\n- Fix translation-map.\n  Fixes https://github.com/plone/plone.app.multilingual/issues/175\n  [pbauer]\n\n\n3.0.9 (2015-09-14)\n------------------\n\n- Add auth-key to pam-migration.\n  [pbauer]\n\n\n3.0.8 (2015-09-14)\n------------------\n\n- Fix @@relocate-content.\n  [pbauer]\n\n\n3.0.7 (2015-09-12)\n------------------\n\n- Updated basque translation\n  [erral]\n\n\n3.0.6 (2015-08-20)\n------------------\n\n- Rerelease due to possible brown bag release.  Jenkins complains\n  about 3.0.5.\n  [maurits]\n\n\n3.0.5 (2015-08-20)\n------------------\n\n- Move @@multilingual-selector registration from PloneRoot to Navigation root\n  This allows to hide language folders in nginx and to use different domains.\n  [do3cc]\n\n- Update Traditional Chinese translation.\n  [l34marr]\n\n\n3.0.4 (2015-07-18)\n------------------\n\n- Adapt to plone.protect in case its old content.\n  [bloodbare]\n\n- Waiting for patterns to test the add translation on robot framework.\n  [bloodbare]\n\n- Remove superfluous 'for'.\n  [fulv]\n\n\n3.0.3 (2015-06-05)\n------------------\n\n- Remove CMFDefault dependency\n  [tomgross]\n\n\n3.0.2 (2015-05-13)\n------------------\n\n- Fix ``containsobjects`` field, renamed to contains_objects\n  [gforcada]\n\n\n3.0.1 (2015-05-04)\n------------------\n\n- Japanese translations.\n  [terapyon]\n\n- Update version information for Plone 5 in ``README.rst``.\n  [saily]\n\n\n3.0.0 (2015-03-26)\n------------------\n\n- Adaptation of plone.app.multilingual for Plone 5. Moved ILanguage to CMFPlone,\n  events only executed when browserlayer is installed, control panel integrated\n  on z3cform with Plone5.\n  [bloodbare]\n\n\n2.0.0 (2015-03-24)\n------------------\n\n- Add Traditional Chinese translation.\n  [l34marr]\n\n2.0a4 (2015-03-04)\n------------------\n\n- Remove dependency on zope.app.container and zope.app.initd\n  [joka]\n\n- Add more common api functions and test them.\n  [jensens]\n\n- Refactor locations of code in dx to bundle stuff at a sane place.\n  [jensens]\n\n- Remove BLACKLIST_IDS, with LIF this is superfluous.\n  [jensens]\n\n- Remove LanguageTool patch, meanwhile superfluous.\n  [jensens]\n\n- Add new ``bootstrap.py`` to support new parameter ``--setuptools-version``.\n  [saily]\n\n- Fixed language independent fields in ++addtranslation++\n  requires ``plone.z3cform >= 0.8.1``\n  [jensens, agitator]\n\n- Add uninstall hook to run uninstall profile on deactivation\n  [datakurre]\n\n- Fix behavior registration on activation for all Dexterity types\n  without dependency to ``plone.app.contenttypes``.\n  [datakurre]\n\n- Do not block acquisition on LRF for acl_users, portal_url (both broke login\n  form) and portal_catalog any more.\n  [jensens]\n\n- Feature: Introduce a set variable BLACK_LIST_IDS which is used as a central\n  place for blacklisted object ids not to take into account as neutral\n  content or in LRF. It unifies the formerly cluttered different combinations\n  of tests with same goal.\n  [jensens]\n\n- Cleanup: Pep8, utf8-headers, readability, ..., code-analysis now runs.\n  [jensens]\n\n- Fix issue where universal link ignored the language cookie\n  [datakurre]\n\n- Fix Plone 5 compatibility issues\n  [martior]\n\n- Add a manual folder to LRF migration view\n  [datakurre]\n\n- Fix schema editor plugin to not break schema editors outside FTI (e.g.\n  ``collective.easyform``)\n  [datakurre]\n\n2.0a3 (2014-05-30)\n------------------\n\n- Show 'Translate into' menu in plone-contentmenu only when having permission\n  to translate.\n  [saily]\n\n- Use *Modify portal content* permission for *Edit* action on Language Root\n  Folders.\n  [saily]\n\n- Move ``devel`` to ``src`` folder, update ``MANIFEST.in``,\n  ``setup.py``, ``buildout.cfg`` and ``.gitignore`` to fit that new structure.\n  Updated docs.\n  [saily]\n\n- Prepare tests to Plone 5\n  [saily]\n\n\n2.0a2 (2014-03-27)\n------------------\n\n- Fix alternate language viewlet\n  [saily]\n\n- Fix tests. Don't rely on translateable strings in functional tests,\n  translations may change.\n  [saily]\n\n- Add uninstall profile.\n  [thet]\n\n\n2.0a1 (2014-03-25)\n------------------\n\n- In the findContent method of the migrator script, do a more explicit test if\n  a content is a real, Dexterity or Archetypes based content object.\n  [thet]\n\n- ``createdEvent`` subscriber works now in request-free environments too.\n  [jensens]\n\n- Download latest v1 ``bootstrap.py``\n  [saily]\n\n- Fix an import issue in ``upgrades.py``\n  [saily]\n\n- Add code analysis to ``plone-test-4.x.cfg`` and ``plone-test-5.x.cfg``\n  [saily]\n\n- Huge PEP8 and Flake8 cleanup. Please run ``bin/code-analysis`` before\n  committing. A git pre-commit hook should be added automatically through\n  buildout.\n  [saily]\n\n- Ensure ``plone.app.controlpanel.Language`` permission is present.\n  [saily]\n\n- Merge ``add.py`` and ``add_translation_form.py`` into one file\n  [saily]\n\n- Rename ``update_translation_form.py`` to ``update.py``\n  [saily]\n\n- Rename ``remove_translation_form.py`` to ``remove.py``\n  [saily]\n\n- Remove ``five.grok`` in browser directory.\n  [saily]\n\n\n1.2 - 2013-09-24\n----------------\n\n- Better testsetup for robot tests using it's own layer.\n  [saily]\n\n- Revert translation: display of default pages of folders (it doesn't show\n  content which doesn't have 'is_default_page' attributes).\n  [bogdangi]\n\n- Add new option to allow users to bypass permission checks when updating\n  objects with language independent fields.\n  [saily]\n\n- Add a new alternate languages viewlet, see:\n  https://support.google.com/webmasters/answer/189077\n  [saily]\n\n- Remove Twitter-Bootstrap css code from ``multilingual.css`` and set\n  stylesheet rendering to authenticated users only.\n- Remove twitter bootstrap styles and make style rendered for authenticated\n  users only.  [saily]\n\n- Add an upgrade step to reimport css_registry\n  [saily]\n\n\n1.1 - 2013-06-19\n----------------\n\n- Add translation: widget missing\n- Translating folder with default_page: menu items added\n- Add translation: display of default pages of folders\n  [ksuess]\n\n- Bugfix: p.a.contentmenu fails if access to translation is not permitted.\n  Solution: Introduce restricted access and use it in vocabulary for menu.\n  [jensens]\n\n- Added ++add++ and factory support using session var to store where it comes\n  from. It maintains the old programmatic way so it's possible to create\n  translations using code.\n  [ramon]\n\n- Extend travis integration to test against Plone 4.1, 4.2, 4.3 and\n  include following dependencies into tests:\n  - ``plone.multilingual``\n  - ``plone.multilingualbehavior``\n  - ``archetypes.multilingual``\n  [saily]\n\n- plone.app.contenttypes compatibility on setup\n  [sneridagh]\n\n- Added French translation\n  [bouchardsyl]\n\n- take care to filter out translated contents\n  which do no have supported language information\n  [kiorky]\n\n- added support for language neutral objects with country specific language codes\n  by checking _combinedlanguagelist too\n  [agitator]\n\n\n1.0 - 2013-04-16\n----------------\n\n- Remove ITG usage to ITranslationManager usage\n  [ramon]\n\n- Shared folder working on old collections\n  [fgrcon]\n\n- Shared folder correct name and reference on setup\n  [ramon]\n\n- Instead of check for Dexterity, check if p.multilingualbehavior is installed.\n  If it's installed, then Dexterity is installed too\n  [sneridagh]\n\n- Fixed travis integration, extend from plone buildout-cache.\n  [saily]\n\n- Clean the migration template [erral]\n\n- Don't assume a transition called 'publish' will exist [erral]\n\n- Show language name if no native language information is available.\n  [saily]\n\n- Added Ukrainian translation\n  [kroman0]\n\n- Add to travis-ci\n  [saily]\n\n- Use drop-down instead of buttons on babel view if there are more than X\n  translations [pysailor]\n\n\n1.0rc1 - 2013-01-26\n-------------------\n\n- Improve and finish migration code and related 'Languages' configlet tab\n  [pysailor, sneridagh]\n- Testing of migration code on production sites [pysailor, erralin, sneridagh]\n- Fix broken tests and new ones [pysailor, erralin, bloodbare, sneridagh]\n- New re-designed language selector and related helper views [erralin,\n  bloodbare]\n- Not translated view improvements [erralin, bloodbare]\n- fixed getClosestDestination when translation doesn't exist [gborelli]\n- Update deprecated imports to work with Plone 4.3\n  [saily]\n\n\n1.0b3 2012-10-04\n----------------\n\n- Select the original language in the dexterity babel edit form.\n  [maurits]\n\n- Add after migration action on view\n  [do3cc]\n\n- Multilingual Map\n  [ramon]\n\n- Universal link\n  [ramon]\n\n- Catalog patch bug solving\n  [ramon]\n\n- Language selector bug solving\n  [sneridagh]\n\n- Babel view javascripts unification and optimization\n  [ramon]\n\n- Neutral language folder and menu options added\n  [ramon]\n\n- New tests\n  [sneridagh]\n\n- Moving templates to templates folder\n  [ramon]\n\n- Updating language options\n  [ramon]\n\n- Menu refactoring\n  [ramon]\n\n- Allow to see all content on adding translation\n  [ramon]\n\n\n1.0b2 - 2012-07-08\n------------------\n\n- change language index to Language to LinguaPlone coexistence\n  [ramon]\n\n- don't rebuild the complete catalog on installing\n  [pbauer]\n\n- add indexes via setuphandler instead of xml to prevents purging on reinstall\n  [pbauer]\n\n- make babel-view align fields next to each other\n  [do3cc]\n\n- updated .po files\n  [gborelli]\n\n- Added rebuild.sh script in order to simplify updating translations\n  [gborelli]\n\n- Added italian translation\n  [gborelli]\n\n- Do not fail when the front-page cannot be moved to a new folder\n  during setup.\n  [maurits]\n\n- Make it possible to override the portal_type that is used when\n  creating a root language folder.\n  [maurits]\n\n\n1.0b1 - 2012-04-03\n------------------\n\n- Added Google Translation Service ajax service [ramon]\n\n- Added babel view on AT [sneridagh]\n\n- Added babel view on dexterity [ramon]\n\n- Added the option to not filter language on folder_contents view\n  [ramon]\n\n- Added to translation menu to edit a translated language [ramon]\n\n- Initial setup of a site moving content to language folders [ramon]\n\n\n0.1a2 - 2011-12-04\n------------------\n\n- Improved Control Panel [ramon]\n\n- Improved Language Control Panel site languages selector widget to be\n  more usable.\n\n- Setup the root folder layout for each configured site languages on\n  languages control panel save settings [ramon, sneridagh]\n\n- Adapt languageselector viewlet from LP [ramon]\n\n- Re-enable and adapt the searchResults patch again [ramon]\n\n- Cleaning description of packages and registerProfile of paml\n  [sneridagh]\n\n\n0.1a1 - 2011-10-03\n------------------\n\n- Initial version [ramon, awello, sneridagh]\n",
    "bugtrack_url": null,
    "license": "GPL",
    "summary": "Multilingual Plone Content package",
    "version": "8.1.1",
    "project_urls": {
        "Homepage": "https://github.com/plone/plone.app.multilingual"
    },
    "split_keywords": [
        "language",
        "multilingual",
        "content"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1f4156bf52ac4a918edc072edf5da7f4b4408731493a6eb4a13d3e401d62c89d",
                "md5": "c83b36a1d1f6cf6bf85287385ef686be",
                "sha256": "20deadb6df202206bc9d5186d0a21d48d8c816da69116fde935e36df77f21ac1"
            },
            "downloads": -1,
            "filename": "plone.app.multilingual-8.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c83b36a1d1f6cf6bf85287385ef686be",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 199010,
            "upload_time": "2024-02-27T16:10:57",
            "upload_time_iso_8601": "2024-02-27T16:10:57.832551Z",
            "url": "https://files.pythonhosted.org/packages/1f/41/56bf52ac4a918edc072edf5da7f4b4408731493a6eb4a13d3e401d62c89d/plone.app.multilingual-8.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3b529d854ef7783dc58e47ca8f438a61aaab7010682fbac690989baeb95d60ea",
                "md5": "93a92f2ccbb46ef7160c2cf5cae31c26",
                "sha256": "7c89bfdd11aedce2ed0f689751cf63f777a917179be46e442aa2d156c7da2019"
            },
            "downloads": -1,
            "filename": "plone.app.multilingual-8.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "93a92f2ccbb46ef7160c2cf5cae31c26",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 730789,
            "upload_time": "2024-02-27T16:11:01",
            "upload_time_iso_8601": "2024-02-27T16:11:01.193173Z",
            "url": "https://files.pythonhosted.org/packages/3b/52/9d854ef7783dc58e47ca8f438a61aaab7010682fbac690989baeb95d60ea/plone.app.multilingual-8.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-27 16:11:01",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "plone",
    "github_project": "plone.app.multilingual",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "plone.app.multilingual"
}
        
Elapsed time: 0.21558s