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

주문 목록/확인 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
import android.os.Handler
import android.os.Looper
import android.widget.LinearLayout
import com.google.android.material.tabs.TabLayout
import kr.co.vividnext.sodalive.R

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -11,8 +11,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="13.3dp"
android:layout_marginEnd="4dp"
android:fontFamily="@font/gmarket_sans_medium"
android:text=""
android:text="@string/screen_audio_content_order_total_prefix"
android:textColor="@color/color_eeeeee"
android:textSize="12sp"
app:layout_constraintStart_toStartOf="parent"
@@ -22,6 +23,7 @@
android:id="@+id/tv_total_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:fontFamily="@font/gmarket_sans_medium"
android:textColor="@color/color_dd4500"
android:textSize="12sp"
@@ -33,7 +35,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_medium"
android:text=""
android:text="@string/audio_content_total_unit"
android:textColor="@color/color_eeeeee"
android:textSize="12sp"
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_popularity">Popularity</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_total_unit">items</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_popularity">人気順</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_total_unit"></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_popularity">인기순</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_total_unit"></string>
<string name="audio_content_price_free">무료</string>