LinguaPlone Technology Preview available

Plone Solutions is proud to announce the technology preview release of LinguaPlone, an easy-to-use, powerful add-on for multilingual content management.
Plone Solutions LinguaPlone aims to be *the* multilingual/translation solution for Plone, and achieves this by being as transparent as possible and by minimizing the impact for existing applications and Plone itself. It utilizes Archetypes references to do the translation, and all content is left intact both on install and uninstall - thus, it will not disrupt your content structure in any way. It also works with WebDAV and FTP. LinguaPlone doesn't require a particular hierarchy of content, and will work with any layout of your content space. Some benefits of LinguaPlone - Totally transparent, install-and-go. - Each translation is a discrete object, and can be workflowed individually. - This also means that it works with WebDAV and FTP. - Translations are kept track of using AT references. - You can multilingual-enable your types without affecting their operation outside LinguaPlone. - Even if you uninstall LinguaPlone after adding multilingual content, all your content will be intact and will work as separate objects! The only thing that will be inactive is the references between the objects. If you re-install it, they will be back. It's very non-intrusive. - Supporting multilingual capabilities is a 4 (!) line addition to your Archetypes class, and does not alter the functionality of the class when used outside LinguaPlone. - Fully integrated with ATContentTypes, so the basic content types are translatable. - Supports language-independent fields (example: dates, first/last names) for fields you want to be the same across translations, and updated in all languages if one of them changes. - Uses the notion of Canonical versions, so you can do interesting things with workflow, like invalidate all translations of a document when the master copy has changed. Dependencies Requires: - Archetypes 1.3 branch from the CVS - the 1.3b2 release is not sufficient. - An updated PloneLanguageTool - included in this release of LinguaPlone. - Plone 2.0.3 or up Download "Download LinguaPlone from the Collective": Credits LinguaPlone is developed and maintained by "Plone Solutions": Initial idea/architecture and general help by Kapil Thangavelu and Benjamin Saller of "Object Realms": LinguaPlone - quick usage instructions LinguaPlone ships with a few example types that demonstrates the translation mechanism. It's trivial to add this to your own classes (see the README), but to save you the hassle, you can try this simple experiment: - Make sure you have Archetypes from the 1.3 branch installed, preferrably a recent checkout from the CVS. Version 1.3b2 will not work. LinguaPlone will not work with the default AT version shipping with Plone 2.0 either. The target version for LinguaPlone is Plone 2.1 and Archetypes 1.3. One of the reasons this is a Technology Preview. ;) - Put LinguaPlone and PloneLanguageTool in your Products directory - (Re)start Zope - 'Plone Setup' » 'Add/Remove Products', install Archetypes, LinguaPlone and PloneLanguageTool You will now have a few extra example types to play with. For the demonstration to make sense, we need to define a list of languages, though: - Go to the ZMI of your Plone instance - Click 'portal_languages' - Select 3-4 languages from the selection list. Note that the languages are listed in their native name, so the sorting might be a bit unexpected (Spanish is Español, for example) - Press 'Save' Now we have a few languages to play with, and can go back to the Plone interface. Notice how you now have flags indicating your selected languages under the print/sendto area. There is still a portlet on the left hand side that performs the same function, this will be an optional feature when LinguaPlone is released. We now want to add a simple type: - Add a 'Simple Type' This is a multilingual-enabled content type that shows off a few of the unique features of LinguaPlone, eg. language-independent fields. - After filling out the type with some content and clicking 'Save', you will see that this content type has a pulldown menu, 'Translate into'. - Select a language you want to translate this document into. (There *is* a split-screen translation mode that is not enabled for this particular type. It should also switch the language, which it currently doesn't :) - Save this translation. - Try to switch languages by clicking the flags. That's a very simple use case for the multilingual types. If you switch to the folder contents view, you will see that they are individual objects. Developer Usage You can test it by multilingual-enabling your existing AT content types (see instructions below), or by testing the simple included types. Don't forget to select what languages should be available in 'portal_languages' in the ZMI. :) Implementation details Architecture LinguaPlone can only be used with Archetypes based content types. It provides a I18NBaseObject class that implements a ITranslatable interface that handles the translation linking. LinguaPlone provides base classes that inherits from I18NBaseObject and the regular AT base classes. Language independent fields Language independent fields are looked up from the canonical (original) translation. The value is also stored on each translated object so every object has every attribute in case it is moved out of a translation context or some attributes (like start and end on Events) are referenced directly. Language independence is set in the AT schema definition. Only AT based content types can have language independent fields. Language lookup The language tool returns a list of languages to look for. If there is no fallback, there will be only one element in the list. Enable i18n in your content types At the top, **instead** of 'import * from Archetypes.public', you add:: try: from Products.LinguaPlone.public import * except ImportError: # No multilingual support from Products.Archetypes.public import * For the fields that are language independent, you add 'languageIndependent=1' in the schema definition. To do before 1.0 release - LanguageIndex to to support fallback in catalog searches if fallback is turned on in PLT - Enable language aware references tool to enable linking to canonical and retrieval of correct translation - Make browserDefault language aware - Add ITranslatable interface to Plone - File and image fields need special attention when language independent. If you create content, upload file, then create a translation the file is not copied over to the translation, and will not be copied over when saving, like other fields will. Can either sync on save or copy everything over when creating the translation. Accessor lookup should work as normal. - When translating, the interface doesn't switch into the correct language. It should. :) - Folder contents should be language aware - The flags should be grayed-out when the language is not available, but you can switch to it. - The current language needs a glow marker. Known issues If a field is languageIndependent in a base class, but not in a class inherited from the base class, new mutators will not be generated for the inheriting class. Basically you can't remove the language independence from a base class, but you can add it. License LinguaPlone will eventually be released under an (L)GPL license. However, since this is still pre-release material, it is still copyrighted and proprietary software for the time being. The reasons for this isn't to make life difficult, but has a couple of very simple reasons: - If people deploy this in its current state (admittedly working better than a lot of the available multilingual solutions), it can reflect badly on LinguaPlone as a product, and Plone Solutions as a company. We know how tempting it is to deploy a solution that seems to work, but it's still untested, and we urge you to wait until it's a bit more mature. We can't guarantee that the upgrade process will be smooth quite yet, and it's not something we would like you to bet your customer relationships on. - The code is not in a state where it should be modified and/or hacked, since this will make it harder to keep the core clean. It's a very slippery slope when you start modifying the surrounding infrastructure in your project to accomodate the needs of a product (example: multilingual navtree) - and it's not a direction we want LinguaPlone to take. It should be transparent, and Just Work. To state it as clearly as possible:: This is a *technology preview* of LinguaPlone, not a finished product. You are hereby granted permission for testing and evaluation purposes only. You may not use it for customer deployments, paid projects or for public solutions, not even for your company intranet. You can not modify the software and use it even if you contribute the code back. LinguaPlone *will* be released under the GPL or LGPL license when it's ready. If you have any questions about this statement and license, please contact Plone Solutions. So why are we releasing this? This release has the following purposes: 1. Allow you to evaluate LinguaPlone and compare it with existing solutions in the multilingual space to decide what's coming up. 2. Allow you to test it with your applications, and be able to troubleshoot any problems before version 1.0 is released. 3. Allow you to give feedback on what's already here. 4. Allow us to spend some extra time to get it Right. When will it be ready? We expect LinguaPlone to be ready for a 1.0 (L)GPLed release at the Plone Conference in Vienna in September 2004, accompanied by an in-depth tutorial at the conference. If you want to make it happen faster, if you have a project that needs a solid multilingual solution, you can help it happen faster by sponsoring the project. This is *not* the main motivation why we are doing this, though - we don't expect to get any sponsors for this project, and it will be done when it's ready. We still want to show you what's coming, so you can evaluate the solution and compare it with your other options for multilingual content management. **Helge Tesdal, Geir Bækholt, Alexander Limi - Plone Solutions** "Plone Solutions website":