2. Ramon Navarro Bosch
CTO at Iskra.cat
Developing Plone sites since 2003
Part time musician
- Ramon's blog / @bloodbare
3. Víctor Fernández de Alba
Lead web developer at Universitat Politècnica de Catalunya - Barcelona Tech
Author of Plone 3 Intranets (2010, Packt)
Developing Plone sites since 2004
- Víctor's Blog / @sneridagh
4. History
Project started at Girona (Catalonia) sprint in 2005
Gathered some of the Plone Rock Stars
Design decisions, base infrastructure
Only for AT, DX doesn’t even exist yet
5. LinguaPlone
Great product created by Jarn
“De facto” standard multilingual story for Plone
Only supports AT
Now in “legacy” status
Used (literally) in every Plone site (I've) deployed
Lots of experience embedded
6. LinguaPlone design facts
Stores translation relations into objects
Uses catalog patches to hide content depending on current language
Relies in class inheritance to extend standard AT functionalities
Not compatible with dexterity content types
7. Enter PAM
Uses ZCA technologies
AT and DX compatible
Manage translations via unified UI
11. Language root folders
Created on PAM setup
(Language control panel)
Plone folders implementing INavigationRoot
Subscribers in place...
... to guarantee integrity
... so each language is “jailed” inside its own LRF
12. Babel view
Unified edit form either for AT and DX
Not forced every time you edit a content
LP like, but with vitamins
Instant access (ajaxified) to other available translations in the left panel
13. Language independent fields
No canonical implies changes in LIFs behavior
Users can change the content inside a LIF and it gets replicated to other
translation objects
14. Marking LIFs in AT
Same way as in LP
aaiSrnFed
tp.tigil(
'yil'
mFed,
wde=tp.tigigt
igtaaiSrnWde(
..
..
),
lnugIdpnetTu
agaeneedn=re
),
15. Marking LIFs in DX
Grok directive
In content type declaration class
fo poemliigabhvo ipr drcie
rm ln.utlnuleair mot ietvs
drcie.agaeneedn(fed)
ietvslnugidpnet'il'
16. Marking LIFs in DX
Supermodel
In your content type XML file declaration
<il nm=mFed
fed ae"yil"
tp=zp.ceaTxLn"
ye"oeshm.etie
lnu:needn=tu"
igaidpnet"re>
<ecito /
dsrpin >
<il>yil<tte
ttemFed/il>
<fed
/il>
17. Marking LIFs in DX
Native
In your code
fo poemliigabhvo.nefcsipr IagaeneednFed
rm ln.utlnuleairitrae mot LnugIdpnetil
asPoie(Shm[mFed] IagaeneednFed
lorvdsIcea'yil', LnugIdpnetil)
18. Marking LIFs in DX
Through the web
Via the content type definition in the Dexterity Content Types control panel.
19. Language selector policy
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 current available translations
for the current content
20. Neutral root folder support
As a necessity due to LRFs
There are use cases where “neutral” content is a must
Assets, resources, media, documents...
21. Translation map
Aid for mental sanity of site editors
Graphical way to show content and its related translations
List of untranslated content (for mirror-translated sites)
22. Google Translation service
Integration with GTS (paid service)
Icon in Babel view
Setup API key in Language control panel
23. LinguaPlone migration
Migration tab in Languages control panel
Non-destructive
Lookup your code for LP dependencies before migrating
Still rough edges, should be addressed in sprint
29. Why?
Modify translation without waking objects
Direct translation map
Easier to work on all translations (import/export)
Too much catalog!!
30. Unified get/set language
Unified adapter for AT and DX
fo poemliiga.nefcsipr Iagae
rm ln.utlnulitrae mot Lnug
lnug =Iagaecnet.e_agae)
agae Lnug(otx)gtlnug(
lnug =Iagaecnet.e_agae'a)
agae Lnug(otx)stlnug(c'
32. Roadmap
XLIFF export/import
Removing catalog patch
Iterate support
LinguaPlus/Linguatools set of useful tools
Locator translation policy
Outdated translations alerts and translation workflows support
35. Special thanks to...
Anne Walter
Jonathan Lewis
Martijn Pieters
Martin Aspeli
David Glick
Patrick Gerken
Thomas Masmann
Jean Carel Brand
Mikel Larreategui
36. Thank you!
Questions?
Ramon Navarro Bosch (@bloodbare)
Víctor Fernández de Alba (@sneridagh)
http://github.com/plone/plone.app.multilingual
http://pypi.org/plone.app.multilingual
http://pam.iskra.cat