채팅방 서비스에 언어 컨텍스트에 따라 캐릭터명 번역을 적용하는 기능이 추가되어, 영어와 일본어 설정 시 번역된 캐릭터명이 표시되도록 수정

This commit is contained in:
2025-12-19 23:54:25 +09:00
parent 4a4dbccc0d
commit 6fa0667120

View File

@@ -5,6 +5,7 @@ import kr.co.vividnext.sodalive.can.use.CanUsage
import kr.co.vividnext.sodalive.chat.character.image.CharacterImage import kr.co.vividnext.sodalive.chat.character.image.CharacterImage
import kr.co.vividnext.sodalive.chat.character.image.CharacterImageService import kr.co.vividnext.sodalive.chat.character.image.CharacterImageService
import kr.co.vividnext.sodalive.chat.character.service.ChatCharacterService import kr.co.vividnext.sodalive.chat.character.service.ChatCharacterService
import kr.co.vividnext.sodalive.chat.character.translate.AiCharacterTranslationRepository
import kr.co.vividnext.sodalive.chat.quota.room.ChatRoomQuotaService import kr.co.vividnext.sodalive.chat.quota.room.ChatRoomQuotaService
import kr.co.vividnext.sodalive.chat.room.ChatMessage import kr.co.vividnext.sodalive.chat.room.ChatMessage
import kr.co.vividnext.sodalive.chat.room.ChatMessageType import kr.co.vividnext.sodalive.chat.room.ChatMessageType
@@ -26,6 +27,8 @@ import kr.co.vividnext.sodalive.chat.room.repository.ChatMessageRepository
import kr.co.vividnext.sodalive.chat.room.repository.ChatParticipantRepository import kr.co.vividnext.sodalive.chat.room.repository.ChatParticipantRepository
import kr.co.vividnext.sodalive.chat.room.repository.ChatRoomRepository import kr.co.vividnext.sodalive.chat.room.repository.ChatRoomRepository
import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.common.SodaException
import kr.co.vividnext.sodalive.i18n.Lang
import kr.co.vividnext.sodalive.i18n.LangContext
import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.Member
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Value import org.springframework.beans.factory.annotation.Value
@@ -50,6 +53,8 @@ class ChatRoomService(
private val messageRepository: ChatMessageRepository, private val messageRepository: ChatMessageRepository,
private val characterService: ChatCharacterService, private val characterService: ChatCharacterService,
private val characterImageService: CharacterImageService, private val characterImageService: CharacterImageService,
private val langContext: LangContext,
private val aiCharacterTranslationRepository: AiCharacterTranslationRepository,
private val canPaymentService: kr.co.vividnext.sodalive.can.payment.CanPaymentService, private val canPaymentService: kr.co.vividnext.sodalive.can.payment.CanPaymentService,
private val imageCloudFront: kr.co.vividnext.sodalive.aws.cloudfront.ImageContentCloudFront, private val imageCloudFront: kr.co.vividnext.sodalive.aws.cloudfront.ImageContentCloudFront,
private val chatQuotaService: kr.co.vividnext.sodalive.chat.quota.ChatQuotaService, private val chatQuotaService: kr.co.vividnext.sodalive.chat.quota.ChatQuotaService,
@@ -270,10 +275,22 @@ class ChatRoomService(
val time = latest?.createdAt ?: q.lastActivityAt val time = latest?.createdAt ?: q.lastActivityAt
val timeLabel = formatRelativeTime(time) val timeLabel = formatRelativeTime(time)
// 언어 컨텍스트(en/ja)에서 번역본이 존재하면 번역된 캐릭터명을 사용
val localizedTitle = when (langContext.lang) {
Lang.EN, Lang.JA -> {
val tr = aiCharacterTranslationRepository
.findByCharacterIdAndLocale(q.characterId, langContext.lang.code)
val name = tr?.renderedPayload?.name
if (!name.isNullOrBlank()) name else q.title
}
else -> q.title
}
ChatRoomListItemDto( ChatRoomListItemDto(
chatRoomId = q.chatRoomId, chatRoomId = q.chatRoomId,
characterId = q.characterId, characterId = q.characterId,
title = q.title, title = localizedTitle,
imageUrl = imageUrl, imageUrl = imageUrl,
opponentType = opponentType, opponentType = opponentType,
lastMessagePreview = preview, lastMessagePreview = preview,