From dc00fd0277cdb92253a79098f1eb6bb87ae81ee9 Mon Sep 17 00:00:00 2001 From: klaus Date: Wed, 3 Dec 2025 15:03:23 +0900 Subject: [PATCH] =?UTF-8?q?AudioContent=20=EC=83=81=EC=84=B8=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=20=EB=A6=AC=EC=86=8C=EC=8A=A4=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 상세 화면과 다이얼로그의 하드코딩 텍스트를 문자열 리소스로 이동했습니다. ko/en/ja 리소스 추가 및 기본 시간 표시, 토스트, 공유 문구를 리소스 키로 통일했습니다. --- .../detail/AudioContentDeleteDialog.kt | 10 +- .../detail/AudioContentDetailActivity.kt | 59 +++++++---- ...AudioContentDetailMenuBottomSheetDialog.kt | 5 +- .../detail/AudioContentDetailViewModel.kt | 75 ++++++++------ .../detail/AudioContentReportDialog.kt | 9 +- .../layout/activity_audio_content_detail.xml | 99 ++++++++++--------- .../layout/dialog_audio_content_delete.xml | 10 +- .../dialog_audio_content_detail_menu.xml | 18 ++-- .../layout/dialog_audio_content_report.xml | 22 ++--- app/src/main/res/values-en/strings.xml | 60 +++++++++++ app/src/main/res/values-ja/strings.xml | 60 +++++++++++ app/src/main/res/values/strings.xml | 60 +++++++++++ 12 files changed, 360 insertions(+), 127 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDeleteDialog.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDeleteDialog.kt index a58d53b4..338e756a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDeleteDialog.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDeleteDialog.kt @@ -8,6 +8,7 @@ import android.view.LayoutInflater import android.view.WindowManager import android.widget.Toast import androidx.appcompat.app.AlertDialog +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.databinding.DialogAudioContentDeleteBinding import kr.co.vividnext.sodalive.extensions.dpToPx @@ -31,7 +32,10 @@ class AudioContentDeleteDialog( alertDialog.setCancelable(false) alertDialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) - dialogView.tvTitle.text = "[$title]을 삭제하시겠습니까?" + dialogView.tvTitle.text = activity.getString( + R.string.screen_audio_content_detail_delete_confirm_message, + title + ) dialogView.tvCancel.setOnClickListener { alertDialog.dismiss() } @@ -43,7 +47,9 @@ class AudioContentDeleteDialog( } else { Toast.makeText( activity, - "동의하셔야 삭제할 수 있습니다.", + activity.getString( + R.string.screen_audio_content_detail_delete_consent_required + ), Toast.LENGTH_LONG ).show() } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt index 89e4a92d..25a05771 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailActivity.kt @@ -94,8 +94,11 @@ class AudioContentDetailActivity : BaseActivity if (can <= 0) { - showToast("1캔 이상 후원하실 수 있습니다.") + showToast(getString(R.string.screen_audio_content_detail_donation_minimum)) } else if (message.isBlank()) { - showToast("함께 보낼 메시지를 입력하세요.") + showToast( + getString(R.string.screen_audio_content_detail_donation_empty_message) + ) } else { donation(can, message) } @@ -355,13 +364,11 @@ class AudioContentDetailActivity : BaseActivity { - binding.tvStrPurchaseOrRental.text = " 구매하기" + binding.tvStrPurchaseOrRental.text = + getString(R.string.screen_audio_content_detail_action_buy) binding.llPurchase.setBackgroundResource( R.drawable.bg_round_corner_5_3_3bb9f1 ) } PurchaseOption.BUY_ONLY -> { - binding.tvStrPurchaseOrRental.text = " 소장하기" + binding.tvStrPurchaseOrRental.text = + getString(R.string.screen_audio_content_detail_action_keep) binding.llPurchase.setBackgroundResource( R.drawable.bg_round_corner_5_3_59548f ) } PurchaseOption.RENT_ONLY -> { - binding.tvStrPurchaseOrRental.text = " 대여하기" + binding.tvStrPurchaseOrRental.text = + getString(R.string.screen_audio_content_detail_action_rental) binding.llPurchase.setBackgroundResource( R.drawable.bg_round_corner_5_3_548f7d ) @@ -757,7 +767,10 @@ class AudioContentDetailActivity : BaseActivity 0) { binding.sbProgress.max = duration - binding.tvTotalDuration.text = " / ${Utils.convertDurationToString(duration)}" + binding.tvTotalDuration.text = getString( + R.string.screen_audio_content_detail_total_duration_format, + Utils.convertDurationToString(duration) + ) } if (progress != null && progress > 0) { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailMenuBottomSheetDialog.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailMenuBottomSheetDialog.kt index 5e8a4e7c..d5e4dbdf 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailMenuBottomSheetDialog.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailMenuBottomSheetDialog.kt @@ -36,10 +36,11 @@ class AudioContentDetailMenuBottomSheetDialog( if (isPin) { dialog.ivPin.setImageResource(R.drawable.ic_pin_cancel) - dialog.tvPin.text = "내 채널에 고정 취소" + dialog.tvPin.text = + getString(R.string.screen_audio_content_detail_pin_cancel) } else { dialog.ivPin.setImageResource(R.drawable.ic_pin) - dialog.tvPin.text = "내 채널에 고정" + dialog.tvPin.text = getString(R.string.screen_audio_content_detail_pin) } dialog.llPin.setOnClickListener { diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailViewModel.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailViewModel.kt index 8e1b084b..ea9fe00e 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailViewModel.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentDetailViewModel.kt @@ -1,15 +1,18 @@ package kr.co.vividnext.sodalive.audio_content.detail +import androidx.annotation.StringRes import androidx.lifecycle.LiveData 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.audio_content.comment.AudioContentCommentRepository import kr.co.vividnext.sodalive.audio_content.order.OrderType import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.common.SharedPreferenceManager +import kr.co.vividnext.sodalive.common.SodaLiveApplicationHolder import kr.co.vividnext.sodalive.common.Utils import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.mypage.auth.AuthRepository @@ -52,6 +55,9 @@ class AudioContentDetailViewModel( val isContentPlayLoopLiveData: LiveData get() = _isContentPlayLoopLiveData + private fun getString(@StringRes resId: Int, vararg args: Any) = + SodaLiveApplicationHolder.get().getString(resId, *args) + fun getAudioContentDetail(audioContentId: Long, onFailure: (() -> Unit)? = null) { if (!isLoading.value!!) { isLoading.value = true @@ -73,7 +79,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } @@ -87,7 +93,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) if (onFailure != null) { onFailure() } @@ -116,7 +122,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -125,7 +131,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -155,9 +161,13 @@ class AudioContentDetailViewModel( getAudioContentDetail(audioContentId = contentId) _toastLiveData.postValue( if (orderType == OrderType.RENTAL) { - "대여가 완료되었습니다." + getString( + R.string.screen_audio_content_detail_order_rental_success + ) } else { - "구매가 완료되었습니다." + getString( + R.string.screen_audio_content_detail_order_keep_success + ) } ) } else { @@ -168,7 +178,7 @@ class AudioContentDetailViewModel( } } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -177,7 +187,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -201,7 +211,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } @@ -211,7 +221,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -240,7 +250,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } @@ -250,7 +260,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -283,7 +293,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -291,7 +301,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -327,7 +337,7 @@ class AudioContentDetailViewModel( if (it.success) { _toastLiveData.postValue( - "삭제되었습니다." + getString(R.string.screen_audio_content_detail_delete_success) ) onSuccess() } else { @@ -335,7 +345,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -343,7 +353,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -365,7 +375,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "신고가 접수되었습니다." + getString(R.string.screen_audio_content_detail_report_submitted) ) } @@ -374,7 +384,9 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("신고가 접수되었습니다.") + _toastLiveData.postValue( + getString(R.string.screen_audio_content_detail_report_submitted) + ) } ) ) @@ -404,7 +416,10 @@ class AudioContentDetailViewModel( if (it.success) { SharedPreferenceManager.can -= can _toastLiveData.postValue( - "${can.moneyFormat()}캔을 후원하였습니다." + getString( + R.string.screen_audio_content_detail_donation_success, + can.moneyFormat() + ) ) onSuccess() } else { @@ -412,7 +427,7 @@ class AudioContentDetailViewModel( _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -420,7 +435,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -440,14 +455,16 @@ class AudioContentDetailViewModel( isLoading.value = false if (it.success) { - _toastLiveData.postValue("고정되었습니다.") + _toastLiveData.postValue( + getString(R.string.screen_audio_content_detail_pin_success) + ) getAudioContentDetail(audioContentId) } else { if (it.message != null) { _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -455,7 +472,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) @@ -475,14 +492,16 @@ class AudioContentDetailViewModel( isLoading.value = false if (it.success) { - _toastLiveData.postValue("해제되었습니다.") + _toastLiveData.postValue( + getString(R.string.screen_audio_content_detail_unpin_success) + ) getAudioContentDetail(audioContentId) } else { if (it.message != null) { _toastLiveData.postValue(it.message) } else { _toastLiveData.postValue( - "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요." + getString(R.string.common_error_unknown) ) } } @@ -490,7 +509,7 @@ class AudioContentDetailViewModel( { isLoading.value = false it.message?.let { message -> Logger.e(message) } - _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.") + _toastLiveData.postValue(getString(R.string.common_error_unknown)) } ) ) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentReportDialog.kt b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentReportDialog.kt index e39dc27b..579733cc 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentReportDialog.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/audio_content/detail/AudioContentReportDialog.kt @@ -8,6 +8,7 @@ import android.view.WindowManager import android.widget.RadioButton import android.widget.Toast import androidx.appcompat.app.AlertDialog +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.databinding.DialogAudioContentReportBinding import kr.co.vividnext.sodalive.extensions.dpToPx @@ -37,7 +38,13 @@ class AudioContentReportDialog( alertDialog.dismiss() confirmButtonClick(reason) } else { - Toast.makeText(activity, "신고 이유를 선택하세요.", Toast.LENGTH_LONG).show() + Toast.makeText( + activity, + activity.getString( + R.string.screen_audio_content_detail_report_reason_required + ), + Toast.LENGTH_LONG + ).show() } } diff --git a/app/src/main/res/layout/activity_audio_content_detail.xml b/app/src/main/res/layout/activity_audio_content_detail.xml index 3df4f326..81d7c6f5 100644 --- a/app/src/main/res/layout/activity_audio_content_detail.xml +++ b/app/src/main/res/layout/activity_audio_content_detail.xml @@ -147,7 +147,7 @@ android:layout_centerInParent="true" android:background="@drawable/bg_round_corner_46_7_333333" android:padding="13.3dp" - android:text="해당 콘텐츠는 크리에이터의 요청으로\n미리듣기를 제공하지 않습니다" + android:text="@string/screen_audio_content_detail_preview_unavailable" android:textColor="@color/color_eeeeee" android:textSize="16.7sp" android:visibility="gone" /> @@ -176,7 +176,7 @@ android:layout_height="wrap_content" android:layout_centerInParent="true" android:fontFamily="@font/gmarket_sans_bold" - android:text="Sold Out" + android:text="@string/audio_content_badge_sold_out" android:textColor="@color/white" android:textSize="36.7sp" android:visibility="gone" /> @@ -205,7 +205,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="00:00:00" + android:text="@string/screen_audio_content_detail_time_default" android:textColor="@color/white" android:textSize="12sp" app:layout_constraintStart_toStartOf="parent" @@ -216,7 +216,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text=" / 00:00:00" + android:text="@string/screen_audio_content_detail_time_total_default" android:textColor="@color/white" android:textSize="12sp" app:layout_constraintStart_toEndOf="@+id/tv_current_duration" @@ -287,7 +287,7 @@ android:layout_height="wrap_content" android:layout_marginTop="5.3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="이전화" + android:text="@string/screen_audio_content_detail_previous" android:textColor="@color/color_3bb9f1" android:textSize="13.3sp" /> @@ -332,7 +332,7 @@ android:layout_height="wrap_content" android:layout_marginTop="5.3dp" android:fontFamily="@font/gmarket_sans_medium" - android:text="다음화" + android:text="@string/screen_audio_content_detail_next" android:textColor="@color/color_3bb9f1" android:textSize="13.3sp" /> @@ -365,7 +365,7 @@ android:background="@drawable/bg_round_corner_2_6_003851" android:paddingHorizontal="5.3dp" android:paddingVertical="3.3dp" - android:text="오픈예정" + android:text="@string/audio_content_badge_scheduled" android:textColor="@color/color_3bb9f1" android:visibility="gone" /> @@ -396,13 +396,13 @@ android:id="@+id/tv_purchased" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentEnd="true" - android:background="@drawable/bg_round_corner_2_6_26310f" - android:paddingHorizontal="5.3dp" - android:paddingVertical="3.3dp" - android:text="소장중" - android:textColor="@color/color_b1ef2c" - android:visibility="gone" /> + android:layout_alignParentEnd="true" + android:background="@drawable/bg_round_corner_2_6_26310f" + android:paddingHorizontal="5.3dp" + android:paddingVertical="3.3dp" + android:text="@string/audio_content_badge_owned" + android:textColor="@color/color_b1ef2c" + android:visibility="gone" /> + android:layout_alignParentEnd="true" + android:background="@drawable/bg_round_corner_2_6_30176f" + android:paddingHorizontal="5.3dp" + android:paddingVertical="3.3dp" + android:text="@string/audio_content_badge_rented" + android:textColor="@color/color_9970ff" + android:visibility="gone" /> @@ -524,7 +524,7 @@ android:layout_marginStart="4dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="후원" + android:text="@string/screen_audio_content_detail_donation" android:textColor="@color/color_d2d2d2" android:textSize="13.3sp" /> @@ -547,7 +547,7 @@ android:layout_height="wrap_content" android:layout_centerVertical="true" android:fontFamily="@font/gmarket_sans_medium" - android:text="한정판" + android:text="@string/screen_audio_content_detail_limited_edition" android:textColor="@color/color_3bb9f1" android:textSize="13.3sp" /> @@ -567,7 +567,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:paddingHorizontal="5.3dp" android:paddingVertical="3.3dp" - android:text="Sold Out" + android:text="@string/audio_content_badge_sold_out" android:textColor="@color/color_d2d2d2" android:textSize="12sp" android:visibility="gone" /> @@ -577,7 +577,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" - android:text="잔여수량" + android:text="@string/screen_audio_content_detail_remaining" android:textColor="@color/color_d2d2d2" android:textSize="13.3sp" /> @@ -609,7 +609,7 @@ android:layout_marginHorizontal="13.3dp" android:layout_marginTop="13.3dp" android:fontFamily="@font/gmarket_sans_bold" - android:text="구매자" + android:text="@string/screen_audio_content_detail_buyer_title" android:textColor="@color/color_eeeeee" android:textSize="18.3sp" android:visibility="gone" /> @@ -665,11 +665,11 @@ android:visibility="gone"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/screen_audio_content_detail_preview_message" + android:textColor="@color/color_bbbbbb" + android:textSize="12sp" /> @@ -739,7 +739,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_light" - android:text="캔으로" + android:text="@string/screen_audio_content_detail_purchase_unit_can" android:textColor="@color/white" android:textSize="12sp" /> @@ -747,8 +747,9 @@ android:id="@+id/tv_str_purchase_or_rental" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="4dp" android:fontFamily="@font/gmarket_sans_bold" - android:text=" 구매하기" + android:text="@string/screen_audio_content_detail_action_buy" android:textColor="@color/white" android:textSize="14.7sp" /> @@ -786,12 +787,12 @@ android:orientation="horizontal"> + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/gmarket_sans_medium" + android:text="@string/screen_audio_content_detail_comment_title" + android:textColor="@color/white" + android:textSize="12sp" /> @@ -929,7 +930,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="크리에이터의 다른 콘텐츠를 준비중입니다.\n조금만 기다려주세요." + android:text="@string/screen_audio_content_detail_creator_other_empty" android:textColor="@color/color_bbbbbb" android:textSize="10.7sp" tools:ignore="SmallSp" /> @@ -953,7 +954,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" - android:text="테마의 다른 콘텐츠" + android:text="@string/screen_audio_content_detail_theme_other_title" android:textColor="@color/color_eeeeee" android:textSize="18.3sp" /> @@ -985,7 +986,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="테마의 다른 콘텐츠를 준비중입니다.\n조금만 기다려주세요." + android:text="@string/screen_audio_content_detail_theme_other_empty" android:textColor="@color/color_bbbbbb" android:textSize="10.7sp" tools:ignore="SmallSp" /> @@ -1026,7 +1027,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="21.3dp" - android:text="본 콘텐츠는 만 19세 미만의 청소년이\n이용할 수 없습니다.\n본인인증 후 콘텐츠를 이용해 주세요." + android:text="@string/screen_audio_content_detail_adult_notice" android:textColor="@color/color_bbbbbb" android:textSize="18.7sp" /> @@ -1038,7 +1039,7 @@ android:background="@drawable/bg_round_corner_26_7_26ffffff" android:paddingHorizontal="13.3dp" android:paddingVertical="8dp" - android:text="본인인증" + android:text="@string/auth_title" android:textColor="@color/white" android:textSize="18.7sp" /> diff --git a/app/src/main/res/layout/dialog_audio_content_delete.xml b/app/src/main/res/layout/dialog_audio_content_delete.xml index 58914bf3..0109927b 100644 --- a/app/src/main/res/layout/dialog_audio_content_delete.xml +++ b/app/src/main/res/layout/dialog_audio_content_delete.xml @@ -15,7 +15,7 @@ android:layout_height="wrap_content" android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" - android:text="콘텐츠 삭제" + android:text="@string/screen_audio_content_detail_delete_title" android:textColor="@color/color_eeeeee" android:textSize="18.3sp" /> @@ -44,7 +44,7 @@ android:drawablePadding="13.3dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center_vertical" - android:text="삭제된 콘텐츠는 되돌릴 수 없음을 알고 있습니다." + android:text="@string/screen_audio_content_detail_delete_notice" android:textColor="@color/color_eeeeee" android:textSize="13.3sp" app:drawableStartCompat="@drawable/ic_select" /> @@ -57,7 +57,7 @@ android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" android:lineSpacingExtra="4dp" - android:text="콘텐츠를 삭제하더라도 이미 구매한\n사용자는 콘텐츠를 이용할 수 있습니다." + android:text="@string/screen_audio_content_detail_delete_desc" android:textColor="@color/color_dd4500" android:textSize="12sp" /> @@ -77,7 +77,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" /> @@ -91,7 +91,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" /> diff --git a/app/src/main/res/layout/dialog_audio_content_detail_menu.xml b/app/src/main/res/layout/dialog_audio_content_detail_menu.xml index c37b227d..b538bf1c 100644 --- a/app/src/main/res/layout/dialog_audio_content_detail_menu.xml +++ b/app/src/main/res/layout/dialog_audio_content_detail_menu.xml @@ -37,7 +37,7 @@ android:layout_marginStart="13.3dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="내 채널에 고정" + android:text="@string/screen_audio_content_detail_pin" android:textColor="@color/color_e2e2e2" android:textSize="14.7sp" /> @@ -64,7 +64,7 @@ android:layout_marginStart="13.3dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="수정" + android:text="@string/screen_audio_content_detail_edit" android:textColor="@color/color_e2e2e2" android:textSize="14.7sp" /> @@ -91,7 +91,7 @@ android:layout_marginStart="13.3dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="삭제" + android:text="@string/screen_audio_content_detail_delete" android:textColor="@color/color_e2e2e2" android:textSize="14.7sp" /> @@ -101,10 +101,10 @@ android:id="@+id/tv_report" android:layout_width="match_parent" android:layout_height="wrap_content" - android:fontFamily="@font/gmarket_sans_medium" - android:paddingHorizontal="21.3dp" - android:paddingVertical="8dp" - android:text="신고하기" - android:textColor="@color/color_e2e2e2" - android:textSize="14.7sp" /> + android:fontFamily="@font/gmarket_sans_medium" + android:paddingHorizontal="21.3dp" + android:paddingVertical="8dp" + android:text="@string/screen_audio_content_detail_report" + android:textColor="@color/color_e2e2e2" + android:textSize="14.7sp" /> diff --git a/app/src/main/res/layout/dialog_audio_content_report.xml b/app/src/main/res/layout/dialog_audio_content_report.xml index d52da4b0..524d3d74 100644 --- a/app/src/main/res/layout/dialog_audio_content_report.xml +++ b/app/src/main/res/layout/dialog_audio_content_report.xml @@ -13,7 +13,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:fontFamily="@font/gmarket_sans_bold" - android:text="콘텐츠 신고" + android:text="@string/screen_audio_content_detail_report_title" android:textColor="@color/color_eeeeee" android:textSize="18.3sp" /> @@ -32,7 +32,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="괴롭힘 및 사이버 폭력" + android:text="@string/screen_audio_content_detail_report_reason_harassment" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -42,7 +42,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="개인정보 침해" + android:text="@string/screen_audio_content_detail_report_reason_privacy" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -52,7 +52,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="명의도용" + android:text="@string/screen_audio_content_detail_report_reason_impersonation" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -62,7 +62,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="폭력적 위협" + android:text="@string/screen_audio_content_detail_report_reason_threat" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -72,7 +72,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="아동학대" + android:text="@string/screen_audio_content_detail_report_reason_child_abuse" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -82,7 +82,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="보호대상 집단에 대한 증오심 표현" + android:text="@string/screen_audio_content_detail_report_reason_hate" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -92,7 +92,7 @@ android:layout_height="wrap_content" android:buttonTint="@color/color_9970ff" android:fontFamily="@font/gmarket_sans_medium" - android:text="스팸 및 사기" + android:text="@string/screen_audio_content_detail_report_reason_spam" android:textColor="@color/color_eeeeee" android:textSize="14sp" /> @@ -103,7 +103,7 @@ android:layout_marginTop="21.3dp" android:fontFamily="@font/gmarket_sans_medium" android:gravity="center" - android:text="신고한 콘텐츠를 관리자가 확인 후, 서비스 정책을\n위반한 경우 삭제 조치할 예정입니다." + android:text="@string/screen_audio_content_detail_report_desc" android:textColor="@color/color_dd4500" android:textSize="12sp" /> @@ -123,7 +123,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" /> @@ -137,7 +137,7 @@ android:fontFamily="@font/gmarket_sans_bold" android:gravity="center" android:paddingVertical="15.7dp" - android:text="신고" + android:text="@string/report_button" android:textColor="@color/white" android:textSize="18.3sp" /> diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index e2be86d3..12229217 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -863,6 +863,66 @@ Popular content ※ Rankings are updated weekly. Invalid request.\nPlease try again. + + Content details + You can donate 1 can or more. + Enter a message to send. + Pin limit reached + Pin this content?\nYou can pin up to 3 items on your channel.\nPinning this will replace the oldest item. + 00:00:00 + / 00:00:00 + / %1$s + Preview is unavailable at the creator’s request. + Previous + Next + Share audio content + Share + Donate + Limited + Remaining + Buyers + Preview is playing.\nPurchase to listen to the full content. + This content is sold out. + Pay with KRW + Pay with cans + Buy + Own + Rent + Comments + Private comment + Leave a comment + Creator’s other content + Other content from this creator is being prepared.\nPlease check back soon. + Other content in this theme + Other content for this theme is being prepared.\nPlease wait a moment. + This content is not available to users under 19.\nPlease verify your identity to continue. + Pin to my channel + Unpin from my channel + Edit + Delete + Report + Delete content + I understand that deleted content cannot be restored. + Even if you delete this content, users who purchased it can still access it. + Delete [%1$s]? + You must agree before deleting. + Report content + Harassment or cyberbullying + Privacy violation + Identity theft + Violent threats + Child abuse + Hate speech against protected groups + Spam or fraud + Our team will review the report and remove the content if it violates our policy. + Select a reason to report. + Rental completed. + Purchase completed. + Deleted. + Your report has been submitted. + You donated %1$s cans. + Pinned. + Unpinned. hh:mm diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index cc67b889..0e180886 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -863,6 +863,66 @@ 人気コンテンツ ※人気コンテンツの順位は毎週更新されます。 無効なリクエストです。\nもう一度お試しください。 + + コンテンツ詳細 + 1缶以上支援できます。 + 一緒に送るメッセージを入力してください。 + 固定上限に到達 + このコンテンツを固定しますか?\nチャンネルには最大3件まで固定できます。\nこのコンテンツを固定すると最も古いコンテンツが置き換えられます。 + 00:00:00 + / 00:00:00 + / %1$s + このコンテンツはクリエイターの要請により\n試聴を提供していません。 + 前の話 + 次の話 + 音声コンテンツを共有 + 共有 + 支援 + 限定版 + 残り数 + 購入者 + 試聴中です。\n購入して全編をお楽しみください。 + このコンテンツは売り切れました。 + ウォンで + 缶で + 購入 + 所持する + レンタル + コメント + 非公開コメント + コメントを入力してください + クリエイターの他のコンテンツ + クリエイターの他のコンテンツを準備中です。\nもう少しお待ちください。 + このテーマの他のコンテンツ + このテーマの他のコンテンツを準備中です。\nしばらくお待ちください。 + このコンテンツは19歳未満の方は利用できません。\n本人確認を行ってご利用ください。 + マイチャンネルに固定 + マイチャンネルの固定を解除 + 編集 + 削除 + 通報する + コンテンツ削除 + 削除されたコンテンツは復元できません。 + コンテンツを削除しても、すでに購入したユーザーは利用できます。 + [%1$s]を削除しますか? + 同意が必要です。 + コンテンツ通報 + 嫌がらせ・サイバーブリング + 個人情報の侵害 + なりすまし + 暴力的な脅迫 + 児童虐待 + 保護対象集団へのヘイトスピーチ + スパム・詐欺 + 通報されたコンテンツを確認し、規約違反の場合は削除します。 + 通報理由を選択してください。 + レンタルが完了しました。 + 購入が完了しました。 + 削除しました。 + 通報を受け付けました。 + %1$s缶を支援しました。 + 固定しました。 + 解除しました。 hh:mm diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bd96c3f6..7e2bc01e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -862,6 +862,66 @@ 인기 콘텐츠 ※ 인기 콘텐츠의 순위는 매주 업데이트됩니다. 잘못된 요청입니다.\n다시 시도해 주세요. + + 콘텐츠 상세 + 1캔 이상 후원하실 수 있습니다. + 함께 보낼 메시지를 입력하세요. + 고정 한도 도달 + 이 콘텐츠를 고정하시겠어요?\n채널에 콘텐츠를 최대 3개까지 고정할 수 있습니다.\n이 콘텐츠를 고정하면 가장 오래된 콘텐츠가 대체됩니다. + 00:00:00 + / 00:00:00 + / %1$s + 해당 콘텐츠는 크리에이터의 요청으로\n미리듣기를 제공하지 않습니다 + 이전화 + 다음화 + 오디오 콘텐츠 공유 + 공유 + 후원 + 한정판 + 잔여수량 + 구매자 + 미리듣기 중입니다.\n콘텐츠 구매 후 전체를 감상해 보세요. + 해당 콘텐츠가 매진되었습니다. + 원으로 + 캔으로 + 구매하기 + 소장하기 + 대여하기 + 댓글 + 비밀댓글 + 댓글을 입력해 보세요 + 크리에이터의 다른 콘텐츠 + 크리에이터의 다른 콘텐츠를 준비중입니다.\n조금만 기다려주세요. + 테마의 다른 콘텐츠 + 테마의 다른 콘텐츠를 준비중입니다.\n조금만 기다려주세요. + 본 콘텐츠는 만 19세 미만의 청소년이\n이용할 수 없습니다.\n본인인증 후 콘텐츠를 이용해 주세요. + 내 채널에 고정 + 내 채널에 고정 취소 + 수정 + 삭제 + 신고하기 + 콘텐츠 삭제 + 삭제된 콘텐츠는 되돌릴 수 없음을 알고 있습니다. + 콘텐츠를 삭제하더라도 이미 구매한\n사용자는 콘텐츠를 이용할 수 있습니다. + [%1$s]을 삭제하시겠습니까? + 동의하셔야 삭제할 수 있습니다. + 콘텐츠 신고 + 괴롭힘 및 사이버 폭력 + 개인정보 침해 + 명의도용 + 폭력적 위협 + 아동학대 + 보호대상 집단에 대한 증오심 표현 + 스팸 및 사기 + 신고한 콘텐츠를 관리자가 확인 후, 서비스 정책을\n위반한 경우 삭제 조치할 예정입니다. + 신고 이유를 선택하세요. + 대여가 완료되었습니다. + 구매가 완료되었습니다. + 삭제되었습니다. + 신고가 접수되었습니다. + %1$s캔을 후원하였습니다. + 고정되었습니다. + 해제되었습니다. hh:mm