Specifying internationalization settings
Jahia supports enabling multiple languages for sites. For more information, see Managing languages for your site. As a developer, you define which fields are internationalized fields for content editors. This topics shows how to mark a field as internationalized and provides a description of the content model.
Internationalized fields
An internationalized field has a different value for each language. You can mark a field as internationalized by adding the internationalized
keyword or i18n
in the CND file. Any field type can be marked as internationalized. In this example, body and image fields are internationalized. The text and associated image differs for every language.
[jnt:mainContent] > jnt:content, mix:title, jmix:structuredContent, jmix:editorialContent
- body (string, richtext) i18n
- image (weakreference, picker[type='image']) i18n
- align (string,choicelist[resourceBundle]) = left indexed=no < left,right,default
Non internationalized fields are marked with Shared by all languages indicating that they have the same value in all languages. If Shared by all languages is absent, then the field is internationalized.
Content model
Internationalized fields are stored in a special subnode of the content. The subnode is named j:translation_lang
and has the jnt:translation
type. This type is unstructured and stores all internationalized properties of its parent.
Using localized and unlocalized sessions
Translation nodes are usually hidden from the user. As long as the session is opened with a locale (localized session), internationalized properties are transparently returned by getProperty()
methods and other APIs. Translation nodes display when using a non-localized session. A localized session can be opened using the following method from JCRSessionFactory:
public JCRSessionWrapper getCurrentUserSession(String workspace, Locale locale) throws RepositoryException;
You can use any other methods from JCRSessionFactory and JCRTemplate that take the locale as a parameter to retrieve a localized session.
All the sessions that are used for rendering, for example the ones used in JSP views, are localized.
Publishing translated nodes
The lifecycle of the translation nodes is separate from their parent node. They can be published independently.