Skip to content

Multilingual sites adding translations

Polina Yordanova edited this page Oct 25, 2017 · 8 revisions

Here is a list of the steps you need to follow if you want to supply a translation (more detailed explanation below):

  1. Supply an <i18n:text> element around every piece of text that you want to have a translation of. This element should contain an attribute i18n:key the value of which should be something short and unique but descriptive of the element's content.
  2. Define the i18n:key in the list of keys along with its translation in each language's message file (messages_*.xml( document in webapps/ROOT/assets/translations.
  3. Note that the content of the key defined in messages_*.xml has priority over the content of the <i18n:text> element. This holds true also when the <i18n:text> element containing the key is empty. It is still a good practice to leave some content in the default language within the element for human readability.

In main.xmap in the map:matches for all of the public URLs the last step before serializing is a call to the i18n transformer that Cocoon uses:

 <map:transform type="i18n">
    <map:parameter name="locale" value="{1}" />
 </map:transform>

This allows us to provide a translation for every text which is within an <i18n:text> element with an i18n:key attribute. Keys are defined and given content in the messages_*.xml files in webappps/ROOT/assets/translations, the "*" being the language code, e.g. messages_en.xml. There should be one such file per language and all translations for all headers, menu items, text etc. are defined in each of them. When you first download the EFES package, of the provided templates and menus, only assets/templates/home.xml and assets/menu/main.xml have partial i18n markup; this must be added where appropriate.