Esempio n. 1
0
        private async Task TranslateItem(ItemObject item, string language, string translationLanguage)
        {
            if (item.Item == null)
            {
                throw new ArgumentNullException(nameof(item.Item));
            }

            var languageVariant = await kontentRepository.RetrieveLanguageVariant(new RetrieveLanguageVariantParameters
            {
                ItemId     = item.Item.Id,
                LanguageId = item.Language?.Id
            });

            foreach (var element in languageVariant.Elements)
            {
                switch (element)
                {
                case RichTextElement richTextElement:
                    var value = richTextElement.Value;

                    if (value?.Length >= 5000)
                    {
                        var parts  = textAnalyzer.SplitHtml(value);
                        var result = "";

                        foreach (var part in parts)
                        {
                            var(partTranslated, partTranslation) = await Translate(part, translationLanguage);

                            if (partTranslated)
                            {
                                result += partTranslation;
                            }
                            ;
                        }

                        if (!string.IsNullOrWhiteSpace(result))
                        {
                            richTextElement.Value = result;
                        }

                        break;
                    }

                    var(translated, translation) = await Translate(richTextElement.Value, translationLanguage);

                    if (translated)
                    {
                        richTextElement.Value = translation;
                    }
                    ;
                    break;

                case UrlSlugElement urlSlugElement:
                    (translated, translation) = await Translate(urlSlugElement.Value, translationLanguage);

                    if (translated)
                    {
                        urlSlugElement.Value = translation.Replace(" ", "-");
                    }
                    ;
                    break;

                case TextElement textElement:
                    (translated, translation) = await Translate(textElement.Value, translationLanguage);

                    if (translated)
                    {
                        textElement.Value = translation;
                    }
                    ;
                    break;
                }
            }

            await kontentRepository.UpsertLanguageVariant(new UpsertLanguageVariantParameters
            {
                ItemId   = item.Item.Id,
                Language = language,
                Variant  = languageVariant
            });
        }
Esempio n. 2
0
        private async Task TranslateItem(Item item, string languageCodename, string translationLanguage)
        {
            if (item.ItemReference == null)
            {
                throw new ArgumentNullException(nameof(item.ItemReference));
            }

            var languageVariant = await kontentRepository.RetrieveLanguageVariant(new RetrieveLanguageVariantParameters
            {
                ItemReference     = item.ItemReference,
                LanguageReference = item.LanguageReference
            });

            if (languageVariant == null)
            {
                throw new NotImplementedException("Variant could not be retrieved.");
            }

            if (languageVariant.Elements == null)
            {
                throw new NotImplementedException("Variant does not have elements.");
            }

            foreach (var element in languageVariant.Elements)
            {
                switch (element)
                {
                case RichTextElement richTextElement:
                {
                    var value = richTextElement.Value;

                    if (value?.Length >= 5000)
                    {
                        var parts      = textAnalyzer.SplitHtml(value);
                        var longResult = "";

                        foreach (var part in parts)
                        {
                            var(translated, translation) = await Translate(part, translationLanguage);

                            if (translated)
                            {
                                longResult += translation;
                            }
                            ;
                        }

                        if (!string.IsNullOrWhiteSpace(longResult))
                        {
                            richTextElement.Value = longResult;
                        }

                        break;
                    }

                    var result = await Translate(richTextElement.Value, translationLanguage);

                    if (result.translated)
                    {
                        richTextElement.Value = result.translation;
                    }
                    ;
                    break;
                }

                case UrlSlugElement urlSlugElement:
                {
                    var(translated, translation) = await Translate(urlSlugElement.Value, translationLanguage);

                    if (translated)
                    {
                        urlSlugElement.Value = translation.Replace(" ", "-");
                    }
                    ;
                    break;
                }

                case TextElement textElement:
                {
                    var(translated, translation) = await Translate(textElement.Value, translationLanguage);

                    if (translated)
                    {
                        textElement.Value = translation;
                    }
                    ;
                    break;
                }
                }
            }

            await kontentRepository.UpsertLanguageVariant(new UpsertLanguageVariantParameters
            {
                LanguageReference = new CodenameReference(languageCodename),
                Variant           = languageVariant
            });
        }