크리에이터 콘텐츠 카테고리 언어 감지 및 번역 기능 추가
This commit is contained in:
@@ -13,6 +13,9 @@ import kr.co.vividnext.sodalive.chat.original.translation.OriginalWorkTranslatio
|
||||
import kr.co.vividnext.sodalive.chat.original.translation.OriginalWorkTranslationPayload
|
||||
import kr.co.vividnext.sodalive.chat.original.translation.OriginalWorkTranslationRepository
|
||||
import kr.co.vividnext.sodalive.content.AudioContentRepository
|
||||
import kr.co.vividnext.sodalive.content.category.CategoryRepository
|
||||
import kr.co.vividnext.sodalive.content.category.CategoryTranslation
|
||||
import kr.co.vividnext.sodalive.content.category.CategoryTranslationRepository
|
||||
import kr.co.vividnext.sodalive.content.series.translation.SeriesGenreTranslation
|
||||
import kr.co.vividnext.sodalive.content.series.translation.SeriesGenreTranslationRepository
|
||||
import kr.co.vividnext.sodalive.content.series.translation.SeriesTranslation
|
||||
@@ -41,7 +44,9 @@ enum class LanguageTranslationTargetType {
|
||||
SERIES,
|
||||
SERIES_GENRE,
|
||||
|
||||
ORIGINAL_WORK
|
||||
ORIGINAL_WORK,
|
||||
|
||||
CREATOR_CONTENT_CATEGORY
|
||||
}
|
||||
|
||||
class LanguageTranslationEvent(
|
||||
@@ -65,6 +70,9 @@ class LanguageTranslationListener(
|
||||
private val seriesGenreTranslationRepository: SeriesGenreTranslationRepository,
|
||||
private val originalWorkTranslationRepository: OriginalWorkTranslationRepository,
|
||||
|
||||
private val categoryRepository: CategoryRepository,
|
||||
private val categoryTranslationRepository: CategoryTranslationRepository,
|
||||
|
||||
private val translationService: PapagoTranslationService
|
||||
) {
|
||||
@Async
|
||||
@@ -78,6 +86,7 @@ class LanguageTranslationListener(
|
||||
LanguageTranslationTargetType.SERIES -> handleSeriesLanguageTranslation(event)
|
||||
LanguageTranslationTargetType.SERIES_GENRE -> handleSeriesGenreLanguageTranslation(event)
|
||||
LanguageTranslationTargetType.ORIGINAL_WORK -> handleOriginalWorkLanguageTranslation(event)
|
||||
LanguageTranslationTargetType.CREATOR_CONTENT_CATEGORY -> handleCreatorContentCategoryLanguageTranslation(event)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -453,4 +462,45 @@ class LanguageTranslationListener(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCreatorContentCategoryLanguageTranslation(event: LanguageTranslationEvent) {
|
||||
val category = categoryRepository.findByIdOrNull(event.id)
|
||||
|
||||
if (category == null || !category.isActive || category.languageCode.isNullOrBlank()) return
|
||||
|
||||
val sourceLanguage = category.languageCode ?: "ko"
|
||||
getTranslatableLanguageCodes(sourceLanguage).forEach { locale ->
|
||||
val texts = mutableListOf<String>()
|
||||
texts.add(category.title)
|
||||
|
||||
val response = translationService.translate(
|
||||
request = TranslateRequest(
|
||||
texts = texts,
|
||||
sourceLanguage = sourceLanguage,
|
||||
targetLanguage = locale
|
||||
)
|
||||
)
|
||||
|
||||
val translatedTexts = response.translatedText
|
||||
if (translatedTexts.size == texts.size) {
|
||||
val translatedCategory = translatedTexts[0]
|
||||
|
||||
val existing = categoryTranslationRepository
|
||||
.findByCategoryIdAndLocale(category.id!!, locale)
|
||||
|
||||
if (existing == null) {
|
||||
categoryTranslationRepository.save(
|
||||
CategoryTranslation(
|
||||
categoryId = category.id!!,
|
||||
locale = locale,
|
||||
category = translatedCategory
|
||||
)
|
||||
)
|
||||
} else {
|
||||
existing.category = translatedCategory
|
||||
categoryTranslationRepository.save(existing)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user