SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Daniel Seidel, Alkacon Software
Showcase Track
Multilingual Websites
with OpenCms
27.09.2016
● Build multilingual websites in OpenCms
● Work on an example
● The „Tutorial“ of the OpenCms demo
● Discuss the interesting bits:
● The concept of multilingual containerpages
● The properties that are important for localization
● Message bundles
● Different approaches for the website structure
● Show new features of OpenCms 10.5
What will we do?
● User-Interface localization
● Editor fields for XML Contents
● Workplace menus
● Diskus pre-containerpage approaches
● Talk about charset, encoding-problems and
alike
What will we NOT do?
● Live Demo
The website we start with
Demo
DEMO Demo
Demo
デモ
The OpenCms Tutorial
XML contents building a web page
Content 1 Content 2
Content 3
Content
4
Content
5
Content
6
content-00003.xml
Type: specification of
xmlcontent
multilingual
One page can show the same contents in different languages
index.html
Type: containerpage
unilingual
Since Opencms 9.5
● Just add a translation via the content editor
● Depending on the context the correct version is
chosen
How to localize XML content?
Available locale variants
not yet existing ones marked by "[-]"
Copy locale
Next question:
Why can we choose between only
four locales?
Locales: Global configuration
<opencms>
<system>
<internationalization>
<!-- ... -->
<localesconfigured>
<locale>en</locale>
<locale>de</locale>
<locale>fr</locale>
<locale>it</locale>
</localesconfigured>
<localesdefault>
<locale>en</locale>
<locale>de</locale>
<locale>fr</locale>
<locale>it</locale>
</localesdefault>
<!-- ... -->
opencms-system.xml
All locales, the installation supports
The order locales are chosen
Typically the entries in both
local lists are identical
● locale=en,de
● Locales in which pages can be shown
● Order is significant
● locale-available=en,de,fr,it
● Locales editable via the content editor
● Locales, not globally configured are discarded
Locale configuration via properties
Next question:
Is localization in content enough?
● Templates and Formatters may contain text that
is not part of the content
● Example: Login-Form
● Localization via message bundles
● Default Java mechanism + OpenCms extension
Localization in JSPs
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:setLocale value="${cms.locale}" />
<cms:bundle basename="org.opencms.apollo.template.schemas.login">
<!-- ... -->
<fmt:message key="apollo.login.title.loggedoff" />
<!-- ... -->
</cms:bundle>
● Problem with default bundles
● Restart of OpenCms necessary after update
● Solution
● Special resource bundle types in OpenCms
● Manipulation of the Java bundle mechanism to
work with “special bundles” as well
● No restart required
● Bundles are updated when published
Extension to Java bundles
● XML resource bundle
● XML content
● One file for all languages
● Name scheme:
bundle.base.name
● Property resource bundle
● One file per language
● Key-Value pairs as in normal
Java “.properties”-Files
● Name scheme:
bundle.base.name_{locale}
OpenCms bundle types
+ Content editor usable
+ “Copy locale” available
+ Everything in one place
- Only one person can work on a
translation at a time
- Format makes source code
editing annoying
+ Source code easily editable
+ Many Translations could be
done at the same time by
different people
- Several resources for one
bundle
Since 10.5: Graphical editor
● OpenCms 10.5 ships with a new bundle editor
● For XML and property resource bundles
The Bundle Editor
Filter
Sort
Switch
language Select
key set
Edited file
Add/delete entry
üEasy navigation and search
üOverview on all keys
üPotentially editing multiple files in one editor
üNice GUI
üSupport for bundle descriptors
Add bundle descriptor
● New resource type in OpenCms 10.5
● Unilingual
● 3 Entries: key, default value, description
● Fixes the key set for a bundle
● Name scheme: {bundle base name}_desc
● Szenario:
● JSP Developer creates descriptor
● Translation is done by differently skilled people
● Descriptor is editable only by JSP developers (via
permissions on the descriptor file)
The bundle descriptor
● Descriptor can be directly edited via bundle
editor (open it with the editor)
● Descriptor can be edited when the bundle is
edited
● If permissions suffice
Editing bundles with descriptor
View change
● Description and default value can be used
arbitrarily
● Even other editor columns can be renamed
● Adjust the column names in the editor:
● Set property bundle.descriptor.messages at
the descriptor to another bundle that contains keys
● GUI_COLUMN_HEADER_DEFAULT_0
● GUI_COLUMN_HEADER_DESCRIPTION_0
● GUI_COLUMN_HEADER_KEY_0
● GUI_COLUMN_HEADER_TRANSLATION_0
Flexibility of descriptors
● We have seen
● Concept of container pages
● Configuration of locales
● Translation of contents
● Localization in JSPs
● OpenCms specific message bundles
● The new bundle editor
● Bundle descriptors
● We are missing
● Approaches for a multilingual website's structure
Short summary
The "Single-Tree"
approach
Multilingual site – One tree
● Situation: We can render the same container
page in different locales and get the same
content
● Idea: Have just the one page for the different
languages
● Problems
● Same URL?
● How to determine the wanted language (links?)
● Localized navigation?
● More general: Localized properties?
One page – all languages
OpenCms 10.5
tackles all these
problems!
OpenCms Servlet
Resolution of URLs
CmsSingleTree
LocaleHandler
/sites/default/program/
de
/sites/default/program/
en
days.org/de/program/
days.org/en/program/
Page rendered in German
Page rendered in English
<Link>
<!-- ... Text ... -->
<URI>
<link internal="true" type="WEAK">
<target>
<![CDATA[/sites/singletree/step-1-modify-a-
page/]]>
</target>
<uuid>dff93a85-7e43-11e6-9fb2-61374ff35fd2</uuid>
</link>
</URI>
</Link>
Generation of Links
CmsLocalePrefixLinkSubstitutionHandler
ü Adds the locale prefix according to the
context
ü Not necessary to store links differently
x Can't link to other languages (from content)
● Extension of the <cms:link>-tag
● New attribute locale
JSP API – Links from JSPs
<c:set var="availableLocales">
<cms:property name="locale-available" file="search" /></c:set>
<c:set var="locales" value="${fn:split(availableLocales,',')}" />
<c:set var="currentLocale">${cms.locale}</c:set>
<c:forEach var="locale" items="${locales}">
<li><c:choose>
<c:when test="${currentLocale eq locale}">${locale}</c:when>
<c:otherwise>
<a href="<cms:link locale='${locale}'>
${cms.requestContext.uri}</cms:link>">
${locale}</a>
</c:otherwise>
</c:choose></li>
</c:forEach>
Implementation: A language switcher
● Adjusted locale handler
● Adjusted link generation
Single-Tree Configuration (I)
<!-- ... -->
<localehandler class=
"org.opencms.i18n.CmsSingleTreeLocaleHandler" />
<!-- ... -->
opencms-system.xml
<!-- ... -->
<linksubstitutionhandler>
org.opencms.staticexport.
CmsLocalePrefixLinkSubstitutionHandler
</linksubstitutionhandler>
<!-- ... -->
opencms-importexport.xml
● Add parameter "localizationMode"
● Set property "available-locales" at the site root
● Determine available locales for the language
switcher
Single-Tree Configuration (II)
<!-- ... -->
<site <!-- ... --> >
<parameters>
<param name="localizationMode">singleTree</param>
</parameters>
</site>
<!-- ... -->
opencms-system.xml
● Optionally add parameter "locale.main"
● Setting this parameter improves locale
switching/copying.
Single-Tree Configuration (III)
<!-- ... -->
<site <!-- ... --> >
<parameters>
<param name="localizationMode">singleTree</param>
<param name="locale.main">en</param>
</parameters>
</site>
<!-- ... -->
opencms-system.xml
● Properties extended with locale postfix
● E.g.: Title, Title_en, Title_en_GB
● Special JSP API for locale-specific access
● Access from "most specific" to "least specific"
● E.g.: Title in locale "en_GB" requested
● If "Title_en_GB" is found, return it. Otherwise
● If "Title_en" is found, return it. Otherwise
● If "Title" is found, return it. Otherwise
● Return Null-Property
● If a property is searched, the result with the most specific
locale, not the most direct result is returned.
● E.g.: "Title_en" from the folder is returned instead of "Title" from
the contained file, if the English title for the file is searched.
Multilingual properties - Idea
● Navigation
● Page title
● Other methods
●
●
●
Multilingual properties - Access
<cms:navigation locale="${cms.locale}" <!-- ... --> />
${cms.titleLocale[cms.locale]}
${cms:vfs(pageContext).propertyLocale
["/index.html"]["de"]["Title"]
CmsJspVfsAccessBean
<cms:resourceload <!-- ... -->>
<cms:resourceaccess var="res">
${res.propertyLocale['de']['Title']
</cms:resourceload>
CmsJspResourceAccessBean
Evaluation: Single-Tree approach
Easy to set up
Easy to maintain
Pros
Publish always for every language
Bad SEO behavior (same path for each language)
Cons
Use it for "Applications"
Essence
The "Multi-Tree"
approach
Multilingual site – multiple trees
● Typically, the top folder structure of a site in
OpenCms is organized according to the
language, this means:
● /de/ contains all German pages
● /en/ contains all English pages
● …
● The top folders should have set the property
“locale” to the respective locale
Idea: Language specific subtrees
+ Very flexible (subtrees can be totally different)
+ No SEO problems
+ Easy to understand (no implicit link adjustments)
Expected Pros and Cons
- More pages to maintain
- Hard to keep versions synchronized
- No real "link" between pages
OpenCms 10.5 tackles the problem
with missing relations between
language versions
● Szenario
● Create the site in your "main locale"
● Copy pages to other locales
● Translate page properties and content
● Keep track of pages that are local variants /
translations of each other
● New features
● "Copy page" function in Sitemap editor
● "Compare locales" view in Sitemap editor
● Some JSP API extensions (switch between
locales)
Szenario + new features
● Live Demo
Multi-Tree Support
Demo
DEMO Demo
Demo
デモ
Multi-Tree Support
● Add parameters "locale.main" and
"locale.secondary" to the site configuration
● You can also use the workplace tool "Site
configuration"
Multi-Tree Configuration
<!-- ... -->
<site <!-- ... --> >
<parameters>
<param name="locale.main">en</param>
<param name="locale.secondary">de,fr</param>
</parameters>
</site>
<!-- ... -->
opencms-system.xml
● Only for containerpages
● Different copy modes
● "Copy": Copy all suitable elements
● Option "Copy this element" on elements in
containerpages
● Copied to configured place in target sitemap
● "Reuse": Reuse all elements
● Copies only the containerpage
● "Automatic":
● "Copy" when copying to the same locale
● "Reuse" when copying to another locale (configurable)
● Page + folder are copied
The "Copy page" feature
"Copy page"
is an interesting new feature
even without different locales
But don't get your content
scattered all across the system
Compare locales features
• Locale for which related pages are shown
• Main locale marked by [*]
• Switching to all locales that are configured as
main/secondary locale for the current site
Related page in the
"Compared to" locale
Sitemap for the "Locale"
(initially the sitemap you opened)
Context menu for linked page
(of the main locale)
Show any of the linked locale
variants
Menu for an unlinked page
• Locale of currently shown sitemap
• Main locale marked by [*]
• Switching to other locales, for which a
variant of the sitemap's root page exists
● Sites view
The "Link locale variant" dialog
Site selector
Show only pages in the sitemap
Not linkable page
Already linked page
Linkable page
Colors do not indicate the "link-state" of subpages
● Locales view
The "Link locale variant" dialog
"Locale selector"
switches between sitemaps
localely linked to the current
sitemap (root pages)
Show all pages
Already linked page
Linkable page
Not linkable page
Colors do not indicate the "link-state" of subpages
● Suggested usage variants:
● Different subsites for different locale variants
● Different sites for different locale variants
(configure the same locale.main and
locale.secondary for each site)
● Keep the structure of the locale variants of the site
as similar as possible
● But, you can also:
● Connect pages of different locales somewhere in
the system
The GUI can handle this
Flexibility of the approach
● Group of locale variants of a page
● There is one fixed main locale
● Implemented via OpenCms relations from the
page variant in the secondary locale to the
page variant in the main locale
● When copying from main to other locale,
relation is added automatically
Background: Locale groups
de fr
en
CmsRelationType.LOCALE_VARIANT
● The mechanism is designed and tested for the
default OpenCms site structure
● i.e., folders with "index.html" inside
● (so "page and folder" is somehow similar)
● "Do not translate" marks are only possible for the
main locale
● Linking secondary locale variants is only possible
via the main locale
● Publish the main locale variant always first
● Delete the main locale variant always as last
● For adding/deleting a link you must have write
access to the affected secondary locale variant
Restrictions of locale groups
● "Link locale variant" is also available in the
explorer
● Context menu à Advanced à "Link locale variant"
● Only for "index.html" files (default files)
Usage without the sitemap editor
What about language
switching?
Language switcher implementation
<c:set var="langlinks" value="" />
<c:set var="showlang" value="false" />
<c:forEach var="locentry" items="${cms.localeResource}">
<c:choose>
<c:when test="${empty locentry.value}"></c:when>
<c:when test="${locentry.key == cms.locale}">
<c:set var="langlinks">${langlinks}<li class="active"><a
href="#">${locentry.key}</a></li></c:set>
</c:when>
<c:otherwise>
<c:set var="showlang" value="true" />
<c:set var="langlinks">${langlinks}<li><a
href="<cms:link>${locentry.value.link}</cms:link>">
${locentry.key}</a></li></c:set>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${showlang}"><ul>${langlinks}</ul></c:if>
● CmsJspStandardContextBean
(access for the currently requested resource)
● Map<String, CmsJspResourceWrapper>
getLocaleResource()
● <c:forEach var="loc" items="${cms.localeResource}>
● ${cms.localeResource["de"]}
● Locale getMainLocale()
● ${cms.mainLocale}
● CmsJspVfsAccessBean
(access for arbitrary resources in the VFS)
● Map<String, Map<String, CmsJspResourceWrapper>>
getLocaleResource()
● ${cms.vfs["/index.html"]["de"]}
● Map<String, Locale> getMainLocale()
● ${cms.vfs["/index.html"]
Overview: API extensions (I)
● New class: CmsJspResourceWrapper
● Extension of CmsResource with methods
● String getLink()
● Locale getMainLocale()
● Map<String, CmsJspResourceWrapper>
getLocaleResource()
● Return value of all new JSP API methods that
return resources
● Return value of altered method
● CmsJspVfsAccessBean.getReadResource()
Overview: API extensions (II)
Evaluation: Multi-Tree approach
Easy to understand
Very flexible
Maybe already your current setup
No SEO problems
Language variants can be published separately
Great management tools in OpenCms 10.5
Pros
Takes some setup time
Maintenance overhead
Cons
Use it for all "Non-Applications"
Essence
● New bundle editor
● Bundle descriptors
● "Copy page" for containerpages
● Multilingual sites: Single-tree support
● Locale and link substitution handler
● Multilingual properties (incl. extended JSP API)
● Multilingual sites: Enhanced multi-tree support
● Locale groups
● "Compare locale" tab in the Sitemap editor
● Extended JSP API
● Enhanced content editing (auto-copy locale)
Summary – OpenCms 10.5 features
Message of the talk:
We greatly improved the support
for multilingual websites in
OpenCms 10.5
● Any Questions?
Any Questions?
Fragen?
QUESTIONS ?
Questiones?
¿Preguntas?質問
Daniel Seidel
Alkacon Software GmbH
http://www.alkacon.com
http://www.opencms.org
Thank you very much for your attention!
OpenCms Days 2016:   Multilingual websites with OpenCms

Weitere ähnliche Inhalte

Was ist angesagt?

OpenCms Days 2015 Modern templates with nested containers
OpenCms Days 2015 Modern templates with nested containersOpenCms Days 2015 Modern templates with nested containers
OpenCms Days 2015 Modern templates with nested containersAlkacon Software GmbH & Co. KG
 
OpenCms Days 2016: OpenCms at the swiss seismological service
OpenCms Days 2016: OpenCms at the swiss seismological serviceOpenCms Days 2016: OpenCms at the swiss seismological service
OpenCms Days 2016: OpenCms at the swiss seismological serviceAlkacon Software GmbH & Co. KG
 
OpenCms Days 2013 - Details of the OpenCms 9 detail pages
OpenCms Days 2013 - Details of the OpenCms 9 detail pagesOpenCms Days 2013 - Details of the OpenCms 9 detail pages
OpenCms Days 2013 - Details of the OpenCms 9 detail pagesAlkacon Software GmbH & Co. KG
 
Extending JBoss EPP and Site Publisher your way
Extending JBoss EPP and Site Publisher your wayExtending JBoss EPP and Site Publisher your way
Extending JBoss EPP and Site Publisher your wayrafaelliu
 
Drupal training-1-in-mumbai
Drupal training-1-in-mumbaiDrupal training-1-in-mumbai
Drupal training-1-in-mumbaivibrantuser
 
OVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeOVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeChang W. Doh
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausWomen in Technology Poland
 
Introduction to Moodle Development
Introduction to Moodle DevelopmentIntroduction to Moodle Development
Introduction to Moodle Developmentmoorejon
 
Drupal 8: frontend development
Drupal 8: frontend developmentDrupal 8: frontend development
Drupal 8: frontend developmentsparkfabrik
 
Architecture of the Web browser
Architecture of the Web browserArchitecture of the Web browser
Architecture of the Web browserSabin Buraga
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa InitiativeNuvole
 
Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausWomen in Technology Poland
 
Drupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using DrupalDrupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using DrupalVibrant Technologies & Computers
 

Was ist angesagt? (20)

OpenCms Days 2013 - Site Management Tool
OpenCms Days 2013 - Site Management ToolOpenCms Days 2013 - Site Management Tool
OpenCms Days 2013 - Site Management Tool
 
OpenCms Days 2013 - Start rolling with OpenCms 9
OpenCms Days 2013 - Start rolling with OpenCms 9OpenCms Days 2013 - Start rolling with OpenCms 9
OpenCms Days 2013 - Start rolling with OpenCms 9
 
OpenCms Days 2015 Hidden features of OpenCms
OpenCms Days 2015 Hidden features of OpenCmsOpenCms Days 2015 Hidden features of OpenCms
OpenCms Days 2015 Hidden features of OpenCms
 
OpenCms Days 2015 Modern templates with nested containers
OpenCms Days 2015 Modern templates with nested containersOpenCms Days 2015 Modern templates with nested containers
OpenCms Days 2015 Modern templates with nested containers
 
OpenCms Days 2015 Next generation repository
OpenCms Days 2015  Next generation repositoryOpenCms Days 2015  Next generation repository
OpenCms Days 2015 Next generation repository
 
OpenCms Days 2016: OpenCms at the swiss seismological service
OpenCms Days 2016: OpenCms at the swiss seismological serviceOpenCms Days 2016: OpenCms at the swiss seismological service
OpenCms Days 2016: OpenCms at the swiss seismological service
 
OpenCms Days 2015 Advanced Solr Searching
OpenCms Days 2015 Advanced Solr SearchingOpenCms Days 2015 Advanced Solr Searching
OpenCms Days 2015 Advanced Solr Searching
 
OpenCms Days 2013 - Details of the OpenCms 9 detail pages
OpenCms Days 2013 - Details of the OpenCms 9 detail pagesOpenCms Days 2013 - Details of the OpenCms 9 detail pages
OpenCms Days 2013 - Details of the OpenCms 9 detail pages
 
Extending JBoss EPP and Site Publisher your way
Extending JBoss EPP and Site Publisher your wayExtending JBoss EPP and Site Publisher your way
Extending JBoss EPP and Site Publisher your way
 
Drupal training-1-in-mumbai
Drupal training-1-in-mumbaiDrupal training-1-in-mumbai
Drupal training-1-in-mumbai
 
OVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source TreeOVERVIEW: Chromium Source Tree
OVERVIEW: Chromium Source Tree
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
 
How browser work
How browser workHow browser work
How browser work
 
How Browsers Work
How Browsers Work How Browsers Work
How Browsers Work
 
Introduction to Moodle Development
Introduction to Moodle DevelopmentIntroduction to Moodle Development
Introduction to Moodle Development
 
Drupal 8: frontend development
Drupal 8: frontend developmentDrupal 8: frontend development
Drupal 8: frontend development
 
Architecture of the Web browser
Architecture of the Web browserArchitecture of the Web browser
Architecture of the Web browser
 
The OpenEuropa Initiative
The OpenEuropa InitiativeThe OpenEuropa Initiative
The OpenEuropa Initiative
 
Architektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan KrausArchitektura html, css i javascript - Jan Kraus
Architektura html, css i javascript - Jan Kraus
 
Drupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using DrupalDrupal - Introduction to Building Library Web Site Using Drupal
Drupal - Introduction to Building Library Web Site Using Drupal
 

Andere mochten auch

OpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud services
OpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud servicesOpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud services
OpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud servicesAlkacon Software GmbH & Co. KG
 
Lutece, CMS star du J2EE
Lutece, CMS star du J2EELutece, CMS star du J2EE
Lutece, CMS star du J2EELINAGORA
 
Liferay Portal и приемы разработки
Liferay Portal и приемы разработкиLiferay Portal и приемы разработки
Liferay Portal и приемы разработкиdevclub
 
OpenCms Days 2016: Participation and transparency portals with OpenCms
OpenCms Days 2016: Participation and transparency portals with OpenCmsOpenCms Days 2016: Participation and transparency portals with OpenCms
OpenCms Days 2016: Participation and transparency portals with OpenCmsAlkacon Software GmbH & Co. KG
 
OpenCms Days 2015 Creating Apps for the OpenCms 10 workplace
OpenCms Days 2015  Creating Apps for the OpenCms 10 workplace OpenCms Days 2015  Creating Apps for the OpenCms 10 workplace
OpenCms Days 2015 Creating Apps for the OpenCms 10 workplace Alkacon Software GmbH & Co. KG
 
OpenCmsDays 2013 - Using OpenCms 9 folders as a network drive
OpenCmsDays 2013 - Using OpenCms 9 folders as a network driveOpenCmsDays 2013 - Using OpenCms 9 folders as a network drive
OpenCmsDays 2013 - Using OpenCms 9 folders as a network driveAlkacon Software GmbH & Co. KG
 
OpenCms Days 2013 - Gradle based OpenCms build automated setup
OpenCms Days 2013 - Gradle based OpenCms build automated setupOpenCms Days 2013 - Gradle based OpenCms build automated setup
OpenCms Days 2013 - Gradle based OpenCms build automated setupAlkacon Software GmbH & Co. KG
 
OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...
OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...
OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...Alkacon Software GmbH & Co. KG
 

Andere mochten auch (16)

OpenCms Days 2016: Keynote - Introducing OpenCms 10.5
OpenCms Days 2016:   Keynote - Introducing OpenCms 10.5OpenCms Days 2016:   Keynote - Introducing OpenCms 10.5
OpenCms Days 2016: Keynote - Introducing OpenCms 10.5
 
OpenCms Days 2015 OpenCms X marks the spot
OpenCms Days 2015 OpenCms X marks the spotOpenCms Days 2015 OpenCms X marks the spot
OpenCms Days 2015 OpenCms X marks the spot
 
OpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud services
OpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud servicesOpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud services
OpenCms Days 2012 - The Dispatch - Running OpenCms 8 on Amazon cloud services
 
OpenCms Days 2012 - OpenCms on open clouds
OpenCms Days 2012 - OpenCms on open cloudsOpenCms Days 2012 - OpenCms on open clouds
OpenCms Days 2012 - OpenCms on open clouds
 
Lutece, CMS star du J2EE
Lutece, CMS star du J2EELutece, CMS star du J2EE
Lutece, CMS star du J2EE
 
OpenCms Days 2015 OCEE explained
OpenCms Days 2015 OCEE explainedOpenCms Days 2015 OCEE explained
OpenCms Days 2015 OCEE explained
 
Liferay Portal и приемы разработки
Liferay Portal и приемы разработкиLiferay Portal и приемы разработки
Liferay Portal и приемы разработки
 
OpenCms Days 2016: Participation and transparency portals with OpenCms
OpenCms Days 2016: Participation and transparency portals with OpenCmsOpenCms Days 2016: Participation and transparency portals with OpenCms
OpenCms Days 2016: Participation and transparency portals with OpenCms
 
Liferay 7
Liferay 7Liferay 7
Liferay 7
 
OpenCms Days 2015 Creating Apps for the OpenCms 10 workplace
OpenCms Days 2015  Creating Apps for the OpenCms 10 workplace OpenCms Days 2015  Creating Apps for the OpenCms 10 workplace
OpenCms Days 2015 Creating Apps for the OpenCms 10 workplace
 
OpenCmsDays 2013 - Using OpenCms 9 folders as a network drive
OpenCmsDays 2013 - Using OpenCms 9 folders as a network driveOpenCmsDays 2013 - Using OpenCms 9 folders as a network drive
OpenCmsDays 2013 - Using OpenCms 9 folders as a network drive
 
OpenCms Days 2013 - Gradle based OpenCms build automated setup
OpenCms Days 2013 - Gradle based OpenCms build automated setupOpenCms Days 2013 - Gradle based OpenCms build automated setup
OpenCms Days 2013 - Gradle based OpenCms build automated setup
 
OpenCms Days 2013 - OpenCms Partner Program
OpenCms Days 2013 - OpenCms Partner ProgramOpenCms Days 2013 - OpenCms Partner Program
OpenCms Days 2013 - OpenCms Partner Program
 
OpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with GradleOpenCms Days 2012 - Developing OpenCms with Gradle
OpenCms Days 2012 - Developing OpenCms with Gradle
 
OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...
OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...
OpenCms Days 2012 - How Software AG is optimizing workflows with OpenCms 8 an...
 
OpenCms Days 2013 - Social Connect for OpenCms Portal
OpenCms Days 2013 - Social Connect for OpenCms PortalOpenCms Days 2013 - Social Connect for OpenCms Portal
OpenCms Days 2013 - Social Connect for OpenCms Portal
 

Ähnlich wie OpenCms Days 2016: Multilingual websites with OpenCms

Multilingual WordPress
Multilingual WordPressMultilingual WordPress
Multilingual WordPressMatt Smith
 
Multilingual Drupal presentation from "Do it With Drupal"
Multilingual Drupal presentation from "Do it With Drupal"Multilingual Drupal presentation from "Do it With Drupal"
Multilingual Drupal presentation from "Do it With Drupal"Gábor Hojtsy
 
What's brewing in the eZ Systems extensions kitchen
What's brewing in the eZ Systems extensions kitchenWhat's brewing in the eZ Systems extensions kitchen
What's brewing in the eZ Systems extensions kitchenPaul Borgermans
 
Drupalcamp Atlanta 2010 Internationalization Presentation
Drupalcamp Atlanta 2010 Internationalization PresentationDrupalcamp Atlanta 2010 Internationalization Presentation
Drupalcamp Atlanta 2010 Internationalization PresentationMediacurrent
 
Multilingual WordPress (WordCamp Toronto 2014)
Multilingual WordPress (WordCamp Toronto 2014)Multilingual WordPress (WordCamp Toronto 2014)
Multilingual WordPress (WordCamp Toronto 2014)Matt Smith
 
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...Alkacon Software GmbH & Co. KG
 
Barcelona Multilanguage
Barcelona MultilanguageBarcelona Multilanguage
Barcelona Multilanguageguest3a6661
 
Multi Lingual Websites In Umbraco
Multi Lingual Websites In UmbracoMulti Lingual Websites In Umbraco
Multi Lingual Websites In UmbracoPaul Marden
 
Mean Stack for Beginners
Mean Stack for BeginnersMean Stack for Beginners
Mean Stack for BeginnersJEMLI Fathi
 
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...Ortus Solutions, Corp
 
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...Pôle Systematic Paris-Region
 
Taskfile - makefiles are fun again
Taskfile - makefiles are fun againTaskfile - makefiles are fun again
Taskfile - makefiles are fun againBertold Kolics
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScriptJorg Janke
 
Sanjip Shah: Internationalizing and Localizing WordPress Themes
Sanjip Shah: Internationalizing and Localizing  WordPress ThemesSanjip Shah: Internationalizing and Localizing  WordPress Themes
Sanjip Shah: Internationalizing and Localizing WordPress Themeswpnepal
 
Internationalizing and localizing wordpress theme
Internationalizing and localizing  wordpress themeInternationalizing and localizing  wordpress theme
Internationalizing and localizing wordpress themeSanjip Shah
 
HelsinkiJS - Clojurescript for Javascript Developers
HelsinkiJS - Clojurescript for Javascript DevelopersHelsinkiJS - Clojurescript for Javascript Developers
HelsinkiJS - Clojurescript for Javascript DevelopersJuho Teperi
 

Ähnlich wie OpenCms Days 2016: Multilingual websites with OpenCms (20)

OpenCms Days 2014 Keynote - Step up to OpenCms 9.5
OpenCms Days 2014 Keynote - Step up to OpenCms 9.5OpenCms Days 2014 Keynote - Step up to OpenCms 9.5
OpenCms Days 2014 Keynote - Step up to OpenCms 9.5
 
Multilingual WordPress
Multilingual WordPressMultilingual WordPress
Multilingual WordPress
 
Multilingual Drupal presentation from "Do it With Drupal"
Multilingual Drupal presentation from "Do it With Drupal"Multilingual Drupal presentation from "Do it With Drupal"
Multilingual Drupal presentation from "Do it With Drupal"
 
What's brewing in the eZ Systems extensions kitchen
What's brewing in the eZ Systems extensions kitchenWhat's brewing in the eZ Systems extensions kitchen
What's brewing in the eZ Systems extensions kitchen
 
Drupalcamp Atlanta 2010 Internationalization Presentation
Drupalcamp Atlanta 2010 Internationalization PresentationDrupalcamp Atlanta 2010 Internationalization Presentation
Drupalcamp Atlanta 2010 Internationalization Presentation
 
Multilingual WordPress (WordCamp Toronto 2014)
Multilingual WordPress (WordCamp Toronto 2014)Multilingual WordPress (WordCamp Toronto 2014)
Multilingual WordPress (WordCamp Toronto 2014)
 
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
OpenCms Days 2012 - OpenCms 8.5: Creating "in place" editable pages with the ...
 
Barcelona Multilanguage
Barcelona MultilanguageBarcelona Multilanguage
Barcelona Multilanguage
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Multi Lingual Websites In Umbraco
Multi Lingual Websites In UmbracoMulti Lingual Websites In Umbraco
Multi Lingual Websites In Umbraco
 
Mean Stack for Beginners
Mean Stack for BeginnersMean Stack for Beginners
Mean Stack for Beginners
 
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
 
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
Building a high-performance, scalable ML & NLP platform with Python, Sheer El...
 
DOC Presentation by DOC Contractor Alison McCauley
DOC Presentation by DOC Contractor Alison McCauleyDOC Presentation by DOC Contractor Alison McCauley
DOC Presentation by DOC Contractor Alison McCauley
 
Taskfile - makefiles are fun again
Taskfile - makefiles are fun againTaskfile - makefiles are fun again
Taskfile - makefiles are fun again
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
 
[submission] Final_Presentation
[submission] Final_Presentation[submission] Final_Presentation
[submission] Final_Presentation
 
Sanjip Shah: Internationalizing and Localizing WordPress Themes
Sanjip Shah: Internationalizing and Localizing  WordPress ThemesSanjip Shah: Internationalizing and Localizing  WordPress Themes
Sanjip Shah: Internationalizing and Localizing WordPress Themes
 
Internationalizing and localizing wordpress theme
Internationalizing and localizing  wordpress themeInternationalizing and localizing  wordpress theme
Internationalizing and localizing wordpress theme
 
HelsinkiJS - Clojurescript for Javascript Developers
HelsinkiJS - Clojurescript for Javascript DevelopersHelsinkiJS - Clojurescript for Javascript Developers
HelsinkiJS - Clojurescript for Javascript Developers
 

Mehr von Alkacon Software GmbH & Co. KG

OpenCms Days 2014 - How Techem handles international customer portals
OpenCms Days 2014 - How Techem handles international customer portalsOpenCms Days 2014 - How Techem handles international customer portals
OpenCms Days 2014 - How Techem handles international customer portalsAlkacon Software GmbH & Co. KG
 
OpenCms Days 2014 - OpenCms cloud setup with the FI-TS
OpenCms Days 2014 - OpenCms cloud setup with the FI-TSOpenCms Days 2014 - OpenCms cloud setup with the FI-TS
OpenCms Days 2014 - OpenCms cloud setup with the FI-TSAlkacon Software GmbH & Co. KG
 
OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...
OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...
OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...Alkacon Software GmbH & Co. KG
 
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5Alkacon Software GmbH & Co. KG
 
OpenCms Days 2014 - Introducing the 9.5 OpenCms documentation
OpenCms Days 2014 - Introducing the 9.5 OpenCms documentationOpenCms Days 2014 - Introducing the 9.5 OpenCms documentation
OpenCms Days 2014 - Introducing the 9.5 OpenCms documentationAlkacon Software GmbH & Co. KG
 
OpenCms Days 2014 - OpenCms content editor and pdf extensions
OpenCms Days 2014 - OpenCms content editor and pdf extensionsOpenCms Days 2014 - OpenCms content editor and pdf extensions
OpenCms Days 2014 - OpenCms content editor and pdf extensionsAlkacon Software GmbH & Co. KG
 

Mehr von Alkacon Software GmbH & Co. KG (14)

OpenCms Days 2015 OpenGovernment
OpenCms Days 2015 OpenGovernmentOpenCms Days 2015 OpenGovernment
OpenCms Days 2015 OpenGovernment
 
OpenCms Days 2015 OpenCms at erarta
OpenCms Days 2015 OpenCms at erarta OpenCms Days 2015 OpenCms at erarta
OpenCms Days 2015 OpenCms at erarta
 
OpenCms Days 2015 How do you develop for OpenCms?
OpenCms Days 2015 How do you develop for OpenCms?OpenCms Days 2015 How do you develop for OpenCms?
OpenCms Days 2015 How do you develop for OpenCms?
 
OpenCms Days 2015 Arkema, a leading chemicals company
OpenCms Days 2015 Arkema, a leading chemicals companyOpenCms Days 2015 Arkema, a leading chemicals company
OpenCms Days 2015 Arkema, a leading chemicals company
 
OpenCms Days 2014 - How Techem handles international customer portals
OpenCms Days 2014 - How Techem handles international customer portalsOpenCms Days 2014 - How Techem handles international customer portals
OpenCms Days 2014 - How Techem handles international customer portals
 
OpenCms Days 2014 - OpenCms cloud setup with the FI-TS
OpenCms Days 2014 - OpenCms cloud setup with the FI-TSOpenCms Days 2014 - OpenCms cloud setup with the FI-TS
OpenCms Days 2014 - OpenCms cloud setup with the FI-TS
 
OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...
OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...
OpenCms Days 2014 - OpenCms Module Development and Deployment with IntelliJ, ...
 
OpenCms Days 2014 - OpenCms 9 - A video tube?
OpenCms Days 2014 - OpenCms 9 - A video tube?OpenCms Days 2014 - OpenCms 9 - A video tube?
OpenCms Days 2014 - OpenCms 9 - A video tube?
 
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5OpenCms Days 2014 - User Generated Content in OpenCms 9.5
OpenCms Days 2014 - User Generated Content in OpenCms 9.5
 
OpenCms Days 2014 - Updating to OpenCms 9.5
OpenCms Days 2014 - Updating to OpenCms 9.5OpenCms Days 2014 - Updating to OpenCms 9.5
OpenCms Days 2014 - Updating to OpenCms 9.5
 
OpenCms Days 2014 - Using the SOLR collector
OpenCms Days 2014 - Using the SOLR collectorOpenCms Days 2014 - Using the SOLR collector
OpenCms Days 2014 - Using the SOLR collector
 
OpenCms Days 2014 - Introducing the 9.5 OpenCms documentation
OpenCms Days 2014 - Introducing the 9.5 OpenCms documentationOpenCms Days 2014 - Introducing the 9.5 OpenCms documentation
OpenCms Days 2014 - Introducing the 9.5 OpenCms documentation
 
OpenCms Days 2014 - OpenCms content editor and pdf extensions
OpenCms Days 2014 - OpenCms content editor and pdf extensionsOpenCms Days 2014 - OpenCms content editor and pdf extensions
OpenCms Days 2014 - OpenCms content editor and pdf extensions
 
Open cms days 2013 - all dressed up_release
Open cms days 2013 - all dressed up_releaseOpen cms days 2013 - all dressed up_release
Open cms days 2013 - all dressed up_release
 

Kürzlich hochgeladen

Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfIdiosysTechnologies1
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Velvetech LLC
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfFerryKemperman
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 

Kürzlich hochgeladen (20)

Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdf
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...Software Project Health Check: Best Practices and Techniques for Your Product...
Software Project Health Check: Best Practices and Techniques for Your Product...
 
Introduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdfIntroduction Computer Science - Software Design.pdf
Introduction Computer Science - Software Design.pdf
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 

OpenCms Days 2016: Multilingual websites with OpenCms

  • 1. Daniel Seidel, Alkacon Software Showcase Track Multilingual Websites with OpenCms 27.09.2016
  • 2. ● Build multilingual websites in OpenCms ● Work on an example ● The „Tutorial“ of the OpenCms demo ● Discuss the interesting bits: ● The concept of multilingual containerpages ● The properties that are important for localization ● Message bundles ● Different approaches for the website structure ● Show new features of OpenCms 10.5 What will we do?
  • 3. ● User-Interface localization ● Editor fields for XML Contents ● Workplace menus ● Diskus pre-containerpage approaches ● Talk about charset, encoding-problems and alike What will we NOT do?
  • 4. ● Live Demo The website we start with Demo DEMO Demo Demo デモ The OpenCms Tutorial
  • 5. XML contents building a web page Content 1 Content 2 Content 3 Content 4 Content 5 Content 6 content-00003.xml Type: specification of xmlcontent multilingual One page can show the same contents in different languages index.html Type: containerpage unilingual Since Opencms 9.5
  • 6. ● Just add a translation via the content editor ● Depending on the context the correct version is chosen How to localize XML content? Available locale variants not yet existing ones marked by "[-]" Copy locale Next question: Why can we choose between only four locales?
  • 7. Locales: Global configuration <opencms> <system> <internationalization> <!-- ... --> <localesconfigured> <locale>en</locale> <locale>de</locale> <locale>fr</locale> <locale>it</locale> </localesconfigured> <localesdefault> <locale>en</locale> <locale>de</locale> <locale>fr</locale> <locale>it</locale> </localesdefault> <!-- ... --> opencms-system.xml All locales, the installation supports The order locales are chosen Typically the entries in both local lists are identical
  • 8. ● locale=en,de ● Locales in which pages can be shown ● Order is significant ● locale-available=en,de,fr,it ● Locales editable via the content editor ● Locales, not globally configured are discarded Locale configuration via properties Next question: Is localization in content enough?
  • 9. ● Templates and Formatters may contain text that is not part of the content ● Example: Login-Form ● Localization via message bundles ● Default Java mechanism + OpenCms extension Localization in JSPs <%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <fmt:setLocale value="${cms.locale}" /> <cms:bundle basename="org.opencms.apollo.template.schemas.login"> <!-- ... --> <fmt:message key="apollo.login.title.loggedoff" /> <!-- ... --> </cms:bundle>
  • 10. ● Problem with default bundles ● Restart of OpenCms necessary after update ● Solution ● Special resource bundle types in OpenCms ● Manipulation of the Java bundle mechanism to work with “special bundles” as well ● No restart required ● Bundles are updated when published Extension to Java bundles
  • 11. ● XML resource bundle ● XML content ● One file for all languages ● Name scheme: bundle.base.name ● Property resource bundle ● One file per language ● Key-Value pairs as in normal Java “.properties”-Files ● Name scheme: bundle.base.name_{locale} OpenCms bundle types + Content editor usable + “Copy locale” available + Everything in one place - Only one person can work on a translation at a time - Format makes source code editing annoying + Source code easily editable + Many Translations could be done at the same time by different people - Several resources for one bundle Since 10.5: Graphical editor
  • 12. ● OpenCms 10.5 ships with a new bundle editor ● For XML and property resource bundles The Bundle Editor Filter Sort Switch language Select key set Edited file Add/delete entry üEasy navigation and search üOverview on all keys üPotentially editing multiple files in one editor üNice GUI üSupport for bundle descriptors Add bundle descriptor
  • 13. ● New resource type in OpenCms 10.5 ● Unilingual ● 3 Entries: key, default value, description ● Fixes the key set for a bundle ● Name scheme: {bundle base name}_desc ● Szenario: ● JSP Developer creates descriptor ● Translation is done by differently skilled people ● Descriptor is editable only by JSP developers (via permissions on the descriptor file) The bundle descriptor
  • 14. ● Descriptor can be directly edited via bundle editor (open it with the editor) ● Descriptor can be edited when the bundle is edited ● If permissions suffice Editing bundles with descriptor View change
  • 15. ● Description and default value can be used arbitrarily ● Even other editor columns can be renamed ● Adjust the column names in the editor: ● Set property bundle.descriptor.messages at the descriptor to another bundle that contains keys ● GUI_COLUMN_HEADER_DEFAULT_0 ● GUI_COLUMN_HEADER_DESCRIPTION_0 ● GUI_COLUMN_HEADER_KEY_0 ● GUI_COLUMN_HEADER_TRANSLATION_0 Flexibility of descriptors
  • 16. ● We have seen ● Concept of container pages ● Configuration of locales ● Translation of contents ● Localization in JSPs ● OpenCms specific message bundles ● The new bundle editor ● Bundle descriptors ● We are missing ● Approaches for a multilingual website's structure Short summary
  • 18. ● Situation: We can render the same container page in different locales and get the same content ● Idea: Have just the one page for the different languages ● Problems ● Same URL? ● How to determine the wanted language (links?) ● Localized navigation? ● More general: Localized properties? One page – all languages OpenCms 10.5 tackles all these problems!
  • 19. OpenCms Servlet Resolution of URLs CmsSingleTree LocaleHandler /sites/default/program/ de /sites/default/program/ en days.org/de/program/ days.org/en/program/ Page rendered in German Page rendered in English
  • 20. <Link> <!-- ... Text ... --> <URI> <link internal="true" type="WEAK"> <target> <![CDATA[/sites/singletree/step-1-modify-a- page/]]> </target> <uuid>dff93a85-7e43-11e6-9fb2-61374ff35fd2</uuid> </link> </URI> </Link> Generation of Links CmsLocalePrefixLinkSubstitutionHandler ü Adds the locale prefix according to the context ü Not necessary to store links differently x Can't link to other languages (from content)
  • 21. ● Extension of the <cms:link>-tag ● New attribute locale JSP API – Links from JSPs <c:set var="availableLocales"> <cms:property name="locale-available" file="search" /></c:set> <c:set var="locales" value="${fn:split(availableLocales,',')}" /> <c:set var="currentLocale">${cms.locale}</c:set> <c:forEach var="locale" items="${locales}"> <li><c:choose> <c:when test="${currentLocale eq locale}">${locale}</c:when> <c:otherwise> <a href="<cms:link locale='${locale}'> ${cms.requestContext.uri}</cms:link>"> ${locale}</a> </c:otherwise> </c:choose></li> </c:forEach> Implementation: A language switcher
  • 22. ● Adjusted locale handler ● Adjusted link generation Single-Tree Configuration (I) <!-- ... --> <localehandler class= "org.opencms.i18n.CmsSingleTreeLocaleHandler" /> <!-- ... --> opencms-system.xml <!-- ... --> <linksubstitutionhandler> org.opencms.staticexport. CmsLocalePrefixLinkSubstitutionHandler </linksubstitutionhandler> <!-- ... --> opencms-importexport.xml
  • 23. ● Add parameter "localizationMode" ● Set property "available-locales" at the site root ● Determine available locales for the language switcher Single-Tree Configuration (II) <!-- ... --> <site <!-- ... --> > <parameters> <param name="localizationMode">singleTree</param> </parameters> </site> <!-- ... --> opencms-system.xml
  • 24. ● Optionally add parameter "locale.main" ● Setting this parameter improves locale switching/copying. Single-Tree Configuration (III) <!-- ... --> <site <!-- ... --> > <parameters> <param name="localizationMode">singleTree</param> <param name="locale.main">en</param> </parameters> </site> <!-- ... --> opencms-system.xml
  • 25. ● Properties extended with locale postfix ● E.g.: Title, Title_en, Title_en_GB ● Special JSP API for locale-specific access ● Access from "most specific" to "least specific" ● E.g.: Title in locale "en_GB" requested ● If "Title_en_GB" is found, return it. Otherwise ● If "Title_en" is found, return it. Otherwise ● If "Title" is found, return it. Otherwise ● Return Null-Property ● If a property is searched, the result with the most specific locale, not the most direct result is returned. ● E.g.: "Title_en" from the folder is returned instead of "Title" from the contained file, if the English title for the file is searched. Multilingual properties - Idea
  • 26. ● Navigation ● Page title ● Other methods ● ● ● Multilingual properties - Access <cms:navigation locale="${cms.locale}" <!-- ... --> /> ${cms.titleLocale[cms.locale]} ${cms:vfs(pageContext).propertyLocale ["/index.html"]["de"]["Title"] CmsJspVfsAccessBean <cms:resourceload <!-- ... -->> <cms:resourceaccess var="res"> ${res.propertyLocale['de']['Title'] </cms:resourceload> CmsJspResourceAccessBean
  • 27. Evaluation: Single-Tree approach Easy to set up Easy to maintain Pros Publish always for every language Bad SEO behavior (same path for each language) Cons Use it for "Applications" Essence
  • 29. ● Typically, the top folder structure of a site in OpenCms is organized according to the language, this means: ● /de/ contains all German pages ● /en/ contains all English pages ● … ● The top folders should have set the property “locale” to the respective locale Idea: Language specific subtrees
  • 30. + Very flexible (subtrees can be totally different) + No SEO problems + Easy to understand (no implicit link adjustments) Expected Pros and Cons - More pages to maintain - Hard to keep versions synchronized - No real "link" between pages OpenCms 10.5 tackles the problem with missing relations between language versions
  • 31. ● Szenario ● Create the site in your "main locale" ● Copy pages to other locales ● Translate page properties and content ● Keep track of pages that are local variants / translations of each other ● New features ● "Copy page" function in Sitemap editor ● "Compare locales" view in Sitemap editor ● Some JSP API extensions (switch between locales) Szenario + new features
  • 32. ● Live Demo Multi-Tree Support Demo DEMO Demo Demo デモ Multi-Tree Support
  • 33. ● Add parameters "locale.main" and "locale.secondary" to the site configuration ● You can also use the workplace tool "Site configuration" Multi-Tree Configuration <!-- ... --> <site <!-- ... --> > <parameters> <param name="locale.main">en</param> <param name="locale.secondary">de,fr</param> </parameters> </site> <!-- ... --> opencms-system.xml
  • 34. ● Only for containerpages ● Different copy modes ● "Copy": Copy all suitable elements ● Option "Copy this element" on elements in containerpages ● Copied to configured place in target sitemap ● "Reuse": Reuse all elements ● Copies only the containerpage ● "Automatic": ● "Copy" when copying to the same locale ● "Reuse" when copying to another locale (configurable) ● Page + folder are copied The "Copy page" feature "Copy page" is an interesting new feature even without different locales But don't get your content scattered all across the system
  • 35. Compare locales features • Locale for which related pages are shown • Main locale marked by [*] • Switching to all locales that are configured as main/secondary locale for the current site Related page in the "Compared to" locale Sitemap for the "Locale" (initially the sitemap you opened) Context menu for linked page (of the main locale) Show any of the linked locale variants Menu for an unlinked page • Locale of currently shown sitemap • Main locale marked by [*] • Switching to other locales, for which a variant of the sitemap's root page exists
  • 36. ● Sites view The "Link locale variant" dialog Site selector Show only pages in the sitemap Not linkable page Already linked page Linkable page Colors do not indicate the "link-state" of subpages
  • 37. ● Locales view The "Link locale variant" dialog "Locale selector" switches between sitemaps localely linked to the current sitemap (root pages) Show all pages Already linked page Linkable page Not linkable page Colors do not indicate the "link-state" of subpages
  • 38. ● Suggested usage variants: ● Different subsites for different locale variants ● Different sites for different locale variants (configure the same locale.main and locale.secondary for each site) ● Keep the structure of the locale variants of the site as similar as possible ● But, you can also: ● Connect pages of different locales somewhere in the system The GUI can handle this Flexibility of the approach
  • 39. ● Group of locale variants of a page ● There is one fixed main locale ● Implemented via OpenCms relations from the page variant in the secondary locale to the page variant in the main locale ● When copying from main to other locale, relation is added automatically Background: Locale groups de fr en CmsRelationType.LOCALE_VARIANT
  • 40. ● The mechanism is designed and tested for the default OpenCms site structure ● i.e., folders with "index.html" inside ● (so "page and folder" is somehow similar) ● "Do not translate" marks are only possible for the main locale ● Linking secondary locale variants is only possible via the main locale ● Publish the main locale variant always first ● Delete the main locale variant always as last ● For adding/deleting a link you must have write access to the affected secondary locale variant Restrictions of locale groups
  • 41. ● "Link locale variant" is also available in the explorer ● Context menu à Advanced à "Link locale variant" ● Only for "index.html" files (default files) Usage without the sitemap editor What about language switching?
  • 42. Language switcher implementation <c:set var="langlinks" value="" /> <c:set var="showlang" value="false" /> <c:forEach var="locentry" items="${cms.localeResource}"> <c:choose> <c:when test="${empty locentry.value}"></c:when> <c:when test="${locentry.key == cms.locale}"> <c:set var="langlinks">${langlinks}<li class="active"><a href="#">${locentry.key}</a></li></c:set> </c:when> <c:otherwise> <c:set var="showlang" value="true" /> <c:set var="langlinks">${langlinks}<li><a href="<cms:link>${locentry.value.link}</cms:link>"> ${locentry.key}</a></li></c:set> </c:otherwise> </c:choose> </c:forEach> <c:if test="${showlang}"><ul>${langlinks}</ul></c:if>
  • 43. ● CmsJspStandardContextBean (access for the currently requested resource) ● Map<String, CmsJspResourceWrapper> getLocaleResource() ● <c:forEach var="loc" items="${cms.localeResource}> ● ${cms.localeResource["de"]} ● Locale getMainLocale() ● ${cms.mainLocale} ● CmsJspVfsAccessBean (access for arbitrary resources in the VFS) ● Map<String, Map<String, CmsJspResourceWrapper>> getLocaleResource() ● ${cms.vfs["/index.html"]["de"]} ● Map<String, Locale> getMainLocale() ● ${cms.vfs["/index.html"] Overview: API extensions (I)
  • 44. ● New class: CmsJspResourceWrapper ● Extension of CmsResource with methods ● String getLink() ● Locale getMainLocale() ● Map<String, CmsJspResourceWrapper> getLocaleResource() ● Return value of all new JSP API methods that return resources ● Return value of altered method ● CmsJspVfsAccessBean.getReadResource() Overview: API extensions (II)
  • 45. Evaluation: Multi-Tree approach Easy to understand Very flexible Maybe already your current setup No SEO problems Language variants can be published separately Great management tools in OpenCms 10.5 Pros Takes some setup time Maintenance overhead Cons Use it for all "Non-Applications" Essence
  • 46. ● New bundle editor ● Bundle descriptors ● "Copy page" for containerpages ● Multilingual sites: Single-tree support ● Locale and link substitution handler ● Multilingual properties (incl. extended JSP API) ● Multilingual sites: Enhanced multi-tree support ● Locale groups ● "Compare locale" tab in the Sitemap editor ● Extended JSP API ● Enhanced content editing (auto-copy locale) Summary – OpenCms 10.5 features Message of the talk: We greatly improved the support for multilingual websites in OpenCms 10.5
  • 47. ● Any Questions? Any Questions? Fragen? QUESTIONS ? Questiones? ¿Preguntas?質問
  • 48. Daniel Seidel Alkacon Software GmbH http://www.alkacon.com http://www.opencms.org Thank you very much for your attention!