ChatRoom 문자열 리소스화
This commit is contained in:
@@ -76,7 +76,7 @@ class ChatBackgroundPickerDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
private fun setupUi() {
|
private fun setupUi() {
|
||||||
binding.ivClose.setOnClickListener { dismiss() }
|
binding.ivClose.setOnClickListener { dismiss() }
|
||||||
binding.tvTitle.text = "배경 사진 선택"
|
binding.tvTitle.setText(R.string.chat_background_picker_title)
|
||||||
|
|
||||||
binding.rvGrid.layoutManager = GridLayoutManager(requireContext(), 3)
|
binding.rvGrid.layoutManager = GridLayoutManager(requireContext(), 3)
|
||||||
adapter = BgAdapter { item ->
|
adapter = BgAdapter { item ->
|
||||||
|
|||||||
@@ -583,7 +583,8 @@ class ChatMessageAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
|||||||
// 접근성: 다국어 대응
|
// 접근성: 다국어 대응
|
||||||
val ctx = itemView.context
|
val ctx = itemView.context
|
||||||
val messageWord = ctx.getString(R.string.a11y_message_word)
|
val messageWord = ctx.getString(R.string.a11y_message_word)
|
||||||
val spokenMain = if (isImageMsg) "이미지" else binding.tvMessage.text
|
val imageWord = ctx.getString(R.string.a11y_image)
|
||||||
|
val spokenMain = if (isImageMsg) imageWord else binding.tvMessage.text
|
||||||
itemView.contentDescription = buildString {
|
itemView.contentDescription = buildString {
|
||||||
if (!isGrouped && !binding.tvName.text.isNullOrEmpty()) {
|
if (!isGrouped && !binding.tvName.text.isNullOrEmpty()) {
|
||||||
append(binding.tvName.text)
|
append(binding.tvName.text)
|
||||||
|
|||||||
@@ -104,8 +104,11 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
binding.ivBackgroundProfile.setImageResource(R.drawable.ic_placeholder_profile)
|
binding.ivBackgroundProfile.setImageResource(R.drawable.ic_placeholder_profile)
|
||||||
// 배경은 서버 응답 수신 시 적용 (기본은 플레이스홀더 유지)
|
// 배경은 서버 응답 수신 시 적용 (기본은 플레이스홀더 유지)
|
||||||
// 배지는 기본 Clone으로 둔다가 실제 값으로 갱신 (디자인 기본 배경도 clone)
|
// 배지는 기본 Clone으로 둔다가 실제 값으로 갱신 (디자인 기본 배경도 clone)
|
||||||
binding.tvCharacterTypeBadge.text = "Clone"
|
val badge = getString(R.string.chat_character_type_clone)
|
||||||
|
binding.tvCharacterTypeBadge.text = badge
|
||||||
binding.tvCharacterTypeBadge.setBackgroundResource(R.drawable.bg_character_status_clone)
|
binding.tvCharacterTypeBadge.setBackgroundResource(R.drawable.bg_character_status_clone)
|
||||||
|
binding.ivProfile.contentDescription =
|
||||||
|
getString(R.string.chat_profile_image_content_description, badge)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,14 +133,15 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
|
|
||||||
// 타입 배지 텍스트 및 배경
|
// 타입 배지 텍스트 및 배경
|
||||||
val (badgeText, badgeBg) = when (info.characterType) {
|
val (badgeText, badgeBg) = when (info.characterType) {
|
||||||
CharacterType.CLONE -> "Clone" to R.drawable.bg_character_status_clone
|
CharacterType.CLONE -> getString(R.string.chat_character_type_clone) to R.drawable.bg_character_status_clone
|
||||||
CharacterType.CHARACTER -> "Character" to R.drawable.bg_character_status_character
|
CharacterType.CHARACTER -> getString(R.string.chat_character_type_character) to R.drawable.bg_character_status_character
|
||||||
}
|
}
|
||||||
binding.tvCharacterTypeBadge.text = badgeText
|
binding.tvCharacterTypeBadge.text = badgeText
|
||||||
binding.tvCharacterTypeBadge.setBackgroundResource(badgeBg)
|
binding.tvCharacterTypeBadge.setBackgroundResource(badgeBg)
|
||||||
|
|
||||||
// 접근성
|
// 접근성
|
||||||
binding.ivProfile.contentDescription = "$badgeText 프로필 이미지"
|
binding.ivProfile.contentDescription =
|
||||||
|
getString(R.string.chat_profile_image_content_description, badgeText)
|
||||||
|
|
||||||
// 5.4: 캐릭터 타입에 맞춰 안내 메시지 텍스트 갱신
|
// 5.4: 캐릭터 타입에 맞춰 안내 메시지 텍스트 갱신
|
||||||
updateNoticeText()
|
updateNoticeText()
|
||||||
@@ -384,7 +388,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
// 실패: 타이핑 인디케이터 제거 및 FAILED로 업데이트
|
// 실패: 타이핑 인디케이터 제거 및 FAILED로 업데이트
|
||||||
chatAdapter.hideTypingIndicator()
|
chatAdapter.hideTypingIndicator()
|
||||||
updateUserMessageStatus(localId, MessageStatus.FAILED)
|
updateUserMessageStatus(localId, MessageStatus.FAILED)
|
||||||
showToast(error.message ?: "메시지 전송에 실패했습니다.")
|
showToast(error.message ?: getString(R.string.chat_send_failed))
|
||||||
})
|
})
|
||||||
compositeDisposable.add(disposable)
|
compositeDisposable.add(disposable)
|
||||||
}
|
}
|
||||||
@@ -445,7 +449,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
chatAdapter.hideTypingIndicator()
|
chatAdapter.hideTypingIndicator()
|
||||||
|
|
||||||
val now = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
val replyText = "안녕하세요! \"$userContent\"에 대한 답변입니다."
|
val replyText = getString(R.string.chat_mock_ai_reply, userContent)
|
||||||
val aiMsg = ChatMessage(
|
val aiMsg = ChatMessage(
|
||||||
messageId = now,
|
messageId = now,
|
||||||
message = replyText,
|
message = replyText,
|
||||||
@@ -473,7 +477,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
SharedPreferenceManager.can = newCan
|
SharedPreferenceManager.can = newCan
|
||||||
binding.tvCanBadge.text = newCan.moneyFormat()
|
binding.tvCanBadge.text = newCan.moneyFormat()
|
||||||
}, { err ->
|
}, { err ->
|
||||||
showToast(err.message ?: "결제에 실패했습니다.")
|
showToast(err.message ?: getString(R.string.chat_quota_purchase_failed))
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -665,7 +669,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
}, { error ->
|
}, { error ->
|
||||||
isLoading = false
|
isLoading = false
|
||||||
// 오프라인/실패 시: 로컬 데이터가 이미 표시되어 있으면 그대로 유지
|
// 오프라인/실패 시: 로컬 데이터가 이미 표시되어 있으면 그대로 유지
|
||||||
showToast(error.message ?: "채팅방 데이터를 불러오지 못했습니다.")
|
showToast(error.message ?: getString(R.string.chat_room_load_failed))
|
||||||
})
|
})
|
||||||
compositeDisposable.add(networkDisposable)
|
compositeDisposable.add(networkDisposable)
|
||||||
}
|
}
|
||||||
@@ -776,7 +780,7 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
)
|
)
|
||||||
}, { error ->
|
}, { error ->
|
||||||
isLoading = false
|
isLoading = false
|
||||||
showToast(error.message ?: "이전 메시지를 불러오지 못했습니다.")
|
showToast(error.message ?: getString(R.string.chat_previous_messages_load_failed))
|
||||||
})
|
})
|
||||||
|
|
||||||
compositeDisposable.add(disposable)
|
compositeDisposable.add(disposable)
|
||||||
@@ -793,15 +797,15 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
if (message.mine || !isLock) return
|
if (message.mine || !isLock) return
|
||||||
|
|
||||||
val priceText = message.price?.toString() ?: "0"
|
val priceText = message.price?.toString() ?: "0"
|
||||||
val title = "잠금된 메시지"
|
val title = getString(R.string.chat_locked_message_title)
|
||||||
val desc = "이 메시지를 ${priceText}캔으로 잠금해제 하시겠습니까?"
|
val desc = getString(R.string.chat_locked_message_desc, priceText)
|
||||||
|
|
||||||
SodaDialog(
|
SodaDialog(
|
||||||
activity = this,
|
activity = this,
|
||||||
layoutInflater = this.layoutInflater,
|
layoutInflater = this.layoutInflater,
|
||||||
title = title,
|
title = title,
|
||||||
desc = desc,
|
desc = desc,
|
||||||
confirmButtonTitle = "잠금해제",
|
confirmButtonTitle = getString(R.string.chat_locked_message_confirm),
|
||||||
confirmButtonClick = {
|
confirmButtonClick = {
|
||||||
val token = "Bearer ${SharedPreferenceManager.token}"
|
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||||
val disposable = chatRepository.purchaseMessage(
|
val disposable = chatRepository.purchaseMessage(
|
||||||
@@ -820,11 +824,11 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
chatAdapter.setItems(items)
|
chatAdapter.setItems(items)
|
||||||
}
|
}
|
||||||
}, { error ->
|
}, { error ->
|
||||||
showToast(error.message ?: "구매에 실패했습니다.")
|
showToast(error.message ?: getString(R.string.chat_purchase_message_failed))
|
||||||
})
|
})
|
||||||
compositeDisposable.add(disposable)
|
compositeDisposable.add(disposable)
|
||||||
},
|
},
|
||||||
cancelButtonTitle = "취소",
|
cancelButtonTitle = getString(R.string.cancel),
|
||||||
cancelButtonClick = { /* no-op */ }
|
cancelButtonClick = { /* no-op */ }
|
||||||
).show(resources.displayMetrics.widthPixels)
|
).show(resources.displayMetrics.widthPixels)
|
||||||
}
|
}
|
||||||
@@ -903,19 +907,22 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun onResetChatRequested() {
|
fun onResetChatRequested() {
|
||||||
val title = "대화 초기화"
|
val title = getString(R.string.chat_reset_title)
|
||||||
val desc = "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다."
|
val desc = getString(R.string.chat_reset_desc)
|
||||||
SodaDialog(
|
SodaDialog(
|
||||||
activity = this,
|
activity = this,
|
||||||
layoutInflater = this.layoutInflater,
|
layoutInflater = this.layoutInflater,
|
||||||
title = title,
|
title = title,
|
||||||
desc = desc,
|
desc = desc,
|
||||||
confirmButtonTitle = "30캔으로 초기화",
|
confirmButtonTitle = getString(
|
||||||
|
R.string.chat_reset_confirm,
|
||||||
|
getString(R.string.chat_reset_can_price)
|
||||||
|
),
|
||||||
confirmButtonClick = {
|
confirmButtonClick = {
|
||||||
val loadingDialog = LoadingDialog(this, layoutInflater)
|
val loadingDialog = LoadingDialog(this, layoutInflater)
|
||||||
loadingDialog.show(
|
loadingDialog.show(
|
||||||
screenWidth,
|
screenWidth,
|
||||||
"대화 초기화 중..."
|
getString(R.string.chat_reset_loading)
|
||||||
)
|
)
|
||||||
|
|
||||||
val token = "Bearer ${SharedPreferenceManager.token}"
|
val token = "Bearer ${SharedPreferenceManager.token}"
|
||||||
@@ -933,11 +940,11 @@ class ChatRoomActivity : BaseActivity<ActivityChatRoomBinding>(
|
|||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
finish()
|
finish()
|
||||||
}, { error ->
|
}, { error ->
|
||||||
showToast(error.message ?: "대화 초기화에 실패했어요.")
|
showToast(error.message ?: getString(R.string.chat_reset_failed))
|
||||||
})
|
})
|
||||||
compositeDisposable.add(disposable)
|
compositeDisposable.add(disposable)
|
||||||
},
|
},
|
||||||
cancelButtonTitle = "취소",
|
cancelButtonTitle = getString(R.string.cancel),
|
||||||
cancelButtonClick = { /* no-op */ }
|
cancelButtonClick = { /* no-op */ }
|
||||||
).show(resources.displayMetrics.widthPixels)
|
).show(resources.displayMetrics.widthPixels)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
android:id="@+id/iv_close"
|
android:id="@+id/iv_close"
|
||||||
android:layout_width="24dp"
|
android:layout_width="24dp"
|
||||||
android:layout_height="24dp"
|
android:layout_height="24dp"
|
||||||
android:contentDescription="닫기"
|
android:contentDescription="@string/a11y_close"
|
||||||
android:src="@drawable/ic_back" />
|
android:src="@drawable/ic_back" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:text="배경 이미지 선택"
|
android:text="@string/chat_background_picker_title"
|
||||||
android:textColor="#FFFFFFFF"
|
android:textColor="#FFFFFFFF"
|
||||||
android:textSize="20sp" />
|
android:textSize="20sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
android:ellipsize="end"
|
android:ellipsize="end"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:maxLines="1"
|
android:maxLines="1"
|
||||||
android:text="대화 설정"
|
android:text="@string/chat_more_title"
|
||||||
android:textColor="#FFFFFFFF"
|
android:textColor="#FFFFFFFF"
|
||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="배경 이미지"
|
android:text="@string/chat_more_background_label"
|
||||||
android:textColor="#B0BEC5"
|
android:textColor="#B0BEC5"
|
||||||
android:textSize="18sp" />
|
android:textSize="18sp" />
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="배경 이미지 변경"
|
android:text="@string/chat_more_background_change"
|
||||||
android:textColor="#B0BEC5"
|
android:textColor="#B0BEC5"
|
||||||
android:textSize="18sp" />
|
android:textSize="18sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="대화 초기화"
|
android:text="@string/chat_reset_title"
|
||||||
android:textColor="#B0BEC5"
|
android:textColor="#B0BEC5"
|
||||||
android:textSize="18sp" />
|
android:textSize="18sp" />
|
||||||
|
|
||||||
@@ -144,8 +144,9 @@
|
|||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginEnd="4dp"
|
||||||
android:fontFamily="@font/pretendard_regular"
|
android:fontFamily="@font/pretendard_regular"
|
||||||
android:text="⚠️ "
|
android:text="@string/chat_reset_warning_prefix"
|
||||||
android:textColor="#B3FFFFFF"
|
android:textColor="#B3FFFFFF"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
|
|
||||||
@@ -153,7 +154,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/pretendard_regular"
|
android:fontFamily="@font/pretendard_regular"
|
||||||
android:text="지금까지의 대화가 모두 초기화 되고, 이용자가 새로운 캐릭터가 되어 새롭게 대화를 시작합니다."
|
android:text="@string/chat_reset_desc"
|
||||||
android:textColor="#B3FFFFFF"
|
android:textColor="#B3FFFFFF"
|
||||||
android:textSize="14sp" />
|
android:textSize="14sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
@@ -181,7 +182,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="30"
|
android:text="@string/chat_reset_can_price"
|
||||||
android:textColor="#263238"
|
android:textColor="#263238"
|
||||||
android:textSize="16sp" />
|
android:textSize="16sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -137,7 +137,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="눌러서 잠금해제"
|
android:text="@string/chat_unlock_image_hint"
|
||||||
android:textColor="@android:color/white"
|
android:textColor="@android:color/white"
|
||||||
android:textSize="18sp" />
|
android:textSize="18sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
android:paddingHorizontal="6dp"
|
android:paddingHorizontal="6dp"
|
||||||
android:paddingVertical="2dp"
|
android:paddingVertical="2dp"
|
||||||
android:includeFontPadding="false"
|
android:includeFontPadding="false"
|
||||||
android:text="현재 배경"
|
android:text="@string/chat_background_current_label"
|
||||||
android:textColor="#FFFFFF"
|
android:textColor="#FFFFFF"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="8dp"
|
android:layout_marginTop="8dp"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:text="기다리면 무료 이용이 가능합니다."
|
android:text="@string/chat_quota_notice_message"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="18sp" />
|
android:textSize="18sp" />
|
||||||
|
|
||||||
@@ -63,16 +63,17 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:includeFontPadding="false"
|
android:includeFontPadding="false"
|
||||||
android:text="10"
|
android:text="@string/chat_quota_price"
|
||||||
android:textColor="#263238"
|
android:textColor="#263238"
|
||||||
android:textSize="24sp" />
|
android:textSize="24sp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
android:fontFamily="@font/pretendard_bold"
|
android:fontFamily="@font/pretendard_bold"
|
||||||
android:includeFontPadding="false"
|
android:includeFontPadding="false"
|
||||||
android:text=" (채팅 12개) 바로 대화 시작"
|
android:text="@string/chat_quota_purchase_cta"
|
||||||
android:textColor="#263238"
|
android:textColor="#263238"
|
||||||
android:textSize="18sp" />
|
android:textSize="18sp" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -29,7 +29,35 @@
|
|||||||
<!-- Chat Room UI strings (English) -->
|
<!-- Chat Room UI strings (English) -->
|
||||||
<string name="chat_notice_clone">AI Clone converses based on the creator\'s information, but it may not perfectly reflect all details or match real conversations.</string>
|
<string name="chat_notice_clone">AI Clone converses based on the creator\'s information, but it may not perfectly reflect all details or match real conversations.</string>
|
||||||
<string name="chat_notice_character">VoiceOn AI Character Talk allows a high degree of freedom. You can be anyone in the conversation. Talk as a character in a universe or create your own story with a new persona together with the character.\nNote: AI Character Talk is in open beta; conversations may be awkward or incomplete.</string>
|
<string name="chat_notice_character">VoiceOn AI Character Talk allows a high degree of freedom. You can be anyone in the conversation. Talk as a character in a universe or create your own story with a new persona together with the character.\nNote: AI Character Talk is in open beta; conversations may be awkward or incomplete.</string>
|
||||||
|
<string name="chat_character_type_clone">Clone</string>
|
||||||
|
<string name="chat_character_type_character">Character</string>
|
||||||
|
<string name="chat_profile_image_content_description">%1$s profile image</string>
|
||||||
<string name="chat_input_placeholder">Type a message.</string>
|
<string name="chat_input_placeholder">Type a message.</string>
|
||||||
|
<string name="chat_send_failed">Failed to send message.</string>
|
||||||
|
<string name="chat_mock_ai_reply">Hello! Here is a reply to "%1$s".</string>
|
||||||
|
<string name="chat_quota_purchase_failed">Failed to purchase.</string>
|
||||||
|
<string name="chat_purchase_message_failed">Failed to unlock the message.</string>
|
||||||
|
<string name="chat_room_load_failed">Could not load chat room data.</string>
|
||||||
|
<string name="chat_previous_messages_load_failed">Could not load previous messages.</string>
|
||||||
|
<string name="chat_locked_message_title">Locked message</string>
|
||||||
|
<string name="chat_locked_message_desc">Unlock this message for %1$s cans?</string>
|
||||||
|
<string name="chat_locked_message_confirm">Unlock</string>
|
||||||
|
<string name="chat_reset_title">Reset chat</string>
|
||||||
|
<string name="chat_reset_desc">All previous chats will be cleared and a new conversation will start as a new character.</string>
|
||||||
|
<string name="chat_reset_can_price">30</string>
|
||||||
|
<string name="chat_reset_warning_prefix">⚠️</string>
|
||||||
|
<string name="chat_reset_confirm">Reset for %1$s cans</string>
|
||||||
|
<string name="chat_reset_loading">Resetting chat...</string>
|
||||||
|
<string name="chat_reset_failed">Failed to reset the chat.</string>
|
||||||
|
<string name="chat_background_picker_title">Choose background image</string>
|
||||||
|
<string name="chat_background_current_label">Current background</string>
|
||||||
|
<string name="chat_unlock_image_hint">Tap to unlock</string>
|
||||||
|
<string name="chat_quota_notice_message">You can use chat for free if you wait.</string>
|
||||||
|
<string name="chat_quota_price">10</string>
|
||||||
|
<string name="chat_quota_purchase_cta">(12 chats) Start chatting now</string>
|
||||||
|
<string name="chat_more_title">Chat settings</string>
|
||||||
|
<string name="chat_more_background_label">Background image</string>
|
||||||
|
<string name="chat_more_background_change">Change background image</string>
|
||||||
<string name="action_send">Send</string>
|
<string name="action_send">Send</string>
|
||||||
<string name="action_retry">Retry</string>
|
<string name="action_retry">Retry</string>
|
||||||
|
|
||||||
@@ -37,10 +65,12 @@
|
|||||||
<string name="a11y_profile_background">Profile background image</string>
|
<string name="a11y_profile_background">Profile background image</string>
|
||||||
<string name="a11y_back">Back</string>
|
<string name="a11y_back">Back</string>
|
||||||
<string name="a11y_profile_image">Profile image</string>
|
<string name="a11y_profile_image">Profile image</string>
|
||||||
|
<string name="a11y_close">Close</string>
|
||||||
<string name="a11y_notice">Notice</string>
|
<string name="a11y_notice">Notice</string>
|
||||||
<string name="a11y_collapse">Collapse</string>
|
<string name="a11y_collapse">Collapse</string>
|
||||||
<string name="a11y_ai_profile_image">AI profile image</string>
|
<string name="a11y_ai_profile_image">AI profile image</string>
|
||||||
<string name="a11y_typing">Typing…</string>
|
<string name="a11y_typing">Typing…</string>
|
||||||
|
<string name="a11y_image">Image</string>
|
||||||
|
|
||||||
<!-- Accessibility phrases for adapter -->
|
<!-- Accessibility phrases for adapter -->
|
||||||
<string name="a11y_my_message_prefix">My message</string>
|
<string name="a11y_my_message_prefix">My message</string>
|
||||||
|
|||||||
@@ -29,7 +29,35 @@
|
|||||||
<!-- Chat Room UI strings -->
|
<!-- Chat Room UI strings -->
|
||||||
<string name="chat_notice_clone">AI Cloneはクリエイターの情報に基づいて会話しますが、すべての情報を完全に反映したり実際の会話と一致するとは限りません。</string>
|
<string name="chat_notice_clone">AI Cloneはクリエイターの情報に基づいて会話しますが、すべての情報を完全に反映したり実際の会話と一致するとは限りません。</string>
|
||||||
<string name="chat_notice_character">ボイスオンのAIキャラクタートークでは自由度の高い会話を楽しめます。あなたは誰にでもなれます。\n世界観のキャラクターとして話したり、新しい人物としてキャラクターとあなただけのストーリーを作ってみましょう。\n※ AIキャラクタートークはオープンベータのため、会話が不自然または不完全な場合があります。</string>
|
<string name="chat_notice_character">ボイスオンのAIキャラクタートークでは自由度の高い会話を楽しめます。あなたは誰にでもなれます。\n世界観のキャラクターとして話したり、新しい人物としてキャラクターとあなただけのストーリーを作ってみましょう。\n※ AIキャラクタートークはオープンベータのため、会話が不自然または不完全な場合があります。</string>
|
||||||
|
<string name="chat_character_type_clone">クローン</string>
|
||||||
|
<string name="chat_character_type_character">キャラクター</string>
|
||||||
|
<string name="chat_profile_image_content_description">%1$sのプロフィール画像</string>
|
||||||
<string name="chat_input_placeholder">メッセージを入力してください。</string>
|
<string name="chat_input_placeholder">メッセージを入力してください。</string>
|
||||||
|
<string name="chat_send_failed">メッセージの送信に失敗しました。</string>
|
||||||
|
<string name="chat_mock_ai_reply">こんにちは。「%1$s」への返信です。</string>
|
||||||
|
<string name="chat_quota_purchase_failed">購入に失敗しました。</string>
|
||||||
|
<string name="chat_purchase_message_failed">購入に失敗しました。</string>
|
||||||
|
<string name="chat_room_load_failed">チャットルームのデータを読み込めませんでした。</string>
|
||||||
|
<string name="chat_previous_messages_load_failed">以前のメッセージを読み込めませんでした。</string>
|
||||||
|
<string name="chat_locked_message_title">ロックされたメッセージ</string>
|
||||||
|
<string name="chat_locked_message_desc">このメッセージを%1$sキャンで解除しますか?</string>
|
||||||
|
<string name="chat_locked_message_confirm">解除</string>
|
||||||
|
<string name="chat_reset_title">チャットをリセット</string>
|
||||||
|
<string name="chat_reset_desc">これまでの会話がすべて初期化され、新しいキャラクターとして再開します。</string>
|
||||||
|
<string name="chat_reset_can_price">30</string>
|
||||||
|
<string name="chat_reset_warning_prefix">⚠️</string>
|
||||||
|
<string name="chat_reset_confirm">%1$sキャンでリセット</string>
|
||||||
|
<string name="chat_reset_loading">チャットをリセット中...</string>
|
||||||
|
<string name="chat_reset_failed">チャットのリセットに失敗しました。</string>
|
||||||
|
<string name="chat_background_picker_title">背景画像を選択</string>
|
||||||
|
<string name="chat_background_current_label">現在の背景</string>
|
||||||
|
<string name="chat_unlock_image_hint">タップして解除</string>
|
||||||
|
<string name="chat_quota_notice_message">待てば無料で利用できます。</string>
|
||||||
|
<string name="chat_quota_price">10</string>
|
||||||
|
<string name="chat_quota_purchase_cta">(チャット12件) すぐに開始</string>
|
||||||
|
<string name="chat_more_title">チャット設定</string>
|
||||||
|
<string name="chat_more_background_label">背景画像</string>
|
||||||
|
<string name="chat_more_background_change">背景画像を変更</string>
|
||||||
<string name="action_send">送信</string>
|
<string name="action_send">送信</string>
|
||||||
<string name="action_retry">再送</string>
|
<string name="action_retry">再送</string>
|
||||||
|
|
||||||
@@ -37,10 +65,12 @@
|
|||||||
<string name="a11y_profile_background">プロフィール背景画像</string>
|
<string name="a11y_profile_background">プロフィール背景画像</string>
|
||||||
<string name="a11y_back">戻る</string>
|
<string name="a11y_back">戻る</string>
|
||||||
<string name="a11y_profile_image">プロフィール画像</string>
|
<string name="a11y_profile_image">プロフィール画像</string>
|
||||||
|
<string name="a11y_close">閉じる</string>
|
||||||
<string name="a11y_notice">お知らせ</string>
|
<string name="a11y_notice">お知らせ</string>
|
||||||
<string name="a11y_collapse">折りたたむ</string>
|
<string name="a11y_collapse">折りたたむ</string>
|
||||||
<string name="a11y_ai_profile_image">AIプロフィール画像</string>
|
<string name="a11y_ai_profile_image">AIプロフィール画像</string>
|
||||||
<string name="a11y_typing">相手が入力中</string>
|
<string name="a11y_typing">相手が入力中</string>
|
||||||
|
<string name="a11y_image">画像</string>
|
||||||
|
|
||||||
<!-- Accessibility phrases for adapter -->
|
<!-- Accessibility phrases for adapter -->
|
||||||
<string name="a11y_my_message_prefix">自分のメッセージ</string>
|
<string name="a11y_my_message_prefix">自分のメッセージ</string>
|
||||||
|
|||||||
@@ -29,17 +29,47 @@
|
|||||||
<!-- Chat Room UI strings (tasks 2.3) -->
|
<!-- Chat Room UI strings (tasks 2.3) -->
|
||||||
<string name="chat_notice_clone">AI Clone은 크리에이터의 정보를 기반으로 대화하지만, 모든 정보를 완벽하게 반영하거나 실제 대화와 일치하지 않을 수 있습니다.</string>
|
<string name="chat_notice_clone">AI Clone은 크리에이터의 정보를 기반으로 대화하지만, 모든 정보를 완벽하게 반영하거나 실제 대화와 일치하지 않을 수 있습니다.</string>
|
||||||
<string name="chat_notice_character">보이스온 AI캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다.\n세계관 속 캐릭터로 대화를 하거나 새로운 인물로 캐릭터와 당신만의 스토리를 만들어보세요.\n※ AI캐릭터톡은 오픈베타 서비스 중이며, 캐릭터의 대화가 어색하거나 불완전할 수 있습니다.</string>
|
<string name="chat_notice_character">보이스온 AI캐릭터톡은 대화의 자유도가 높아 대화에 참여하는 당신은 누구든 될 수 있습니다.\n세계관 속 캐릭터로 대화를 하거나 새로운 인물로 캐릭터와 당신만의 스토리를 만들어보세요.\n※ AI캐릭터톡은 오픈베타 서비스 중이며, 캐릭터의 대화가 어색하거나 불완전할 수 있습니다.</string>
|
||||||
|
<string name="chat_character_type_clone">Clone</string>
|
||||||
|
<string name="chat_character_type_character">Character</string>
|
||||||
|
<string name="chat_profile_image_content_description">%1$s 프로필 이미지</string>
|
||||||
<string name="chat_input_placeholder">메세지를 입력하세요.</string>
|
<string name="chat_input_placeholder">메세지를 입력하세요.</string>
|
||||||
|
<string name="chat_send_failed">메시지 전송에 실패했습니다.</string>
|
||||||
|
<string name="chat_mock_ai_reply">안녕하세요! "%1$s"에 대한 답변입니다.</string>
|
||||||
|
<string name="chat_quota_purchase_failed">결제에 실패했습니다.</string>
|
||||||
|
<string name="chat_purchase_message_failed">구매에 실패했습니다.</string>
|
||||||
|
<string name="chat_room_load_failed">채팅방 데이터를 불러오지 못했습니다.</string>
|
||||||
|
<string name="chat_previous_messages_load_failed">이전 메시지를 불러오지 못했습니다.</string>
|
||||||
|
<string name="chat_locked_message_title">잠금된 메시지</string>
|
||||||
|
<string name="chat_locked_message_desc">이 메시지를 %1$s캔으로 잠금해제 하시겠습니까?</string>
|
||||||
|
<string name="chat_locked_message_confirm">잠금해제</string>
|
||||||
|
<string name="chat_reset_title">대화 초기화</string>
|
||||||
|
<string name="chat_reset_desc">지금까지의 대화가 모두 초기화 되고, 이용자가 새로운 캐릭터가 되어 새롭게 대화를 시작합니다.</string>
|
||||||
|
<string name="chat_reset_can_price">30</string>
|
||||||
|
<string name="chat_reset_warning_prefix">⚠️</string>
|
||||||
|
<string name="chat_reset_confirm">%1$s캔으로 초기화</string>
|
||||||
|
<string name="chat_reset_loading">대화 초기화 중...</string>
|
||||||
|
<string name="chat_reset_failed">대화 초기화에 실패했어요.</string>
|
||||||
|
<string name="chat_background_picker_title">배경 이미지 선택</string>
|
||||||
|
<string name="chat_background_current_label">현재 배경</string>
|
||||||
|
<string name="chat_unlock_image_hint">눌러서 잠금해제</string>
|
||||||
|
<string name="chat_quota_notice_message">기다리면 무료 이용이 가능합니다.</string>
|
||||||
|
<string name="chat_quota_price">10</string>
|
||||||
|
<string name="chat_quota_purchase_cta">(채팅 12개) 바로 대화 시작</string>
|
||||||
|
<string name="chat_more_title">대화 설정</string>
|
||||||
|
<string name="chat_more_background_label">배경 이미지</string>
|
||||||
|
<string name="chat_more_background_change">배경 이미지 변경</string>
|
||||||
<string name="action_send">전송</string>
|
<string name="action_send">전송</string>
|
||||||
<string name="action_retry">다시 전송</string>
|
<string name="action_retry">다시 전송</string>
|
||||||
<!-- Accessibility labels -->
|
<!-- Accessibility labels -->
|
||||||
<string name="a11y_profile_background">프로필 배경 이미지</string>
|
<string name="a11y_profile_background">프로필 배경 이미지</string>
|
||||||
<string name="a11y_back">뒤로가기</string>
|
<string name="a11y_back">뒤로가기</string>
|
||||||
<string name="a11y_profile_image">프로필 이미지</string>
|
<string name="a11y_profile_image">프로필 이미지</string>
|
||||||
|
<string name="a11y_close">닫기</string>
|
||||||
<string name="a11y_notice">안내</string>
|
<string name="a11y_notice">안내</string>
|
||||||
<string name="a11y_collapse">접기</string>
|
<string name="a11y_collapse">접기</string>
|
||||||
<string name="a11y_ai_profile_image">AI 프로필 이미지</string>
|
<string name="a11y_ai_profile_image">AI 프로필 이미지</string>
|
||||||
<string name="a11y_typing">상대방이 입력 중</string>
|
<string name="a11y_typing">상대방이 입력 중</string>
|
||||||
|
<string name="a11y_image">이미지</string>
|
||||||
|
|
||||||
<!-- Accessibility phrases for adapter -->
|
<!-- Accessibility phrases for adapter -->
|
||||||
<string name="a11y_my_message_prefix">내 메시지</string>
|
<string name="a11y_my_message_prefix">내 메시지</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user