오디오 콘텐츠 주문 화면 문자열 리소스화

주문 목록/확인 UI의 텍스트를 ko/en/ja 리소스로 이전
This commit is contained in:
2025-12-03 15:32:41 +09:00
parent dc00fd0277
commit 6ef19d53f4
12 changed files with 93 additions and 40 deletions

View File

@@ -1,7 +1,5 @@
package kr.co.vividnext.sodalive.audio_content.box package kr.co.vividnext.sodalive.audio_content.box
import android.os.Handler
import android.os.Looper
import android.widget.LinearLayout import android.widget.LinearLayout
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R

View File

@@ -1,6 +1,5 @@
package kr.co.vividnext.sodalive.audio_content.order package kr.co.vividnext.sodalive.audio_content.order
import android.annotation.SuppressLint
import android.app.Activity import android.app.Activity
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
@@ -17,7 +16,6 @@ import kr.co.vividnext.sodalive.databinding.DialogAudioContentOrderConfirmBindin
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.extensions.moneyFormat
@SuppressLint("SetTextI18n")
class AudioContentOrderConfirmDialog( class AudioContentOrderConfirmDialog(
activity: Activity, activity: Activity,
layoutInflater: LayoutInflater, layoutInflater: LayoutInflater,
@@ -38,6 +36,7 @@ class AudioContentOrderConfirmDialog(
val dialogView = DialogAudioContentOrderConfirmBinding.inflate(layoutInflater) val dialogView = DialogAudioContentOrderConfirmBinding.inflate(layoutInflater)
init { init {
val context = dialogView.root.context
val dialogBuilder = AlertDialog.Builder(activity) val dialogBuilder = AlertDialog.Builder(activity)
dialogBuilder.setView(dialogView.root) dialogBuilder.setView(dialogView.root)
@@ -82,7 +81,10 @@ class AudioContentOrderConfirmDialog(
dialogView.tvPoint.visibility = View.GONE dialogView.tvPoint.visibility = View.GONE
dialogView.tvPlus.visibility = View.GONE dialogView.tvPlus.visibility = View.GONE
dialogView.ivCan.visibility = View.GONE dialogView.ivCan.visibility = View.GONE
dialogView.tvCan.text = "${(price * 110).moneyFormat()}" dialogView.tvCan.text = context.getString(
R.string.audio_content_order_price_won_format,
(price * 110).moneyFormat()
)
} else { } else {
if (usablePoint > 0) { if (usablePoint > 0) {
dialogView.ivPoint.visibility = View.VISIBLE dialogView.ivPoint.visibility = View.VISIBLE
@@ -111,19 +113,19 @@ class AudioContentOrderConfirmDialog(
} }
} }
if (SharedPreferenceManager.userId == 17958L) { val noticeResId = when {
dialogView.tvNotice.text = if (orderType == OrderType.RENTAL) { SharedPreferenceManager.userId == 17958L && orderType == OrderType.RENTAL ->
"콘텐츠를 대여하시겠습니까?" R.string.audio_content_order_confirm_notice_rental_simple
} else {
"콘텐츠를 소장하시겠습니까?" SharedPreferenceManager.userId == 17958L && orderType == OrderType.KEEP ->
} R.string.audio_content_order_confirm_notice_keep_simple
} else {
dialogView.tvNotice.text = if (orderType == OrderType.RENTAL) { orderType == OrderType.RENTAL ->
"콘텐츠를 대여하시겠습니까?\n아래 금액이 차감됩니다." R.string.audio_content_order_confirm_notice_rental
} else {
"콘텐츠를 소장하시겠습니까?\n아래 금액이 차감됩니다." else -> R.string.audio_content_order_confirm_notice_keep
}
} }
dialogView.tvNotice.text = dialogView.root.context.getString(noticeResId)
dialogView.tvCancel.setOnClickListener { dialogView.tvCancel.setOnClickListener {
alertDialog.dismiss() alertDialog.dismiss()

View File

@@ -1,11 +1,11 @@
package kr.co.vividnext.sodalive.audio_content.order package kr.co.vividnext.sodalive.audio_content.order
import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.databinding.FragmentAudioContentOrderBinding import kr.co.vividnext.sodalive.databinding.FragmentAudioContentOrderBinding
import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.extensions.moneyFormat
@@ -28,23 +28,31 @@ class AudioContentOrderFragment(
return binding.root return binding.root
} }
@SuppressLint("SetTextI18n")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
val context = requireContext()
if (SharedPreferenceManager.userId == 17958L) { if (SharedPreferenceManager.userId == 17958L) {
binding.tvKeepDate.text = "(이용기간 1년)" binding.tvKeepDate.text =
context.getString(R.string.audio_content_order_keep_period_special)
binding.ivKeepCan.visibility = View.GONE binding.ivKeepCan.visibility = View.GONE
binding.ivRentalCan.visibility = View.GONE binding.ivRentalCan.visibility = View.GONE
} else { } else {
binding.tvKeepDate.text = "(서비스 종료시까지)" binding.tvKeepDate.text =
context.getString(R.string.audio_content_order_keep_period_default)
binding.ivKeepCan.visibility = View.VISIBLE binding.ivKeepCan.visibility = View.VISIBLE
binding.ivRentalCan.visibility = View.VISIBLE binding.ivRentalCan.visibility = View.VISIBLE
} }
if (SharedPreferenceManager.userId == 17958L) { if (SharedPreferenceManager.userId == 17958L) {
binding.tvKeep.text = "${(price * 110).moneyFormat()}" binding.tvKeep.text = context.getString(
binding.tvRental.text = "${(ceil(price * 0.7).toInt() * 110).moneyFormat()}" R.string.audio_content_order_price_won_format,
(price * 110).moneyFormat()
)
binding.tvRental.text = context.getString(
R.string.audio_content_order_price_won_format,
(ceil(price * 0.7).toInt() * 110).moneyFormat()
)
} else { } else {
binding.tvKeep.text = price.moneyFormat() binding.tvKeep.text = price.moneyFormat()
binding.tvRental.text = ceil(price * 0.7).toInt().moneyFormat() binding.tvRental.text = ceil(price * 0.7).toInt().moneyFormat()

View File

@@ -33,7 +33,7 @@ class AudioContentOrderListActivity : BaseActivity<ActivityAudioContentOrderList
} }
private fun setupToolbar() { private fun setupToolbar() {
binding.toolbar.tvBack.text = "콘텐츠 보관함" binding.toolbar.tvBack.text = getString(R.string.screen_audio_content_order_title)
binding.toolbar.tvBack.setOnClickListener { finish() } binding.toolbar.tvBack.setOnClickListener { finish() }
} }
} }

View File

@@ -122,7 +122,7 @@ class AudioContentOrderListFragment : BaseFragment<FragmentAudioContentOrderList
} }
viewModel.totalCount.observe(viewLifecycleOwner) { viewModel.totalCount.observe(viewLifecycleOwner) {
binding.tvTotalCount.text = "$it" binding.tvTotalCount.text = it.toString()
} }
} }
} }

View File

@@ -5,8 +5,10 @@ import androidx.lifecycle.MutableLiveData
import com.orhanobut.logger.Logger import com.orhanobut.logger.Logger
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.audio_content.AudioContentRepository import kr.co.vividnext.sodalive.audio_content.AudioContentRepository
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
class AudioContentOrderListViewModel( class AudioContentOrderListViewModel(
@@ -34,6 +36,7 @@ class AudioContentOrderListViewModel(
private val size = 10 private val size = 10
fun getAudioContentOrderList(onFailure: (() -> Unit)? = null) { fun getAudioContentOrderList(onFailure: (() -> Unit)? = null) {
val unknownError = SodaLiveApplicationHolder.get().getString(R.string.common_error_unknown)
if (_isLoading.value == false) { if (_isLoading.value == false) {
_isLoading.value = true _isLoading.value = true
compositeDisposable.add( compositeDisposable.add(
@@ -59,9 +62,7 @@ class AudioContentOrderListViewModel(
if (it.message != null) { if (it.message != null) {
_toastLiveData.postValue(it.message) _toastLiveData.postValue(it.message)
} else { } else {
_toastLiveData.postValue( _toastLiveData.postValue(unknownError)
"알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
)
} }
if (onFailure != null) { if (onFailure != null) {
@@ -73,7 +74,7 @@ class AudioContentOrderListViewModel(
{ {
_isLoading.value = false _isLoading.value = false
it.message?.let { message -> Logger.e(message) } it.message?.let { message -> Logger.e(message) }
_toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") _toastLiveData.postValue(unknownError)
if (onFailure != null) { if (onFailure != null) {
onFailure() onFailure()
} }

View File

@@ -15,7 +15,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:text="구매확인" android:text="@string/audio_content_order_confirm_title"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="18.3sp" /> android:textSize="18.3sp" />
@@ -118,7 +118,7 @@
android:gravity="center" android:gravity="center"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="13.3sp" android:textSize="13.3sp"
tools:text="콘텐츠를 소장하시겠습니까?\n아래 캔이 차감됩니다." /> tools:text="@string/audio_content_order_confirm_notice_keep" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -153,7 +153,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="+" android:text="@string/audio_content_order_plus"
android:visibility="gone" android:visibility="gone"
android:layout_marginHorizontal="10dp" android:layout_marginHorizontal="10dp"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
@@ -192,7 +192,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="15.7dp" android:paddingVertical="15.7dp"
android:text="취소" android:text="@string/cancel"
android:textColor="@color/color_3bb9f1" android:textColor="@color/color_3bb9f1"
android:textSize="18.3sp" /> android:textSize="18.3sp" />
@@ -206,7 +206,7 @@
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="15.7dp" android:paddingVertical="15.7dp"
android:text="확인" android:text="@string/confirm"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="18.3sp" /> android:textSize="18.3sp" />
</LinearLayout> </LinearLayout>

View File

@@ -20,7 +20,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="대여" android:text="@string/audio_content_order_label_rental"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -28,7 +28,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_light" android:fontFamily="@font/gmarket_sans_light"
android:text="(이용기간 5일)" android:text="@string/audio_content_order_label_rental_period"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="12sp" /> android:textSize="12sp" />
</LinearLayout> </LinearLayout>
@@ -80,7 +80,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/gmarket_sans_bold"
android:text="소장" android:text="@string/audio_content_order_label_keep"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="13.3sp" /> android:textSize="13.3sp" />
@@ -89,7 +89,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_light" android:fontFamily="@font/gmarket_sans_light"
android:text="(이용기간 1년)" android:text="@string/audio_content_order_keep_period_default"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="12sp" /> android:textSize="12sp" />
</LinearLayout> </LinearLayout>

View File

@@ -11,8 +11,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="13.3dp" android:layout_marginStart="13.3dp"
android:layout_marginEnd="4dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="" android:text="@string/screen_audio_content_order_total_prefix"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -22,6 +23,7 @@
android:id="@+id/tv_total_count" android:id="@+id/tv_total_count"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:textColor="@color/color_dd4500" android:textColor="@color/color_dd4500"
android:textSize="12sp" android:textSize="12sp"
@@ -33,7 +35,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium" android:fontFamily="@font/gmarket_sans_medium"
android:text="" android:text="@string/audio_content_total_unit"
android:textColor="@color/color_eeeeee" android:textColor="@color/color_eeeeee"
android:textSize="12sp" android:textSize="12sp"
app:layout_constraintStart_toEndOf="@+id/tv_total_count" app:layout_constraintStart_toEndOf="@+id/tv_total_count"

View File

@@ -842,6 +842,20 @@
<string name="screen_audio_content_sort_price_low">Price: Low to High</string> <string name="screen_audio_content_sort_price_low">Price: Low to High</string>
<string name="screen_audio_content_sort_popularity">Popularity</string> <string name="screen_audio_content_sort_popularity">Popularity</string>
<string name="screen_audio_content_empty">No content to display.</string> <string name="screen_audio_content_empty">No content to display.</string>
<string name="screen_audio_content_order_title">Content library</string>
<string name="screen_audio_content_order_total_prefix">Total</string>
<string name="audio_content_order_label_rental">Rent</string>
<string name="audio_content_order_label_rental_period">(Valid for 5 days)</string>
<string name="audio_content_order_label_keep">Own</string>
<string name="audio_content_order_keep_period_default">(Until service ends)</string>
<string name="audio_content_order_keep_period_special">(Valid for 1 year)</string>
<string name="audio_content_order_price_won_format">₩%1$s</string>
<string name="audio_content_order_confirm_title">Purchase confirmation</string>
<string name="audio_content_order_confirm_notice_rental">Rent this content?\nThe amount below will be charged.</string>
<string name="audio_content_order_confirm_notice_keep">Own this content?\nThe amount below will be charged.</string>
<string name="audio_content_order_confirm_notice_rental_simple">Rent this content?</string>
<string name="audio_content_order_confirm_notice_keep_simple">Own this content?</string>
<string name="audio_content_order_plus">+</string>
<string name="audio_content_label_all">All</string> <string name="audio_content_label_all">All</string>
<string name="audio_content_total_unit">items</string> <string name="audio_content_total_unit">items</string>
<string name="audio_content_price_free">Free</string> <string name="audio_content_price_free">Free</string>

View File

@@ -842,6 +842,20 @@
<string name="screen_audio_content_sort_price_low">価格が低い順</string> <string name="screen_audio_content_sort_price_low">価格が低い順</string>
<string name="screen_audio_content_sort_popularity">人気順</string> <string name="screen_audio_content_sort_popularity">人気順</string>
<string name="screen_audio_content_empty">表示できるコンテンツがありません。</string> <string name="screen_audio_content_empty">表示できるコンテンツがありません。</string>
<string name="screen_audio_content_order_title">コンテンツライブラリ</string>
<string name="screen_audio_content_order_total_prefix">合計</string>
<string name="audio_content_order_label_rental">レンタル</string>
<string name="audio_content_order_label_rental_period">(利用期間5日)</string>
<string name="audio_content_order_label_keep">購入</string>
<string name="audio_content_order_keep_period_default">(サービス終了まで)</string>
<string name="audio_content_order_keep_period_special">(利用期間1年)</string>
<string name="audio_content_order_price_won_format">₩%1$s</string>
<string name="audio_content_order_confirm_title">購入確認</string>
<string name="audio_content_order_confirm_notice_rental">このコンテンツをレンタルしますか?\n下記の金額が差し引かれます。</string>
<string name="audio_content_order_confirm_notice_keep">このコンテンツを購入しますか?\n下記の金額が差し引かれます。</string>
<string name="audio_content_order_confirm_notice_rental_simple">このコンテンツをレンタルしますか?</string>
<string name="audio_content_order_confirm_notice_keep_simple">このコンテンツを購入しますか?</string>
<string name="audio_content_order_plus">+</string>
<string name="audio_content_label_all">すべて</string> <string name="audio_content_label_all">すべて</string>
<string name="audio_content_total_unit"></string> <string name="audio_content_total_unit"></string>
<string name="audio_content_price_free">無料</string> <string name="audio_content_price_free">無料</string>

View File

@@ -841,6 +841,20 @@
<string name="screen_audio_content_sort_price_low">낮은 가격순</string> <string name="screen_audio_content_sort_price_low">낮은 가격순</string>
<string name="screen_audio_content_sort_popularity">인기순</string> <string name="screen_audio_content_sort_popularity">인기순</string>
<string name="screen_audio_content_empty">표시할 콘텐츠가 없습니다.</string> <string name="screen_audio_content_empty">표시할 콘텐츠가 없습니다.</string>
<string name="screen_audio_content_order_title">콘텐츠 보관함</string>
<string name="screen_audio_content_order_total_prefix"></string>
<string name="audio_content_order_label_rental">대여</string>
<string name="audio_content_order_label_rental_period">(이용기간 5일)</string>
<string name="audio_content_order_label_keep">소장</string>
<string name="audio_content_order_keep_period_default">(서비스 종료시까지)</string>
<string name="audio_content_order_keep_period_special">(이용기간 1년)</string>
<string name="audio_content_order_price_won_format">%1$s원</string>
<string name="audio_content_order_confirm_title">구매확인</string>
<string name="audio_content_order_confirm_notice_rental">콘텐츠를 대여하시겠습니까?\n아래 금액이 차감됩니다.</string>
<string name="audio_content_order_confirm_notice_keep">콘텐츠를 소장하시겠습니까?\n아래 금액이 차감됩니다.</string>
<string name="audio_content_order_confirm_notice_rental_simple">콘텐츠를 대여하시겠습니까?</string>
<string name="audio_content_order_confirm_notice_keep_simple">콘텐츠를 소장하시겠습니까?</string>
<string name="audio_content_order_plus">+</string>
<string name="audio_content_label_all">전체</string> <string name="audio_content_label_all">전체</string>
<string name="audio_content_total_unit"></string> <string name="audio_content_total_unit"></string>
<string name="audio_content_price_free">무료</string> <string name="audio_content_price_free">무료</string>