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 }); }
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 }); }