plone.app.multilingual
-
Upload
ramon-bosch -
Category
Technology
-
view
5.049 -
download
0
description
Transcript of plone.app.multilingual
![Page 1: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/1.jpg)
plone.app.multilingual
Next generation
multilingual story
http://pam.iskra.cat
![Page 2: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/2.jpg)
Ramon Navarro Bosch
CTO at Iskra.cat
Developing Plone sites since 2003
Part time musician
- / Ramon's blog @bloodbare
![Page 3: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/3.jpg)
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
![Page 4: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/4.jpg)
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
![Page 5: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/5.jpg)
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
![Page 6: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/6.jpg)
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
![Page 7: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/7.jpg)
Enter PAM
Uses ZCA technologies
AT and DX compatible
Manage translations via unified UI
![Page 8: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/8.jpg)
Components
plone.app.multilingual (UI)
plone.multilingual (core)
plone.multilingualbehavior (DX support)
archetypes.multilingual (AT support)
![Page 9: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/9.jpg)
Rules of design
1. There is no canonical content object
2. Strict language root folders
3. Neutral support outside LRF
![Page 10: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/10.jpg)
Features
![Page 11: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/11.jpg)
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
![Page 12: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/12.jpg)
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
![Page 13: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/13.jpg)
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
![Page 14: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/14.jpg)
Marking LIFs in ATSame way as in LP
atapi.StringField( 'myField', widget=atapi.StringWidget( .... ), languageIndependent=True ),
![Page 15: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/15.jpg)
Marking LIFs in DXGrok directive
In content type declaration class
from plone.multilingualbehavior import directives directives.languageindependent('field')
![Page 16: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/16.jpg)
Marking LIFs in DXSupermodel
In your content type XML file declaration
<field name="myField" type="zope.schema.TextLine" lingua:independent="true"> <description /> <title>myField</title> </field>
![Page 17: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/17.jpg)
Marking LIFs in DXNative
In your code
from plone.multilingualbehavior.interfaces import ILanguageIndependentFieldalsoProvides(ISchema['myField'], ILanguageIndependentField)
![Page 18: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/18.jpg)
Marking LIFs in DXThrough the web
Via the content type definition in the Dexterity Content Types control panel.
![Page 19: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/19.jpg)
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
![Page 20: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/20.jpg)
Neutral root folder support
As a necessity due to LRFs
There are use cases where “neutral” content is a must
Assets, resources, media, documents...
![Page 21: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/21.jpg)
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)
![Page 22: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/22.jpg)
Google Translation service
Integration with GTS (paid service)
Icon in Babel view
Setup API key in Language control panel
![Page 23: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/23.jpg)
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
![Page 24: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/24.jpg)
Internals
![Page 25: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/25.jpg)
Translatable marker interface
plone.multilingual.interfaces.ITranslatable
![Page 26: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/26.jpg)
Adapters
ITranslationManager
ITranslationLocator
ITranslationCloner
It’s easy to create “policies” with more specific adapters (translation locator,
selector, etc.)
![Page 27: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/27.jpg)
SubscribersLanguage integrity checkers
Add to container
Copy/paste
Modify
![Page 28: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/28.jpg)
Storage
![Page 29: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/29.jpg)
Why?
Modify translation without waking objects
Direct translation map
Easier to work on all translations (import/export)
Too much catalog!!
![Page 30: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/30.jpg)
Unified get/set languageUnified adapter for AT and DX
from plone.multilingual.interfaces import ILanguage language = ILanguage(context).get_language() language = ILanguage(context).set_language('ca')
![Page 31: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/31.jpg)
DEMO!
![Page 32: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/32.jpg)
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
![Page 33: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/33.jpg)
Future
plone.app.toolbar support
Add support for Deco layouts and tiles
![Page 34: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/34.jpg)
Sprint!
LinguaPlone Migration improvements
UI Rough edges
More Testing and use cases
Locator translation policy
Join us on PC Sprint!
![Page 35: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/35.jpg)
Special thanks to...
Anne Walter
Jonathan Lewis
Martijn Pieters
Martin Aspeli
David Glick
Patrick Gerken
Thomas Masmann
Jean Carel Brand
Mikel Larreategui
![Page 36: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/36.jpg)
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
![Page 37: plone.app.multilingual](https://reader033.fdocuments.us/reader033/viewer/2022060115/557bf3bed8b42a2b348b4dff/html5/thumbnails/37.jpg)