Magnolia 5.5 reached end of life on November 15, 2019. This branch is no longer supported, see End-of-life policy.
The Content Translation Support module allows you to export and import content in translation-friendly XLIFF, CSV and Excel formats. You can send a file to a translator and then import the translated content. The file includes context information and a link to the relevant content to make translation easier. The module comes with a Content Translation app for managing page translation. Export formats are pluggable and can be extended to support a custom format.
The Content Translation Support Extend modules extend translation functionality to allow automatic machine-translation, content translation workflow and integration with Translations.com.
<dependency> <groupId>info.magnolia</groupId> <artifactId>magnolia-module-content-translation-support</artifactId> <version>2.1.8</version> </dependency>
The module is configured in /modules/content-translation-support
.
Node name | Value |
---|---|
modules | |
content-translation-support | |
apps | |
config | |
dialogs | |
commands | |
fieldTypes |
The Content Translation app allows you to manage the translation of pages. The app is in the Tools section in the app launcher.
To export pages:
The download filename is created from the file path in the website
workspace, with dots replacing forward slashes such as website.travel.about.xls
. The file has the following columns (comma separated headings in CSV or elements in XLIFF):
Text and Image: Subheading
. This tells the translator what kind of page element he is translating.The GoogleSpreadsheetTranslationBundleWriter
exporter class adds the Google translate formula to the CSV exporter. When you upload the CSV file to Google Docs it evaluates the formula and the text is machine-translated into the target i18n languages automatically.
Once the file has been translated you can upload it in the app. The translated content is automatically included on the page.
To import translated page content:
In the Pages app you can now see the translated content in the components and dialogs.
Your site definition needs to have at least one locale in addition to the default locale. Locales show up as columns in the export file.
Example: travel
site definition with English and German locales.
Node name | Value |
---|---|
travel | |
i18n | |
locales | |
en | |
country | |
enabled | true |
language | en |
de | |
country | |
enabled | true |
language | de |
class | info.magnolia.cms.i18n.DefaultI18nContentSupport |
enabled | true |
fallbackLocale | en |
Importers and exporters are Java classes that contain business logic to convert translatable content into a convenient format. Out of the box the module provides importers and exporters for XLIFF, Excel and CSV files, and an exporter for Google Spreadsheets.
Importers and exporters are configured in /modules/content-translation-support/config
.
Node name | Value |
---|---|
content-translation-support | |
config | |
importers | |
xlsImporter | |
class | info.magnolia.module.contenttranslationsupport.reimport.XlsTranslationBundleUpdateReader |
extension | xls |
label | contenttranslation.fileformat.xls |
csvImporter | |
xliffImporter | |
exporters | |
xlsExporter | |
class | info.magnolia.module.contenttranslationsupport.export.XlsTranslationBundleWriter |
extension | xls |
label | contenttranslation.fileformat.xls |
csvExporter | |
xliffExporter | |
googleSpreadsheetExporter |
Properties:
class | required Class that performs the import or export.
You can write your own importers and exporters for other file formats, databases, or Web services that translators use. See examples in Git (importers | exporters). |
extension | optional File extension without the dot. |
label | optional Extension label. |
The module includes two TranslationFile
commands that are used to export and import content in various formats for translation.
Commands are configured in /modules/content-translation-support/commands/contenttranslationsupport
.
Node name | Value |
---|---|
content-translation-support | |
commands | |
contenttranslationsupport | |
downloadTranslationFile | |
class | info.magnolia.module.contenttranslationsupport.commands.TranslationFileDownloadCommand |
uploadTranslationFile | |
class | info.magnolia.module.contenttranslationsupport.commands.TranslationFileUploadCommand |
exportContent | |
importContent | |
website | |
extends | /modules/pages/commands/website |
Properties:
commands | required Commands folder. |
| required Content translation support catalog. |
| required
|
| optional Applicable only to the Set the node if the command should operate on other than the default ( |
| required The path to the form. |
| required Workspace name. |
| required
|
| optional Website catalog. |
| optional Extends the |
Content Translation Support 2.1.2+ / Magnolia 5.4.4+
exportCommand
and importCommand
are deprecated.
The module includes dialogs and action definition classes that are used in the Content Translation app. These can be adapted for any content app.
Example: Commit actions to download and upload translation files in /modules/content-translation-support/dialogs/downloadTranslationFile
and uploadTranslationFile
.
Node name | Value |
---|---|
content-translation-support | |
dialogs | |
downloadTranslationFile | |
actions | |
commit | |
catalog | contenttranslationsupport |
class | info.magnolia.module.contenttranslationsupport.dialog.action.TranslationFileDownloadDialogActionDefinition |
command | downloadTranslationFile |
label | content-translation-support.downloadTranslationFile.actions.commit.label |
cancel | |
form | |
uploadTranslationFile | |
actions | |
commit | |
catalog | contenttranslationsupport |
class | info.magnolia.module.contenttranslationsupport.dialog.action.TranslationFileUploadDialogActionDefinition |
command | uploadTranslationFile |
label | content-translation-support.uploadTranslationFile.actions.commit.label |
cancel | |
form |
Properties:
commit | required Commit action configuration. |
| required
|
| required Action definition class. See below. |
| required Name of command configuration node. |
| optional Action labels: Export file and Import file. |
Action definition classes:
| Uploads the translation file. |
| Downloads the translation file. |
| Used in the app to open the * |
By default text and rich text fields are included in export files, and additional field types can be registered.
The type of content that is exported is configured in /modules/content-translation-support/config/controlTypesToExport
and /nodeDataToTranslateFinder
.
Node name | Value |
---|---|
modules | |
content-translation-support | |
config | |
importers | |
exporters | |
controlTypesToExport | |
richText | info.magnolia.ui.form.field.definition.RichTextFieldDefinition |
text | info.magnolia.ui.form.field.definition.TextFieldDefinition |
nodeDataToTranslateFinder | |
class | info.magnolia.module.contenttranslationsupport.export.AdaptiveNodeDataToTranslateFinder |
Properties:
config | optional Module configuration folder. |
| required Defines the fields to export. |
| required Registers rich text field and text field definition classes. These field types typically contain the textual i18n content. |
| required Node data to translate finder node. |
| required
AdaptiveNodeDataToTranslateFinder
delegates calls to an implementation of |
You can register appropriate additional field types to be included in the exported file.
Example: Registering composite field as a field type to export.
Node name | Value |
---|---|
controlTypesToExport | |
richText | info.magnolia.ui.form.field.definition.RichTextFieldDefinition |
text | info.magnolia.ui.form.field.definition.TextFieldDefinition |
composite | info.magnolia.ui.form.field.definition.CompositeFieldDefinition |
In addition to registration, the subfields of the composite field should have an i18n
property set to true
. It is not necessary for the composite field itself to have an i18n
property.
Example: Composite field configuration where text1
field will be included in the download file, but text2
will not.
form: tabs: - name: tabText fields: - name: test label: Test layout: vertical class: info.magnolia.ui.form.field.definition.CompositeFieldDefinition transformerClass: info.magnolia.ui.form.field.transformer.composite.DelegatingCompositeFieldTransformer fields: - name: text1 i18n: true label: Text 1 class: info.magnolia.ui.form.field.definition.TextFieldDefinition - name: text2 label: Text 2 class: info.magnolia.ui.form.field.definition.TextFieldDefinition
Node name | Value |
---|---|
form | |
tabs | |
tabText | |
fields | |
test | |
fields | |
text1 | |
class | info.magnolia.ui.form.field.definition.TextFieldDefinition |
i18n | true |
label | Text 1 |
text2 | |
class | info.magnolia.ui.form.field.definition.TextFieldDefinition |
label | Text 2 |
class | info.magnolia.ui.form.field.definition.TextFieldDefinition |
label | Test |
layout | Vertical |
transformerClass | info.magnolia.ui.form.field.transformer.composite.DelegatingCompositeFieldTransformer |
You can view the translated nodes in the website
workspace in the JCR Browser app. The translated content is suffixed with a locale such as _de
. Since English is the default locale on this site no _en
suffix is used.
Example: Jumbotron on About page in the Travel demo.
You can enable content translation support in any content app.
Example: Enabling content translation in the Contacts app.
Add the i18n
property to any field you want to translate in the detail
subapp. See Enabling mulitlanguage content for more.
Example: New Bio text field in the Personal tab in /modules/contacts/apps/contacts/subapps/detail/editor/form/tabs/personal/fields/bio
.
Node name | Value |
---|---|
editor | |
form | |
tabs | |
personal | |
fields | |
bio | |
class | info.magnolia.ui.form.field.definition.TextFieldDefinition |
i18n | true |
label | Bio |
rows | 3 |
Configure contact translation upload and download commands in the contenttranslationsupport
catalog in the Content Translation module. The commands are called by the dialogs configured in step 3.
Example: downloadContactTranslation
and uploadContactTranslation
commands configured in
./modules/content-translation-support/commands/contenttranslationsupport/commands
Node name | Value |
---|---|
commands | |
contenttranslationsupport | |
downloadContactTranslation | |
contentTransporter | |
workspace | contacts |
formPath | /modules/contacts/apps/contacts/subApps/detail/editor/form |
class | info.magnolia.module.contenttranslationsupport.commands.TranslationFileDownloadCommand |
uploadContactTranslation | |
class | info.magnolia.module.contenttranslationsupport.commands.TranslationFileUploadCommand |
downloadTranslationFile
and uploadTranslationFile
dialogs in the Content Translation Support module and change the value of the command
properties. These dialogs use the commands configured in step 2. Example: downloadContactTranslation
and uploadContactTranslation
dialogs configured in
./modules/content-translation-support/commands/contenttranslationsupport/dialogs
Node name | Value |
---|---|
dialogs | |
downloadTranslationFile | |
uploadTranslationFile | |
downloadContactTranslation | |
actions | |
commit | |
catalog | contenttranslationsupport |
class | info.magnolia.module.contenttranslationsupport.dialog.action.TranslationFileDownloadDialogActionDefinition |
command | downloadContactTranslation |
label | content-translation-support.downloadTranslationFile.actions.commit.label |
cancel | |
class | info.magnolia.ui.admincentral.dialog.action.CancelDialogActionDefinition |
form | |
uploadContactTranslation | |
actions | |
commit | |
catalog | contenttranslationsupport |
class | info.magnolia.module.contenttranslationsupport.dialog.action.TranslationFileUploadDialogActionDefinition |
command | uploadContactTranslation |
label | content-translation-support.uploadTranslationFile.actions.commit.label |
cancel | |
class | info.magnolia.ui.admincentral.dialog.action.CancelDialogActionDefinition |
form |
The fileFormat
field uses a custom field definition class:
TranslationFileFormatOptionGroupFieldDefinition
.
browser
subapp. The easiest way to do this is to extend the downloadTranslationFile
and uploadTranslationFile
actions in the Content Translation Support app. Example: Adding downloadTranslation
and uploadTranslation
actions in the Contacts app in /modules/contacts/apps/contacts/subapps/browser/actions
.
Node name | Value |
---|---|
apps | |
contacts | |
subapps | |
browser | |
actions | |
downloadTranslation | |
extends | /modules/content-translation-support/apps/contentTranslationSupport/subApps/browser/actions/downloadTranslationFile |
label | Download for translation |
uploadTranslation | |
extends | /modules/content-translation-support/apps/contentTranslationSupport/subApps/browser/actions/uploadTranslationFile |
label | Upload translated content |
Add the actions created in step 4 to the actionbar.
Example: Adding downloadTranslation
and uploadTranslation
actions to the contact
section of the actionbar in the Contacts app in /modules/contacts/apps/contacts/subapps/browser/actionbar/sections/contact/groups/importExportActions
.
Node name |
---|
browser |
actionbar |
sections |
contact |
groups |
importExportActions |
items |
export |
downloadTranslation |
uploadTranslation |