LinguaPlone 3.0
After more than a year of work, we released a new final version of LinguaPlone a couple of days ago. LinguaPlone is the multi-lingual solution for Plone.
While we have released many preview releases over the last months, we'd like to take the final release as an opportunity to give an overview of all the work.
Note that LinguaPlone 3.0 only works with Plone 3.3 and the upcoming 4.0. The Plone 4.0 support is still preliminary, as Plone itself is still in early alpha stages. If you use an older Plone 3 release, you will need to use LinguaPlone 2.4 or upgrade your Plone version.
Upgrading from earlier versions of LinguaPlone to the new 3.0 release requires an upgrade. Please visit the Add-on products control panel and execute the upgrade for LinguaPlone. Note that this requires a full catalog update and can take a substantial amount of time depending on the amount of content in your site.
The following list gives a summary of the main changes in 3.0. A full list of all changes can be found on the product page.
Performance
We substantially increased performance most notably in large sites. There's a huge number of internal technical changes mostly related to the use of the Archetypes reference engine. These improve both general rendering time of all pages as well as content editing operations. LinguaPlone will now use the catalog much more effectively and require less objects to be loaded from the database.
Multi-lingual references
So far reference fields or references in general haven't been multi-lingual aware.
Imagine creating a page at /source and one at /target. Now add "target" as a related item to "source". If you translate both pages into German, you end up with /source-de and /target-de. But "source-de" would point to "target" as a related item and not "target-de".
The same problem occurs if you use the visual editors "link by UID" feature and have links inside the body text of your pages.
In LinguaPlone 3.0 these references now point to the expected target. So "source-de" points to "target-de" if "target-de" exists. If the target is not translated into the translations language, the reference points to the target in the source language.
This behavior applies to all reference fields marked as language neutral.
Updated language selector
LinguaPlone's language selector has been updated considerably. Both using language names and flags are supported, using names per default. The names are now always in the native language. So you'll see "English", "Deutsch", "Norsk" and no longer English only names.
When switching languages the current context will be preserved as much as possible. This includes proper handling of default pages, different views and query string arguments.
If the current content item has no translation into the desired language, it will try to find the "nearest" translation in the hierarchy, instead of staying at the current page.
A new content language selector is enabled by default, which ensures that the UI language always reflects the language of the content item.
Editing
The "Translate into" menu no longer contains an entry pointing to the language control panel. The entry has repeatedly been mistaken as affecting the individual page, instead of the entire site. The control panel is now only available from the site setup screens (already in 2.4).
The split-screen translation edit view hides the right column, giving more space for the actual content editing. The behavior can be turned off via a setting in portal_properties.
Language independent fields are shown in view mode in the translate edit screens. This prevents editors from mistakenly changing these fields affecting the canonical and all translations (already in 2.2).
The metadata language in the edit screens only shows the supported languages in the site. So far you could accidentally change a content item to an unsupported language.
Technical changes
archetypes.schemaextender has been updated to seamlessly support LinguaPlone. Fully functioning support for language independent fields requires version 1.3 of schemaextender.
The latest versions of plone.app.blob are fully multi-lingual aware. In standard LinguaPlone the content of language independent fields is copied to all translations, duplicating the entire data. Blobs are able to avoid this issue and share the same underlying blob data for all translations. So a large pdf document of 100mb will only be stored once in the blob storage on the filesystem, instead of once for each language in the ZODB.
There's quite a number of internal changes, exposing various aspects of the translation logic as separate adapters or making certain features configurable via environment variables. A number of outdated code like the custom translation cache has been removed.
Contributions
Most of the work done by the Jarn team has been sponsored by the Nordic Council and Nordic Council of Ministers. Many thanks to the organization and the communications department in particular.
Significant contributions have been made by Jens Klein helping with the dark corners of the Archetypes reference engine and by Maurits van Rees helping with Plone 4.0 compatibility.
We have many more improvements planned for LinguaPlone in the coming months. Stay tuned while Plone's multi-lingual support gets even better.
Hanno Schlichting, Jarn AS