Optimizely Languages
Describes Optimizely Languages, which provides easy access to a single interface for managing multiple languages and translations of content, with a built-in feature for managing automated translations.
Use Optimizely Languages to export and import XLIFF files that can be sent to in-house translators or localization agencies.
ITranslationPackageExporter
and ITranslationPackageImporter
are interfaces used for the import and export of translation packages to a project. The default implementations are XLIFFTranslationPackageImporter
and XLIFFTranslationPackageExporter
.
Requirements
- No additional license fee.
- An Optimizely Content Management System (CMS) or Optimizely Customized Commerce installation.
- See Add-ons platform compatibility for package and version information.Â
Install
- Versions 7.5 and higher are installed through NuGet.
- Version 7 is installed and updated through one-click installation.
Documentation
- Developer guide:
- User guide Optimizely Languages
Configure auto-translation
This section describes configuring an auto-translation service for the Optimizely Languages app. Optimizely Languages is used as its translation provider Microsoft Translator, part of the Microsoft Cognitive Services collection of APIs, available in the Azure portal. The following steps show how to configure the auto-translate option.
Connect to the auto-translation service
- Subscribe to Azure, if you haven’t done so already.
- Configure the auto-translate component in Optimizely Languages.
- Go to admin view > Config > Tool Settings > Language Manager.
- In the Translator Provider, select Cognitive Service Translator.
- In the Subscription Key box, enter your Microsoft subscription key (Key 1).
- In Subscription Region, enter the Location value from the Azure subscription service.
- Save your changes.
See also: Reminder: Move Translator API subscriptions from DataMarket to Azure before April 30, 2017.
Translate content (new UI in 5.3.0)
Starting from 5.3.0, you do not need to setup your TranslateOrCopyContentAreaChildrenBlockForTypes
config in appsettings.json
. Optimizely provides it in a more intuitive UI.
It has the following options:
- Add all children – When translating a parent page, translate all of it children and subpages. For example, selecting this option when translating Page 1 will translate all the pages in the following image:
- Add related content(s) – When translating a parent page, translate all of contents inside
ContentArea
, but also inContentReference
andXhtmlString
. This includesIlist<ContentReference>
andIlist<XhtmlString>
. - Publish added content(s) – Only appears if either of the two options above is selected. Determine whether to publish the newly added content or retain it as a draft. Notably, the root content will remain in draft status.
Customize the translation process
If you do not want to use the provided translation process configuration, you can implement your one with the IChildrenContentLoader
interface, as shown in the following code.
public interface IChildrenContentLoader {
/// <summary>
/// Get children from a parent/root content
/// </summary>
/// <param name="content">The parent or root content</param>
/// <param name="languageId">Id of the source language</param>
/// <param name="includeDescendents">Flag to indicate whether including descendants or not</param>
/// <param name="includeRelatedContents">Flag to indicate whether including related content or not</param>
/// <returns>List of content link that will get translated alongside root</returns>
IEnumerable<ContentReference> GetChildrenContentsNeedToCopyOrTranslate(ContentReference content, string languageId, bool includeDescendents, bool includeRelatedContents);
}
Note
The return content list does not include the root. Be sure to register your new implementation in
Startup.cs
.
Breaking changes for Languages version 2
This topic describes API changes in version 2 of Episerver Languages.
Note
Episerver Languages was renamed to Optimizely Languages.
Changed
Introduced methods in the ILanguageBranchManager
interface and its implementation, LanguageBranchManager
. Compared with old methods, the difference is that the method returns newly created content as an out
parameter (createdContentLink
):
bool CopyDataFromMasterBranch(ContentReference contentReference, string fromLanguageID,
string toLanguageID, Func<object, object> transformOnCopyingValue,
out ContentReference createdContentLink, bool autoPublish = false);
bool CreateLanguageBranch(ContentReference contentLink, string languageID,
out ContentReference createdContentLink);
bool TranslateAndCopyDataFromMasterBranch(ContentReference contentReference,
string fromLanguageID, string fromTwoLetterLanguageName, string toLanguageID,
string toTwoLetterLanguageName, out ContentReference createdContentLink,
bool autoPublish = false);
Marked as obsolete
[Obsolete]The following functions in ILanguageBranchManager
and its default implementation LanguageBranchManager
are obsolete:
bool CopyDataFromMasterBranch(ContentReference contentReference, string fromLanguageID,
string toLanguageID, Func<object, object> transformOnCopyingValue,
bool autoPublish = false);
bool CreateLanguageBranch(ContentReference contentLink, string languageID);
bool TranslateAndCopyDataFromMasterBranch(ContentReference contentReference,
string fromLanguageID, string fromTwoLetterLanguageName, string toLanguageID,
string toTwoLetterLanguageName, bool autoPublish = false);
[Obsolete] This section describes how to configure Optimizely Languages to translate child blocks in a ContentArea
attribute. To archive this, add the Optimizely Languages section in appsettings.json
like this:
{
"Episerver": {
"CmsUI": {
"LanguageManager": {
"TranslateOrCopyContentAreaChildrenBlockForTypes": [
"AlloyTemplates.Models.Pages.ExamplePage1",
"AlloyTemplates.Models.Pages.ExamplePage2"
]
}
}
}
}
The value in the array can be a regex so you can write a single "AlloyTemplates.Models.Pages.*"
to enable this to contents that have the namespace AlloyTemplates.Models.Pages
.
New dependenciesÂ
Languages 2.0 depends on packages: EPiServer.CMS.Core
9.8, EPiServer.CMS.UI
9.5.0
Updated about 2 months ago