<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Blog posts by Deepmala S</title><link href="https://world.optimizely.com/blogs/deepmala-s/" /><updated>2026-01-16T10:47:34.0000000Z</updated><id>https://world.optimizely.com/blogs/deepmala-s/</id><generator uri="https://world.optimizely.com/blogs/deepmala-s/" version="2.0">Optimizely World</generator><entry><title>Alt text is retrieved for images imported from CMP-DAM in Optimizely CMS 12.</title><link href="https://world.optimizely.com/blogs/deepmala-s/dates/2025/12/alt-text-is-retrieved-for-images-imported-from-cmpdam-in-optimizely-cms-12/" /><id>https://world.optimizely.com/blogs/deepmala-s/dates/2025/12/alt-text-is-retrieved-for-images-imported-from-cmpdam-in-optimizely-cms-12/</id><published>2026-01-16T10:47:34.0000000Z</published><updated>2026-01-16T10:47:34.0000000Z</updated><author><name>deepmala.sharma@dxred.com</name></author><category term="Blog post" /><summary type="html">&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Although image alt text is stored as metadata in CMP/DAM, it is not automatically rendered in browser HTML. This document outlines the solution implemented in Optimizely CMS to retrieve and render this metadata correctly.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;Steps :&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1) Create image file class and inherit with ImageData.&lt;/p&gt;
&lt;pre class="language-csharp"&gt;&lt;code&gt;public class ImageFile : ImageData
{
    [Display(Name = "Alt text", Order = 10)]
    public virtual string AltText { get; set; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2) Create image file view model&lt;/p&gt;
&lt;div&gt;
&lt;pre class="language-csharp"&gt;&lt;code&gt;public class ImageFileViewModel
{
    public string AltText { get; set; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;3) Create image file request and paas in-built &lt;strong&gt;DAMAssetIdentity&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre class="language-csharp"&gt;&lt;code&gt;public class ImageFileRequest : IRequest&amp;lt;ImageFileViewModel&amp;gt;
{
    public ImageFileRequest(DAMAssetIdentity damAsset, CultureInfo culture)
    {
        Culture = culture;
        ImageFileReference = damAsset;
    }
    public DAMAssetIdentity ImageFileReference { get; set; }
    public CultureInfo Culture { get; }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;4)&amp;nbsp;Create image file request handler and fetch Alt text from Dam using &lt;strong&gt;DAMAssetIdentity metadata&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;
&lt;pre class="language-csharp"&gt;&lt;code&gt;public async Task&amp;lt;ImageFileViewModel&amp;gt; Handle(ImageFileRequest request, CancellationToken cancellationToken)
 {
     if (request?.ImageFileReference != null)
     {
               temp.AltText = request?.ImageFileReference?.Metadata?.DAMAssetInfo?.AltText;
     }
     return temp;
 }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;5) If in case while fetching alt text from Dam and if we will get&amp;nbsp;&lt;strong&gt;DAMAssetInfo &lt;/strong&gt;is null due to unaxpected behavior then we will use &lt;strong&gt;IDAMAssetMetadataService &lt;/strong&gt;showing below&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;pre class="language-csharp"&gt;&lt;code&gt;if (temp.Metadata?.DAMAssetInfo == null)
{
           var temp2 = ServiceProviderExtensions.GetInstance&amp;lt;IDAMAssetMetadataService&amp;gt;(ServiceLocator.Current).GetAssetMetadata(ExtractAssetGuid(temp).Value).Result;
        altText = temp2?.AltText;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;6) After fetching Alt text successfully then we will pass in view.&lt;br /&gt;&lt;br /&gt;Above i have added only neccesary code other can add according to requirements.&lt;br /&gt;Below references added for CMP-DAM configuration and assets sync.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;Important Links&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="https://docs.developers.optimizely.com/content-management-system/v1.0.0-CMS-SaaS/docs/manage-assets-with-dam"&gt;https://docs.developers.optimizely.com/content-management-system/v1.0.0-CMS-SaaS/docs/manage-assets-with-dam&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="/link/2fe7c7fbd7fb4251b60de7cc4c5447c7.aspx"&gt;https://world.optimizely.com/blogs/robert-svallin/dates/2025/2/cmp-dam-asset-graph-self-service/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="text-decoration: underline;"&gt;&lt;a href="https://docs.developers.optimizely.com/content-management-system/docs/cmp-dam-in-cms"&gt;https://docs.developers.optimizely.com/content-management-system/docs/cmp-dam-in-cms&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</summary></entry><entry><title>Custom Deepl Glossary Translation in Optimizely CMS </title><link href="https://world.optimizely.com/blogs/deepmala-s/dates/2025/9/custom-deepl-glossary-translation-in-optimizely-cms-/" /><id>https://world.optimizely.com/blogs/deepmala-s/dates/2025/9/custom-deepl-glossary-translation-in-optimizely-cms-/</id><published>2025-09-03T09:29:08.0000000Z</published><updated>2025-09-03T09:29:08.0000000Z</updated><author><name>deepmala.sharma@dxred.com</name></author><category term="Blog post" /><summary type="html">&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 107%; font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;Introduction in this post, I have created a custom DeepL glossary translation for specific words. For example, when translating from English to German, the standard translation for "Hello" is "Hallo." However, using my custom DeepL glossary, I want "Hello" to be translated as a custom word like "Ollha." This custom translation will override the normal Optimizely auto-translation and ensure that the glossary-defined terms are used instead.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 107%; font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;Repository link for reference&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 9.5pt; line-height: 107%; font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;&lt;a href="https://github.com/mattpallatt/MP.LanguageManager.DeepLTranslate"&gt;https://github.com/mattpallatt/MP.LanguageManager.DeepLTranslate&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style="font-size: 12.0pt; mso-bidi-font-size: 11.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;1)&lt;span style="font: 7.0pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 12.0pt; line-height: 107%;"&gt;Install nuget &lt;/span&gt;package &lt;strong style="mso-bidi-font-weight: normal;"&gt;MP.LanguageManager.DeepLTranslate&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 9.5pt; line-height: 107%; font-family: Consolas; color: white; background: #002440;"&gt;dotnet add package MP.LanguageManager.DeepLTranslate --version 1.0.9&lt;/span&gt;&lt;br style="mso-special-character: line-break;" /&gt;&lt;!-- [if !supportLineBreakNewLine]--&gt;&lt;!--[endif]--&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style="font-size: 12.0pt; mso-bidi-font-size: 9.5pt; line-height: 107%; font-family: 'Cascadia Mono'; mso-fareast-font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;&lt;span style="mso-list: Ignore;"&gt;2)&lt;span style="font: 7.0pt 'Times New Roman';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 9.5pt; line-height: 107%; font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;Create &lt;/span&gt;&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span style="background: white; mso-highlight: white;"&gt;DeepLTranslateProvider class&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&amp;nbsp;&lt;br /&gt;public class DeepLTranslateProvider : IMachineTranslatorProvider&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private readonly Injected&amp;lt;IOptions&amp;lt;DeepLOptions&amp;gt;&amp;gt; _options;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string DisplayName =&amp;gt; "DeepL Web Translator";&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public DeepL.Formality DLFormality = DeepL.Formality.Default;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string EnglishType = "";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string authkey = "";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string AutoGlossary = "";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string GlossaryList = "";&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public bool Initialize(ITranslatorProviderConfig config)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var languageManagerOptions = new LanguageManagerOptions();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var languageManagerConfig = new LanguageManagerConfig(languageManagerOptions);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; authkey = languageManagerConfig.ActiveTranslatorProvider.SubscriptionKey;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var options = _options.Service.Value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var dlfv = "default";&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dlfv = (options.Formality.ToLower() == "default" || options.Formality.ToLower() == "more" || options.Formality.ToLower() == "less" || options.Formality.ToLower() == "preferless" || options.Formality.ToLower() == "prefermore") ? options.Formality.ToLower() : dlfv;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EnglishType = (options.English.ToLower() == "en-gb" || options.English.ToLower() == "en-us") ? options.English.ToLower() : "en-gb";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AutoGlossary = (options.AutoGlossary == "0" || options.AutoGlossary == "1") ? options.AutoGlossary : AutoGlossary;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; GlossaryList = options.GlossaryList;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; catch { }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // free API authorisation keys end in :fx...&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (authkey.EndsWith(":fx"))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // ...set the formality to Default, as this is a Pro feature&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DLFormality = DeepL.Formality.Default;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DLFormality = dlfv.ToLower() switch&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "less" =&amp;gt; DeepL.Formality.Less,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "more" =&amp;gt; DeepL.Formality.More,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "preferless" =&amp;gt; DeepL.Formality.PreferLess,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "prefermore" =&amp;gt; DeepL.Formality.PreferMore,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ =&amp;gt; DeepL.Formality.Default,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public TranslateTextResult Translate(string inputText, string sourceLanguage, string targetLanguage)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var translateTextResult = new TranslateTextResult&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IsSuccess = true,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Text = ""&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (string.IsNullOrWhiteSpace(inputText))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return translateTextResult;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var n = DoTranslate(inputText, sourceLanguage, targetLanguage);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n.Wait();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; translateTextResult.Text = n.Result.ToString();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; translateTextResult.IsSuccess = true;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; catch (Exception ex)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; translateTextResult.IsSuccess = false;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; translateTextResult.Text = "An unexpected error occurred: " + ex.Message + ex.InnerException;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return translateTextResult;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public async Task&amp;lt;TextResult&amp;gt; DoTranslate(string inputText, string sourceLanguage, string targetLanguage)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var slci = new CultureInfo(sourceLanguage);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var tlci = new CultureInfo(targetLanguage);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string tl = tlci.TwoLetterISOLanguageName.ToString();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // deal with PT, ZH (xx-xx) language codes&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (tl == "pt" || tl == "zh")&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tl = targetLanguage;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // dealing with depreciated "en" target language code using default EN code&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (tl == "en")&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tl = EnglishType;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // reset the glossary ID&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string glossaryID = "";&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var translator = new DeepL.Translator(authkey);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ((AutoGlossary == "1") || (GlossaryList.Contains($"[{slci}&amp;gt;{tlci}]")))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; System.Threading.Tasks.Task&amp;lt;GlossaryInfo[]&amp;gt; n = translator.ListGlossariesAsync();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; n.Wait();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; List&amp;lt;GlossaryInfo&amp;gt; GI = n.Result.ToList();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; glossaryID = GI.FirstOrDefault(item =&amp;gt; item.SourceLanguageCode == slci.ToString() &amp;amp;&amp;amp; item.TargetLanguageCode == tlci.ToString())?.GlossaryId;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var translatedText = await translator.TranslateTextAsync(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; inputText,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; slci.TwoLetterISOLanguageName.ToUpper(),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tl.ToUpper(),&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; new TextTranslateOptions { Formality = DLFormality, TagHandling = "html", GlossaryId = glossaryID }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; );&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return translatedText;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public class DeepLOptions&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string Formality { get; set; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string English { get; set; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string AutoGlossary { get; set; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string GlossaryList { get; set; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public string ignoreExistingPages { get; set; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;strong style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-size: 9.5pt; line-height: 107%; font-family: 'Cascadia Mono'; color: black; mso-fareast-language: EN-IN; mso-no-proof: yes;"&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="margin-bottom: .0001pt; mso-add-space: auto; text-indent: -18.0pt; line-height: normal; mso-list: l0 level1 lfo2; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style="font-size: 12.0pt; mso-bidi-font-size: 9.5pt; font-family: 'Cascadia Mono'; mso-fareast-font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;&lt;span style="mso-list: Ignore;"&gt;3)&lt;span style="font: 7.0pt 'Times New Roman';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span style="font-size: 9.5pt; font-family: 'Cascadia Mono'; color: black; background: white; mso-highlight: white;"&gt;Create API Controller&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;[HttpPost]&lt;br /&gt;&amp;nbsp;[Route("/api/v1/glossary/create")]&lt;br /&gt;&amp;nbsp;public async Task&amp;lt;ActionResult&amp;gt; Create([FromBody] GlossaryDTO glossaryDTO)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var timer = Stopwatch.StartNew();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;GlossaryInfo glossaryInfo = null;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;try&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (glossaryDTO != null)&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;glossaryInfo = await _glossary.CreateGlossaryAsync(glossaryDTO.Name, glossaryDTO.SourceLang, glossaryDTO.TargetLang, glossaryDTO.GlossaryEntries);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;catch (Exception ex)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;_logger.LogError(nameof(Index), ex, "Error GlossaryController getting GlossaryController");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return StatusCode(500, new { message = ex.Message });&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;timer.Stop();&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;_logger.LogInformation(nameof(Index), $"Timer took {timer.ElapsedMilliseconds}ms");&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return new JsonResult(new { message = glossaryInfo != null ? "Glossary has been created" : "Glossary is not created", glossary = glossaryInfo });&lt;/p&gt;
&lt;p&gt;&amp;nbsp;}&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style="font-size: 12.0pt; mso-bidi-font-size: 11.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;4)&amp;nbsp; Do App setting configurations&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&lt;img src="/link/33369184368046c2a0ced050c52e5474.aspx" alt="" width="259" height="141" /&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&lt;!-- [if !supportLists]--&gt;&lt;span style="font-size: 12.0pt; mso-bidi-font-size: 11.0pt; line-height: 107%; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;5)&lt;span style="font: 7.0pt 'Times New Roman';"&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Set up&amp;nbsp;&lt;strong&gt;Deepl Web Translator&lt;/strong&gt; in Language manager plug in.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; To use the DeepL Translator to perform automated translations make sure it's selected as Translator Provider in the settings of the Language Manager&lt;br /&gt;&lt;br /&gt;&lt;img src="/link/13e251e79575475f9c037c2d8d032737.aspx" alt="" width="612" height="189" /&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;6)&amp;nbsp; &amp;nbsp;Create Glossary block and on view create glossaries. Set access right on block hide from visitors.&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;6)&amp;nbsp; &amp;nbsp; Do auto translation from Language gadget.&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="text-indent: -18.0pt; mso-list: l0 level1 lfo2;"&gt;&lt;img src="/link/8b324cc53f8a470ab2c600dc2cf58982.aspx" alt="" width="461" height="163" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="mso-fareast-language: EN-IN; mso-no-proof: yes;"&gt;&lt;img src="/link/681b8d3697c0405cae6b60acba558dc2.aspx" alt="" width="322" height="238" /&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="text-indent: -18.0pt; mso-list: l1 level1 lfo1;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary></entry></feed>