SlideShare a Scribd company logo
1 of 37
Download to read offline
plone.app.multilingual
     Next generation
     multilingual story
       http://pam.iskra.cat
Ramon Navarro Bosch
   CTO at Iskra.cat
   Developing Plone sites since 2003

   Part time musician




     -   Ramon's blog / @bloodbare
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
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
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
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
Enter PAM
Uses ZCA technologies

AT and DX compatible
Manage translations via unified UI
Components
plone.app.multilingual (UI)

plone.multilingual (core)


plone.multilingualbehavior (DX support)
archetypes.multilingual (AT support)
Rules of design
1. There is no canonical content object
2. Strict language root folders

3. Neutral support outside LRF
Features
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
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
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
Marking LIFs in AT
          Same way as in LP
aaiSrnFed
 tp.tigil(
   'yil'
    mFed,
   wde=tp.tigigt
    igtaaiSrnWde(
   ..
    ..
   ),
   lnugIdpnetTu
    agaeneedn=re
),
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'
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>
Marking LIFs in DX
                          Native

                        In your code
fo poemliigabhvo.nefcsipr IagaeneednFed
 rm ln.utlnuleairitrae mot LnugIdpnetil
asPoie(Shm[mFed] IagaeneednFed
 lorvdsIcea'yil', LnugIdpnetil)
Marking LIFs in DX
                             Through the web

Via the content type definition in the Dexterity Content Types control panel.
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
Neutral root folder support
 As a necessity due to LRFs

 There are use cases where “neutral” content is a must
 Assets, resources, media, documents...
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)
Google Translation service
    Integration with GTS (paid service)
    Icon in Babel view
    Setup API key in Language control panel
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
Internals
Translatable marker interface
poemliiga.nefcsIrnltbe
 ln.utlnulitrae.Tasaal
Adapters
ITranslationManager

ITranslationLocator
ITranslationCloner
It’s easy to create “policies” with more specific adapters (translation locator,
selector, etc.)
Subscribers
Language integrity checkers
         Add to container

         Copy/paste

         Modify
Storage
Why?
Modify translation without waking objects

Direct translation map
Easier to work on all translations (import/export)

Too much catalog!!
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'
DEMO!
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
Future
plone.app.toolbar support

Add support for Deco layouts and tiles
Sprint!
LinguaPlone Migration improvements
UI Rough edges

More Testing and use cases
Locator translation policy


Join us on PC Sprint!

Special thanks to...
      Anne Walter

      Jonathan Lewis
      Martijn Pieters

      Martin Aspeli
      David Glick
      Patrick Gerken
      Thomas Masmann

      Jean Carel Brand
      Mikel Larreategui
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
plone.app.multilingual

More Related Content

What's hot

How to use Ruby code inside Elixir
How to use Ruby code inside ElixirHow to use Ruby code inside Elixir
How to use Ruby code inside ElixirWeverton Timoteo
 
Ch1 language design issue
Ch1 language design issueCh1 language design issue
Ch1 language design issueJigisha Pandya
 
Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?Eelco Visser
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonJaya Kumari
 
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...lennartkats
 
Lecture 1 Compiler design , computation
Lecture 1 Compiler design , computation Lecture 1 Compiler design , computation
Lecture 1 Compiler design , computation Rebaz Najeeb
 
Theory of programming
Theory of programmingTheory of programming
Theory of programmingtcc_joemarie
 
Ndu06 typesof language
Ndu06 typesof languageNdu06 typesof language
Ndu06 typesof languagenicky_walters
 
Language Engineering in the Cloud
Language Engineering in the CloudLanguage Engineering in the Cloud
Language Engineering in the Cloudlennartkats
 
Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)lennartkats
 
Principles Of Programing Languages
Principles Of Programing LanguagesPrinciples Of Programing Languages
Principles Of Programing LanguagesMatthew McCullough
 
The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)lennartkats
 
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)lennartkats
 
Compiler Design
Compiler DesignCompiler Design
Compiler DesignMir Majid
 
OOP Comparative Study
OOP Comparative StudyOOP Comparative Study
OOP Comparative StudyDarren Tan
 

What's hot (20)

How to use Ruby code inside Elixir
How to use Ruby code inside ElixirHow to use Ruby code inside Elixir
How to use Ruby code inside Elixir
 
Ch1 language design issue
Ch1 language design issueCh1 language design issue
Ch1 language design issue
 
Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?Compiler Construction | Lecture 1 | What is a compiler?
Compiler Construction | Lecture 1 | What is a compiler?
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
Integrated Language Definition Testing: Enabling Test-Driven Language Develop...
 
Plc part 1
Plc part 1Plc part 1
Plc part 1
 
Lecture 1 Compiler design , computation
Lecture 1 Compiler design , computation Lecture 1 Compiler design , computation
Lecture 1 Compiler design , computation
 
Theory of programming
Theory of programmingTheory of programming
Theory of programming
 
Ndu06 typesof language
Ndu06 typesof languageNdu06 typesof language
Ndu06 typesof language
 
ASSIGNMENT-II(a)
ASSIGNMENT-II(a)ASSIGNMENT-II(a)
ASSIGNMENT-II(a)
 
perl lauange
perl lauangeperl lauange
perl lauange
 
Language Engineering in the Cloud
Language Engineering in the CloudLanguage Engineering in the Cloud
Language Engineering in the Cloud
 
Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)Using Aspects for Language Portability (SCAM 2010)
Using Aspects for Language Portability (SCAM 2010)
 
Principles Of Programing Languages
Principles Of Programing LanguagesPrinciples Of Programing Languages
Principles Of Programing Languages
 
LIL Presentation
LIL PresentationLIL Presentation
LIL Presentation
 
The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)The Spoofax Language Workbench (SPLASH 2010)
The Spoofax Language Workbench (SPLASH 2010)
 
Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)Remix Your Language Tooling (JSConf.eu 2012)
Remix Your Language Tooling (JSConf.eu 2012)
 
Create Your Own Language
Create Your Own LanguageCreate Your Own Language
Create Your Own Language
 
Compiler Design
Compiler DesignCompiler Design
Compiler Design
 
OOP Comparative Study
OOP Comparative StudyOOP Comparative Study
OOP Comparative Study
 

Viewers also liked

Think innovation issue 4 share - scamper
Think innovation issue 4   share - scamperThink innovation issue 4   share - scamper
Think innovation issue 4 share - scamperThinkInnovation
 
World Cultures Slide Show
World Cultures Slide ShowWorld Cultures Slide Show
World Cultures Slide ShowMrs. McCabe
 
Flower Presentation
Flower PresentationFlower Presentation
Flower PresentationMrs. McCabe
 
Bridges Of 2008 No Names
Bridges Of 2008   No NamesBridges Of 2008   No Names
Bridges Of 2008 No Nameslisadydx
 
Hosting Startup Tot Enterprise
Hosting Startup Tot EnterpriseHosting Startup Tot Enterprise
Hosting Startup Tot EnterpriseCombell NV
 
Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...
Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...
Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...Pedro França
 
Qlda Chp2 Quan Ly Tong The
Qlda Chp2 Quan Ly Tong TheQlda Chp2 Quan Ly Tong The
Qlda Chp2 Quan Ly Tong TheQuynh Khuong
 
Aviso nº 3 CONTRATAÇÃO DE ESCOLA Técnicos Especializados
Aviso nº 3    CONTRATAÇÃO DE ESCOLA  Técnicos EspecializadosAviso nº 3    CONTRATAÇÃO DE ESCOLA  Técnicos Especializados
Aviso nº 3 CONTRATAÇÃO DE ESCOLA Técnicos EspecializadosPedro França
 
Conte \"La Castanyera\"
Conte \"La Castanyera\"Conte \"La Castanyera\"
Conte \"La Castanyera\"Veronicavm
 
Brand Valuation - Review of the 2013 League Tables
Brand Valuation - Review of the 2013 League TablesBrand Valuation - Review of the 2013 League Tables
Brand Valuation - Review of the 2013 League TablesType 2 Consulting
 
Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Combell NV
 

Viewers also liked (20)

Skies.Mccabe
Skies.MccabeSkies.Mccabe
Skies.Mccabe
 
Think innovation issue 4 share - scamper
Think innovation issue 4   share - scamperThink innovation issue 4   share - scamper
Think innovation issue 4 share - scamper
 
Musicalsby144
Musicalsby144Musicalsby144
Musicalsby144
 
Semicolon Cautions
Semicolon CautionsSemicolon Cautions
Semicolon Cautions
 
World Cultures Slide Show
World Cultures Slide ShowWorld Cultures Slide Show
World Cultures Slide Show
 
Flower Presentation
Flower PresentationFlower Presentation
Flower Presentation
 
Poetic Landscapes
Poetic LandscapesPoetic Landscapes
Poetic Landscapes
 
Bridges Of 2008 No Names
Bridges Of 2008   No NamesBridges Of 2008   No Names
Bridges Of 2008 No Names
 
Gospel at home 2
Gospel at home 2Gospel at home 2
Gospel at home 2
 
Hosting Startup Tot Enterprise
Hosting Startup Tot EnterpriseHosting Startup Tot Enterprise
Hosting Startup Tot Enterprise
 
Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...
Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...
Lista Unitária de Ordenação Final Horário nº 29- Grupo de recrutamento de cód...
 
Qlda Chp2 Quan Ly Tong The
Qlda Chp2 Quan Ly Tong TheQlda Chp2 Quan Ly Tong The
Qlda Chp2 Quan Ly Tong The
 
Anurag&Rupali
Anurag&RupaliAnurag&Rupali
Anurag&Rupali
 
25 n 2010_powerpointatalayas
25 n 2010_powerpointatalayas25 n 2010_powerpointatalayas
25 n 2010_powerpointatalayas
 
Mohenjo Daro
Mohenjo DaroMohenjo Daro
Mohenjo Daro
 
Aviso nº 3 CONTRATAÇÃO DE ESCOLA Técnicos Especializados
Aviso nº 3    CONTRATAÇÃO DE ESCOLA  Técnicos EspecializadosAviso nº 3    CONTRATAÇÃO DE ESCOLA  Técnicos Especializados
Aviso nº 3 CONTRATAÇÃO DE ESCOLA Técnicos Especializados
 
Conte \"La Castanyera\"
Conte \"La Castanyera\"Conte \"La Castanyera\"
Conte \"La Castanyera\"
 
Blogger Sofrasi Sunum
Blogger Sofrasi SunumBlogger Sofrasi Sunum
Blogger Sofrasi Sunum
 
Brand Valuation - Review of the 2013 League Tables
Brand Valuation - Review of the 2013 League TablesBrand Valuation - Review of the 2013 League Tables
Brand Valuation - Review of the 2013 League Tables
 
Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012Hybrid Cloud PHPUK2012
Hybrid Cloud PHPUK2012
 

Similar to plone.app.multilingual

Putting DITA Localization into Practice
Putting DITA Localization into PracticePutting DITA Localization into Practice
Putting DITA Localization into PracticeXMetaL
 
Beyond 49x Transformers: Don't be afraid of (the) Python!
Beyond 49x Transformers: Don't be afraid of (the) Python!Beyond 49x Transformers: Don't be afraid of (the) Python!
Beyond 49x Transformers: Don't be afraid of (the) Python!Safe Software
 
Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...
Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...
Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...Suite Solutions
 
Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...IndicThreads
 
C:\Users\User\Desktop\Eclipse Infocenter
C:\Users\User\Desktop\Eclipse InfocenterC:\Users\User\Desktop\Eclipse Infocenter
C:\Users\User\Desktop\Eclipse InfocenterSuite Solutions
 
CLTL: Description of web services and sofware. Nijmegen 2013
CLTL: Description of web services and sofware. Nijmegen 2013CLTL: Description of web services and sofware. Nijmegen 2013
CLTL: Description of web services and sofware. Nijmegen 2013Rubén Izquierdo Beviá
 
introduction of python in data science
introduction of python in data scienceintroduction of python in data science
introduction of python in data sciencebhavesh lande
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonMohammed Rafi
 
Introduction to domino_global_workbench_8.5
Introduction to domino_global_workbench_8.5Introduction to domino_global_workbench_8.5
Introduction to domino_global_workbench_8.5hepeiwei
 
Multi Lingual Websites In Umbraco
Multi Lingual Websites In UmbracoMulti Lingual Websites In Umbraco
Multi Lingual Websites In UmbracoPaul Marden
 
Os Worthington
Os WorthingtonOs Worthington
Os Worthingtonoscon2007
 
[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in actionMickael Istria
 
Fedora Overview
Fedora OverviewFedora Overview
Fedora Overvieweposthumus
 
Software Internationalization Crash Course
Software Internationalization Crash CourseSoftware Internationalization Crash Course
Software Internationalization Crash CourseWill Iverson
 

Similar to plone.app.multilingual (20)

Putting DITA Localization into Practice
Putting DITA Localization into PracticePutting DITA Localization into Practice
Putting DITA Localization into Practice
 
Beyond 49x Transformers: Don't be afraid of (the) Python!
Beyond 49x Transformers: Don't be afraid of (the) Python!Beyond 49x Transformers: Don't be afraid of (the) Python!
Beyond 49x Transformers: Don't be afraid of (the) Python!
 
Php packages
Php packagesPhp packages
Php packages
 
CLTL Software and Web Services
CLTL Software and Web Services CLTL Software and Web Services
CLTL Software and Web Services
 
Olf2016
Olf2016Olf2016
Olf2016
 
Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...
Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...
Understanding and Configuring the FO Plug-in for Generating PDF Files: Part I...
 
Tlf2016
Tlf2016Tlf2016
Tlf2016
 
Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...Building scalable and language-independent Java services using Apache Thrift ...
Building scalable and language-independent Java services using Apache Thrift ...
 
Lfnw2016
Lfnw2016Lfnw2016
Lfnw2016
 
C:\Users\User\Desktop\Eclipse Infocenter
C:\Users\User\Desktop\Eclipse InfocenterC:\Users\User\Desktop\Eclipse Infocenter
C:\Users\User\Desktop\Eclipse Infocenter
 
CLTL: Description of web services and sofware. Nijmegen 2013
CLTL: Description of web services and sofware. Nijmegen 2013CLTL: Description of web services and sofware. Nijmegen 2013
CLTL: Description of web services and sofware. Nijmegen 2013
 
introduction of python in data science
introduction of python in data scienceintroduction of python in data science
introduction of python in data science
 
Epub IDPF update & futures-Garth Conboy
Epub IDPF update & futures-Garth ConboyEpub IDPF update & futures-Garth Conboy
Epub IDPF update & futures-Garth Conboy
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Introduction to domino_global_workbench_8.5
Introduction to domino_global_workbench_8.5Introduction to domino_global_workbench_8.5
Introduction to domino_global_workbench_8.5
 
Multi Lingual Websites In Umbraco
Multi Lingual Websites In UmbracoMulti Lingual Websites In Umbraco
Multi Lingual Websites In Umbraco
 
Os Worthington
Os WorthingtonOs Worthington
Os Worthington
 
[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action[EclipseCon France 2017] Language Server Protocol in action
[EclipseCon France 2017] Language Server Protocol in action
 
Fedora Overview
Fedora OverviewFedora Overview
Fedora Overview
 
Software Internationalization Crash Course
Software Internationalization Crash CourseSoftware Internationalization Crash Course
Software Internationalization Crash Course
 

More from Ramon Navarro

Pipelines for model deployment
Pipelines for model deploymentPipelines for model deployment
Pipelines for model deploymentRamon Navarro
 
How containers helped a SaaS startup be developed and go live
How containers helped a SaaS startup be developed and go liveHow containers helped a SaaS startup be developed and go live
How containers helped a SaaS startup be developed and go liveRamon Navarro
 
Plone 5 and machine learning
Plone 5 and machine learningPlone 5 and machine learning
Plone 5 and machine learningRamon Navarro
 
CI on large open source software : Plone & Plone 5 is here!
CI on large open source software : Plone & Plone 5 is here!CI on large open source software : Plone & Plone 5 is here!
CI on large open source software : Plone & Plone 5 is here!Ramon Navarro
 
Resource registries plone conf 2014
Resource registries plone conf 2014Resource registries plone conf 2014
Resource registries plone conf 2014Ramon Navarro
 
Multilingual sites in plone
Multilingual sites in ploneMultilingual sites in plone
Multilingual sites in ploneRamon Navarro
 
Presentacio meetup Python BCN
Presentacio meetup Python BCNPresentacio meetup Python BCN
Presentacio meetup Python BCNRamon Navarro
 
WPD Barcelona 2008 Què és Plone ?
WPD Barcelona 2008 Què és Plone ?WPD Barcelona 2008 Què és Plone ?
WPD Barcelona 2008 Què és Plone ?Ramon Navarro
 

More from Ramon Navarro (12)

Guillotina
GuillotinaGuillotina
Guillotina
 
Pipelines for model deployment
Pipelines for model deploymentPipelines for model deployment
Pipelines for model deployment
 
Plone server
Plone serverPlone server
Plone server
 
How containers helped a SaaS startup be developed and go live
How containers helped a SaaS startup be developed and go liveHow containers helped a SaaS startup be developed and go live
How containers helped a SaaS startup be developed and go live
 
Plone 5 and machine learning
Plone 5 and machine learningPlone 5 and machine learning
Plone 5 and machine learning
 
CI on large open source software : Plone & Plone 5 is here!
CI on large open source software : Plone & Plone 5 is here!CI on large open source software : Plone & Plone 5 is here!
CI on large open source software : Plone & Plone 5 is here!
 
Resource registries plone conf 2014
Resource registries plone conf 2014Resource registries plone conf 2014
Resource registries plone conf 2014
 
Pyramid
PyramidPyramid
Pyramid
 
Multilingual sites in plone
Multilingual sites in ploneMultilingual sites in plone
Multilingual sites in plone
 
Cafè amb web
Cafè amb webCafè amb web
Cafè amb web
 
Presentacio meetup Python BCN
Presentacio meetup Python BCNPresentacio meetup Python BCN
Presentacio meetup Python BCN
 
WPD Barcelona 2008 Què és Plone ?
WPD Barcelona 2008 Què és Plone ?WPD Barcelona 2008 Què és Plone ?
WPD Barcelona 2008 Què és Plone ?
 

Recently uploaded

TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

plone.app.multilingual

  • 1. plone.app.multilingual Next generation multilingual story http://pam.iskra.cat
  • 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
  • 9. Rules of design 1. There is no canonical content object 2. Strict language root folders 3. Neutral support outside LRF
  • 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
  • 26. Adapters ITranslationManager ITranslationLocator ITranslationCloner It’s easy to create “policies” with more specific adapters (translation locator, selector, etc.)
  • 27. Subscribers Language integrity checkers Add to container Copy/paste Modify
  • 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'
  • 31. DEMO!
  • 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
  • 33. Future plone.app.toolbar support Add support for Deco layouts and tiles
  • 34. Sprint! LinguaPlone Migration improvements UI Rough edges More Testing and use cases Locator translation policy Join us on PC Sprint!

  • 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