Magnolia 5.7 reached extended end of life on May 31, 2022. Support for this branch is limited, see End-of-life policy. Please note that to cover the extra maintenance effort, this EEoL period is a paid extension in the life of the branch. Customers who opt for the extended maintenance will need a new license key to run future versions of Magnolia 5.7. If you have any questions or to subscribe to the extended maintenance, please get in touch with your local contact at Magnolia.
This page explains the use of the so-called generic i18n keys or, in other words, keys that can be used simultaneously in more than one specific location, such as in multiple modules, apps and subapps, multiple tabs, or even in multiple views. A list of such keys is provided at the end of this page.
Reusing keys from other modules
At startup, Magnolia creates a global message bundle by reading keys from all .properties
files of all modules in the current project. The global bundle is a virtual bundle, not a physical file. It includes keys from your module and keys from Magnolia's own modules such as ui-admincentral
and ui-framework
.
This means that you don't need to provide keys for all UI elements in your app. Keys for commonly reused elements such as buttons and subapps are in Magnolia's own modules. Just reuse the UI element in your app and Magnolia will find the existing key automatically. In simple terms, the shorter the form of the key, the more places it will be applicable to.
Example: The contact edit form has two buttons: Save Changes and Cancel:
The Contacts app doesn't provide the text for either button in its own message bundle. They are provided in the
module-ui-framework-messages_en.properties
file of the UI-Framework module.
# Default Action Labels actions.commit=save changes actions.cancel=cancel
Therefore it is not necessary to insert two specific keys such as the following into the .properties
file of the Contacts app:
contacts-app.actions.commit=save changes contacts-app.actions.cancel=cancel
If your app needs these buttons, just name your actions commit
and cancel
.
Node name | Value |
---|---|
actions | |
commit | |
class | info.magnolia.ui.form.action.SaveFormActionDefinition |
implementationClass | info.magnolia.contacts.app.form.action.SaveContactFormAction |
cancel | |
class | info.magnolia.ui.form.action.CancelFormActionDefinition |
Providing a key to other modules or apps
If a key is to be made available to other modules or apps, make the key less-specific, i.e. shorten it, usually by omitting the <module> or <app> part of the key. See the list below for acceptable shorter forms of i18n keys.
Example: The key for the Teaser component in the MTK module (https://demo.magnolia-cms.com/.magnolia/admincentral;#app:resources:detail;/mtk/templates/components/teaser.yaml)
mtk.templates.components.teaser=Teaser
can be shortened just to
templates.components.teaser=Teaser
By omitting the module name (mtk) in the key, the shorter form can be reused for translation in other modules, e.g. in the Travel-demo (https://demo.magnolia-cms.com/.magnolia/admincentral;#app:resources:detail;/travel-demo/templates/components/teaser.yaml).
Overriding a generic key
There are, however, scenarios when a translation for an element has to be different from the one available in the generic key. In this case the user still has the option to expand the key from its short (generic) form into a longer pattern which specifies the element (i.e. the module, app, subapp, etc.) where the translation should appear. For example, if the key for the Teaser component in the Travel-demo module needed a different translation than that used in MTK, the key can be expanded into a more specific form:
travel-demo.templates.components.teaser=The Travel Demo Teaser
The translation will now be available primarily to the teaser component in the Travel Demo module.
List of generic i18n keys
The parts in
[brackets]
can be omitted.
Apps
<app>.app[.label]
App launcher group
app-launcher.<groupName>[.label]
Sections
<app>.[<subapp>.]actionbar.<section>[.label]
[<app>.][<subapp>.]actionbar.sections.<section>[.label]
If used in the key,
<subapp>
requires
<app>
.
Actions
[<app>.][<subapp>.]actions.<action>[.label]
Columns
[<app>.][<subapp>.]views.[<view-type>.]<column>[.label]
If used in the key,
<subapp>
requires <app>
.
Dialog
<module>.<dialogPath>[.label]
dialogs.<dialogPath>[.label]
Tabs
<module>.<dialogPath>.<tab>[.label]
tabs.<tab>[.label]
Fields
[<module>.]<dialogPath>.[<tab>.]<field>[.label]
[<module>.]<dialogPath>.[<tab>.]<field>.description
<tab>.<field>[.label]
<tab>.<field>.description
fields.<field>[.label]
fields.<field>.description
A note on field validators
The generic i18n key form for a field validator is
validators.<validatorName>.errorMessage
.
If a validator is defined for the field, the i18n keys may take the validator suffix:
[<module>.]<dialogPath>.[<tab>.]<field>.validation.errorMessage
<tab>.<field> .validation.errorMessage
fields.<field>.validation.errorMessage
Templates
Pages/components
[<module>.]templates.<templatePath>
[<module>.]templates.<templatePath> .description
Areas
templates.areas.<areaName>
templates.areas.<areaName> . description