plone.app.multilingual

37
plone.app.multilingual Next generation multilingual story http://pam.iskra.cat

Upload: ramon-bosch

Post on 13-Jun-2015

5.049 views

Category:

Technology


0 download

DESCRIPTION

plone.app.multilingual presentation at Plone Conference 2012

TRANSCRIPT

Page 1: plone.app.multilingual

plone.app.multilingual

Next generation

multilingual story

http://pam.iskra.cat

Page 2: plone.app.multilingual

Ramon Navarro Bosch

CTO at Iskra.cat

Developing Plone sites since 2003

Part time musician

- / Ramon's blog @bloodbare

Page 3: plone.app.multilingual

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

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

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

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

Enter PAM

Uses ZCA technologies

AT and DX compatible

Manage translations via unified UI

Page 8: plone.app.multilingual

Components

plone.app.multilingual (UI)

plone.multilingual (core)

plone.multilingualbehavior (DX support)

archetypes.multilingual (AT support)

Page 9: plone.app.multilingual

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

Features

Page 11: plone.app.multilingual

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

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

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

Marking LIFs in ATSame way as in LP

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

Page 15: plone.app.multilingual

Marking LIFs in DXGrok directive

In content type declaration class

from plone.multilingualbehavior import directives directives.languageindependent('field')

Page 16: plone.app.multilingual

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

Marking LIFs in DXNative

In your code

from plone.multilingualbehavior.interfaces import ILanguageIndependentFieldalsoProvides(ISchema['myField'], ILanguageIndependentField)

Page 18: plone.app.multilingual

Marking LIFs in DXThrough the web

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

Page 19: plone.app.multilingual

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

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

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

Google Translation service

Integration with GTS (paid service)

Icon in Babel view

Setup API key in Language control panel

Page 23: plone.app.multilingual

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

Internals

Page 25: plone.app.multilingual

Translatable marker interface

plone.multilingual.interfaces.ITranslatable

Page 26: plone.app.multilingual

Adapters

ITranslationManager

ITranslationLocator

ITranslationCloner

It’s easy to create “policies” with more specific adapters (translation locator,

selector, etc.)

Page 27: plone.app.multilingual

SubscribersLanguage integrity checkers

Add to container

Copy/paste

Modify

Page 28: plone.app.multilingual

Storage

Page 29: plone.app.multilingual

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

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

DEMO!

Page 32: plone.app.multilingual

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

Future

plone.app.toolbar support

Add support for Deco layouts and tiles

Page 34: plone.app.multilingual

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

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

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